// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: User::Print(std::ostream&)
void User::Print(std::ostream &outfile) {
  for (auto &opn : operands_) {
    auto val = opn.Get();
    outfile << std::setw(INDENT);
    if (nullptr == val) {
      outfile << "nullptr";
    } else if (dynamic_cast<GlobalVariable *>(val)) {
      outfile << "%g:" + val->GetName();
    } else if (auto src_val = dynamic_cast<ConstantInt *>(val)) {
      outfile << "#" + std::to_string(src_val->GetImm());
    } else if (dynamic_cast<BasicBlockValue *>(val) || dynamic_cast<FunctionValue *>(val)) {
      outfile << "" + val->GetName();
    } else if (auto src_val = dynamic_cast<Argument *>(val)) {
      outfile << "%a" + std::to_string(src_val->GetArgNo()) + ":" + val->GetName();
    } else {
      outfile << "%" + val->GetName();
    }
  }
}

// Assembly:
subq $0x238, %rsp            # imm = 0x238
movq %rdi, 0x230(%rsp)
movq %rsi, 0x228(%rsp)
movq 0x230(%rsp), %rax
addq $0x48, %rax
movq %rax, 0x220(%rsp)
movq 0x220(%rsp), %rdi
callq 0x5e630
movq %rax, 0x218(%rsp)
movq 0x220(%rsp), %rdi
callq 0x5e780
movq %rax, 0x210(%rsp)
leaq 0x218(%rsp), %rdi
leaq 0x210(%rsp), %rsi
callq 0x5e7b0
testb $0x1, %al
jne 0x5d153
jmp 0x5d764
leaq 0x218(%rsp), %rdi
callq 0x5e7f0
movq %rax, 0x208(%rsp)
movq 0x208(%rsp), %rdi
callq 0x5e200
movq %rax, 0x200(%rsp)
movq 0x228(%rsp), %rax
movq %rax, 0xb0(%rsp)
movl $0xc, %edi
callq 0x47e80
movq 0xb0(%rsp), %rdi
movl %eax, 0x1fc(%rsp)
movl 0x1fc(%rsp), %esi
callq 0x8420
xorl %eax, %eax
cmpq 0x200(%rsp), %rax
jne 0x5d1d7
movq 0x228(%rsp), %rdi
leaq 0xa0459(%rip), %rsi     # 0xfd626
callq 0x8330
jmp 0x5d750
movq 0x200(%rsp), %rax
movq %rax, 0xa8(%rsp)
cmpq $0x0, %rax
je 0x5d216
movq 0xa8(%rsp), %rdi
leaq 0xee2d4(%rip), %rsi     # 0x14b4d0
leaq 0xee2dd(%rip), %rdx     # 0x14b4e0
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0xa0(%rsp)
jmp 0x5d222
xorl %eax, %eax
movq %rax, 0xa0(%rsp)
jmp 0x5d222
movq 0xa0(%rsp), %rax
cmpq $0x0, %rax
je 0x5d2bf
movq 0x228(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0x200(%rsp), %rdi
callq 0x5e770
movq %rax, %rdx
leaq 0xa03d3(%rip), %rsi     # 0xfd62e
leaq 0x1d8(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x37520
movq 0x90(%rsp), %rdi
movq 0x98(%rsp), %rsi
callq 0x8310
jmp 0x5d287
leaq 0x1d8(%rsp), %rdi
callq 0x8728
jmp 0x5d74e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
leaq 0x1d8(%rsp), %rdi
callq 0x8728
jmp 0x5d76c
movq 0x200(%rsp), %rax
movq %rax, 0x88(%rsp)
cmpq $0x0, %rax
je 0x5d2fe
movq 0x88(%rsp), %rdi
leaq 0xee1ec(%rip), %rsi     # 0x14b4d0
leaq 0xee20d(%rip), %rdx     # 0x14b4f8
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0x80(%rsp)
jmp 0x5d30a
xorl %eax, %eax
movq %rax, 0x80(%rsp)
jmp 0x5d30a
movq 0x80(%rsp), %rax
movq %rax, 0x1c0(%rsp)
cmpq $0x0, 0x1c0(%rsp)
je 0x5d3ee
movq 0x228(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x1c0(%rsp), %rdi
callq 0x5e800
movl %eax, %esi
leaq 0x180(%rsp), %rdi
movq %rdi, 0x78(%rsp)
callq 0xc7b0
movq 0x78(%rsp), %rdx
leaq 0x9ce1f(%rip), %rsi     # 0xfa182
leaq 0x1a0(%rsp), %rdi
callq 0xc970
jmp 0x5d372
movq 0x70(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0x8310
jmp 0x5d386
leaq 0x1a0(%rsp), %rdi
callq 0x8728
leaq 0x180(%rsp), %rdi
callq 0x8728
jmp 0x5d74c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x5d3dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
leaq 0x1a0(%rsp), %rdi
callq 0x8728
leaq 0x180(%rsp), %rdi
callq 0x8728
jmp 0x5d76c
movq 0x200(%rsp), %rax
movq %rax, 0x68(%rsp)
cmpq $0x0, %rax
je 0x5d424
movq 0x68(%rsp), %rdi
leaq 0xee0c3(%rip), %rsi     # 0x14b4d0
leaq 0xee0fc(%rip), %rdx     # 0x14b510
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0x60(%rsp)
jmp 0x5d42d
xorl %eax, %eax
movq %rax, 0x60(%rsp)
jmp 0x5d42d
movq 0x60(%rsp), %rax
cmpq $0x0, %rax
jne 0x5d482
movq 0x200(%rsp), %rax
movq %rax, 0x58(%rsp)
cmpq $0x0, %rax
je 0x5d46e
movq 0x58(%rsp), %rdi
leaq 0xee079(%rip), %rsi     # 0x14b4d0
leaq 0xee0ca(%rip), %rdx     # 0x14b528
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0x50(%rsp)
jmp 0x5d477
xorl %eax, %eax
movq %rax, 0x50(%rsp)
jmp 0x5d477
movq 0x50(%rsp), %rax
cmpq $0x0, %rax
je 0x5d501
movq 0x228(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x200(%rsp), %rdi
callq 0x5e770
movq %rax, %rdx
leaq 0x9ccb3(%rip), %rsi     # 0xfa159
leaq 0x160(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x37520
movq 0x40(%rsp), %rdi
movq 0x48(%rsp), %rsi
callq 0x8310
jmp 0x5d4c9
leaq 0x160(%rsp), %rdi
callq 0x8728
jmp 0x5d74a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
leaq 0x160(%rsp), %rdi
callq 0x8728
jmp 0x5d76c
movq 0x200(%rsp), %rax
movq %rax, 0x38(%rsp)
cmpq $0x0, %rax
je 0x5d537
movq 0x38(%rsp), %rdi
leaq 0xedfb0(%rip), %rsi     # 0x14b4d0
leaq 0xee019(%rip), %rdx     # 0x14b540
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0x30(%rsp)
jmp 0x5d540
xorl %eax, %eax
movq %rax, 0x30(%rsp)
jmp 0x5d540
movq 0x30(%rsp), %rax
movq %rax, 0x158(%rsp)
cmpq $0x0, 0x158(%rsp)
je 0x5d6cf
movq 0x228(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x158(%rsp), %rdi
callq 0x5e910
movl %eax, %esi
leaq 0xd8(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x5e810
movq 0x28(%rsp), %rdx
leaq 0xa009c(%rip), %rsi     # 0xfd632
leaq 0xf8(%rsp), %rdi
callq 0xc970
jmp 0x5d5a5
leaq 0x9de3e(%rip), %rdx     # 0xfb3ea
leaq 0x118(%rsp), %rdi
leaq 0xf8(%rsp), %rsi
callq 0xcbd0
jmp 0x5d5c3
movq 0x200(%rsp), %rdi
callq 0x5e770
movq %rax, 0x18(%rsp)
jmp 0x5d5d7
movq 0x18(%rsp), %rdx
leaq 0x138(%rsp), %rdi
leaq 0x118(%rsp), %rsi
callq 0xcc90
jmp 0x5d5f3
movq 0x20(%rsp), %rdi
leaq 0x138(%rsp), %rsi
callq 0x8310
jmp 0x5d607
leaq 0x138(%rsp), %rdi
callq 0x8728
leaq 0x118(%rsp), %rdi
callq 0x8728
leaq 0xf8(%rsp), %rdi
callq 0x8728
leaq 0xd8(%rsp), %rdi
callq 0x8728
jmp 0x5d748
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x5d6bd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x5d6b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x5d6a3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
leaq 0x138(%rsp), %rdi
callq 0x8728
leaq 0x118(%rsp), %rdi
callq 0x8728
leaq 0xf8(%rsp), %rdi
callq 0x8728
leaq 0xd8(%rsp), %rdi
callq 0x8728
jmp 0x5d76c
movq 0x228(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x200(%rsp), %rdi
callq 0x5e770
movq %rax, %rdx
leaq 0x9cd53(%rip), %rsi     # 0xfa446
leaq 0xb8(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x37520
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rsi
callq 0x8310
jmp 0x5d716
leaq 0xb8(%rsp), %rdi
callq 0x8728
jmp 0x5d748
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
leaq 0xb8(%rsp), %rdi
callq 0x8728
jmp 0x5d76c
jmp 0x5d74a
jmp 0x5d74c
jmp 0x5d74e
jmp 0x5d750
jmp 0x5d752
leaq 0x218(%rsp), %rdi
callq 0x5e920
jmp 0x5d135
addq $0x238, %rsp            # imm = 0x238
retq
movq 0x1d0(%rsp), %rdi
callq 0x8670
nopl (%rax)