// File: /workspace/github_cpp_makefile_star2_O2/pfnet-research[P]pml/src/translate_to_mdp.cpp
// Function: create_neg_case(ast::expr_t const&, environment_t<value_info_t> const&)
mdp_with_info_t create_neg_case(ast::expr_t const& inner, var_env_t const& var_env) {
    auto inner_ = trans_impl(inner, var_env);
    auto accept_loc = translation_data::fresh_location();
    auto result_var_name = translation_data::fresh_var();

    auto result_var = mdp::variable_t{result_var_name, true};

    // [] location=accept-of-inner -> 1:location'=accept_loc&result_var_name'=!inner
    auto concat = make_concat(
            inner_.accept, accept_loc,
            make<mdp::binop_expr_t>(
                make<mdp::var_expr_t>(result_var_name+"'"),
                make<mdp::neg_expr_t>(
                    make<mdp::var_expr_t>(inner_.value.name)),
                mdp::binop_kind_t::Eq));

    inner_.mdp.commands.push_back(concat);
    inner_.mdp.variables.push_back(result_var);

    return mdp_with_info_t {
        inner_.mdp, inner_.init, accept_loc,
        value_info_t {
            result_var_name, util::nullopt
        }
    };
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x1a0, %rsp            # imm = 0x1A0
movq %rdi, %rbx
leaq 0x100(%rsp), %rdi
callq 0x30c2e
movl 0x2a5c4(%rip), %r14d    # 0x5c2d0
leal 0x1(%r14), %eax
movl %eax, 0x2a5ba(%rip)     # 0x5c2d0
leaq 0x40(%rsp), %rdi
callq 0x3243a
leaq 0xd0(%rsp), %rdi
leaq 0x40(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0x325f2
movl 0x16c(%rsp), %ebp
leaq 0xa754(%rip), %rdx      # 0x3c497
leaq 0x88(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x3249c
leaq 0x28(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x3294b
leaq 0x170(%rsp), %rsi
leaq 0x8(%rsp), %rdi
callq 0x33141
leaq 0x18(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x33288
leaq 0x3c(%rsp), %rcx
movl $0x8, (%rcx)
leaq 0x60(%rsp), %rdi
leaq 0x28(%rsp), %rsi
leaq 0x18(%rsp), %rdx
callq 0x33493
leaq 0x78(%rsp), %r12
leaq 0x68(%rsp), %r15
movaps -0x8(%r15), %xmm0
movaps %xmm0, -0x8(%r12)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r15)
leaq 0xa8(%rsp), %rdi
leaq 0x70(%rsp), %rcx
movl %ebp, %esi
movl %r14d, %edx
callq 0x3045a
movq %r12, %rdi
callq 0xa248
movq %r15, %rdi
callq 0xa248
leaq 0x20(%rsp), %rdi
callq 0xa248
leaq 0x10(%rsp), %rdi
callq 0xa248
leaq 0x30(%rsp), %rdi
callq 0xa248
leaq 0x88(%rsp), %rdi
callq 0x9130
leaq 0x150(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x325c6
leaq 0x120(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0x32642
leaq 0x100(%rsp), %rsi
movq %rbx, %rdi
callq 0x324d4
movl 0x168(%rsp), %eax
movl %eax, 0x68(%rbx)
movl %r14d, 0x6c(%rbx)
leaq 0x70(%rbx), %rdi
leaq 0x40(%rsp), %rsi
callq 0x93a0
movb $0x0, 0x98(%rbx)
leaq 0xa8(%rsp), %rdi
callq 0xa198
leaq 0xd0(%rsp), %rdi
callq 0xa3e2
leaq 0x40(%rsp), %rdi
callq 0x9130
leaq 0x100(%rsp), %rdi
callq 0x2c15c
movq %rbx, %rax
addq $0x1a0, %rsp            # imm = 0x1A0
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
movq %rbx, %rdi
callq 0xa08a
jmp 0x31f2a
movq %rax, %r14
movq %r12, %rdi
callq 0xa248
movq %r15, %rdi
callq 0xa248
jmp 0x31edc
movq %rax, %r14
leaq 0x20(%rsp), %rdi
callq 0xa248
jmp 0x31eeb
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0xa248
jmp 0x31efa
movq %rax, %r14
leaq 0x30(%rsp), %rdi
callq 0xa248
jmp 0x31f09
movq %rax, %r14
leaq 0x88(%rsp), %rdi
callq 0x9130
jmp 0x31f37
movq %rax, %r14
jmp 0x31f37
movq %rax, %r14
jmp 0x31f44
movq %rax, %r14
jmp 0x31f4e
movq %rax, %r14
leaq 0xa8(%rsp), %rdi
callq 0xa198
leaq 0xd0(%rsp), %rdi
callq 0xa3e2
leaq 0x40(%rsp), %rdi
callq 0x9130
leaq 0x100(%rsp), %rdi
callq 0x2c15c
movq %r14, %rdi
callq 0x94d0