LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: Value::ReplaceAllUseWith(Value*)
void Value::ReplaceAllUseWith(Value *val) {
  auto uses = GetUses();
  for (auto use : uses) {
    use->Set(val);
  }
  MyAssert(!IsUsed());
}

// Assembly:
subq $0x88, %rsp
movq %rdi, 0x80(%rsp)
movq %rsi, 0x78(%rsp)
movq 0x80(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x5e2d0
movq %rax, %rsi
leaq 0x60(%rsp), %rdi
callq 0x5e2e0
leaq 0x60(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x58(%rsp), %rdi
callq 0x5e160
movq %rax, 0x50(%rsp)
movq 0x58(%rsp), %rdi
callq 0x5e1b0
movq %rax, 0x48(%rsp)
leaq 0x50(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x5e190
testb $0x1, %al
jne 0x5c3a0
jmp 0x5c3ee
leaq 0x50(%rsp), %rdi
callq 0x5e1e0
movq (%rax), %rax
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rdi
movq 0x78(%rsp), %rsi
callq 0x5e390
jmp 0x5c3c3
jmp 0x5c3c5
leaq 0x50(%rsp), %rdi
callq 0x5e280
jmp 0x5c38b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x38(%rsp)
movl %eax, 0x34(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x5e400
jmp 0x5c495
movq 0x28(%rsp), %rdi
callq 0x5e3e0
movb %al, 0x27(%rsp)
jmp 0x5c3fe
movb 0x27(%rsp), %al
testb $0x1, %al
jne 0x5c408
jmp 0x5c483
movq 0xefbd9(%rip), %rdi     # 0x14bfe8
leaq 0x9dce2(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x18(%rsp)
jmp 0x5c422
movq 0x18(%rsp), %rdi
leaq 0xa11d8(%rip), %rsi     # 0xfd606
callq 0x8330
movq %rax, 0x10(%rsp)
jmp 0x5c43a
movq 0x10(%rsp), %rdi
leaq 0x9efa4(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x8(%rsp)
jmp 0x5c452
movq 0x8(%rsp), %rdi
movl $0x24, %esi
callq 0x8650
movq %rax, (%rsp)
jmp 0x5c467
movq (%rsp), %rdi
movq 0xefb0e(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x5c479
movl $0xff, %edi
callq 0x8460
leaq 0x60(%rsp), %rdi
callq 0x5e400
addq $0x88, %rsp
retq
movq 0x38(%rsp), %rdi
callq 0x8670
nop
// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: Value::~Value()
Value::~Value() {
  auto uses = GetUses();  // necessary. can't use reference
  for (auto use : uses) {
    use->Set(nullptr);  // necessary. when destruct a use instance, must ensure that its value_ is a valid pointer.
  }
  // 并没有删除使用它的那个user的operand 只是让operand的use中的value变为nullptr了
  MyAssert(!IsUsed());
}

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x70(%rsp)
movq 0x70(%rsp), %rdi
movq %rdi, 0x28(%rsp)
leaq 0xeef86(%rip), %rax     # 0x14b440
movq %rax, (%rdi)
callq 0x5e2d0
movq %rax, 0x30(%rsp)
jmp 0x5c4c9
movq 0x30(%rsp), %rsi
leaq 0x58(%rsp), %rdi
callq 0x5e2e0
jmp 0x5c4da
leaq 0x58(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x50(%rsp), %rdi
callq 0x5e160
movq %rax, 0x48(%rsp)
movq 0x50(%rsp), %rdi
callq 0x5e1b0
movq %rax, 0x40(%rsp)
leaq 0x48(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x5e190
testb $0x1, %al
jne 0x5c517
jmp 0x5c547
leaq 0x48(%rsp), %rdi
callq 0x5e1e0
movq (%rax), %rax
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x5e390
jmp 0x5c539
jmp 0x5c53b
leaq 0x48(%rsp), %rdi
callq 0x5e280
jmp 0x5c502
movq 0x28(%rsp), %rdi
callq 0x5e3e0
movb %al, 0x27(%rsp)
jmp 0x5c557
movb 0x27(%rsp), %al
testb $0x1, %al
jne 0x5c561
jmp 0x5c5dc
movq 0xefa80(%rip), %rdi     # 0x14bfe8
leaq 0x9db89(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x18(%rsp)
jmp 0x5c57b
movq 0x18(%rsp), %rdi
leaq 0xa107f(%rip), %rsi     # 0xfd606
callq 0x8330
movq %rax, 0x10(%rsp)
jmp 0x5c593
movq 0x10(%rsp), %rdi
leaq 0x9ee4b(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x8(%rsp)
jmp 0x5c5ab
movq 0x8(%rsp), %rdi
movl $0x2c, %esi
callq 0x8650
movq %rax, (%rsp)
jmp 0x5c5c0
movq (%rsp), %rdi
movq 0xef9b5(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x5c5d2
movl $0xff, %edi
callq 0x8460
leaq 0x58(%rsp), %rdi
callq 0x5e400
movq 0x28(%rsp), %rdi
addq $0x28, %rdi
callq 0x8728
movq 0x28(%rsp), %rdi
addq $0x10, %rdi
callq 0x5e400
addq $0x78, %rsp
retq
movq %rax, %rdi
callq 0xdd40
nop
// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: BinaryOperator::ComputeConstInt(int, int)
int BinaryOperator::ComputeConstInt(int lhs, int rhs) {
  switch (op_) {
    case ADD:
      return lhs + rhs;
    case SUB:
      return lhs - rhs;
    case MUL:
      return lhs * rhs;
    case DIV:
      return lhs / rhs;
    case MOD:
      return lhs % rhs;
    default:
      MyAssert(0);
      break;
  }
  return 0;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x18(%rsp)
movl %esi, 0x14(%rsp)
movl %edx, 0x10(%rsp)
movq 0x18(%rsp), %rax
movl 0x68(%rax), %eax
movq %rax, 0x8(%rsp)
subq $0x4, %rax
ja 0x5cb98
movq 0x8(%rsp), %rax
leaq 0xa0978(%rip), %rcx     # 0xfd4b8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x14(%rsp), %eax
addl 0x10(%rsp), %eax
movl %eax, 0x24(%rsp)
jmp 0x5cbef
movl 0x14(%rsp), %eax
subl 0x10(%rsp), %eax
movl %eax, 0x24(%rsp)
jmp 0x5cbef
movl 0x14(%rsp), %eax
imull 0x10(%rsp), %eax
movl %eax, 0x24(%rsp)
jmp 0x5cbef
movl 0x14(%rsp), %eax
cltd
idivl 0x10(%rsp)
movl %eax, 0x24(%rsp)
jmp 0x5cbef
movl 0x14(%rsp), %eax
cltd
idivl 0x10(%rsp)
movl %edx, 0x24(%rsp)
jmp 0x5cbef
movq 0xef449(%rip), %rdi     # 0x14bfe8
leaq 0x9d552(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, %rdi
leaq 0xa0a51(%rip), %rsi     # 0xfd606
callq 0x8330
movq %rax, %rdi
leaq 0x9e826(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, %rdi
movl $0x61, %esi
callq 0x8650
movq %rax, %rdi
movq 0xef3a0(%rip), %rsi     # 0x14bf80
callq 0x8380
movl $0xff, %edi
callq 0x8460
movl 0x24(%rsp), %eax
addq $0x28, %rsp
retq
nopl (%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: UnaryOperator::ComputeConstInt(int)
int UnaryOperator::ComputeConstInt(int lhs) {
  switch (op_) {
    case NEG:
      return -lhs;
    case NOT:
      return !lhs;
    default:
      MyAssert(0);
      break;
  }
  return 0;
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x8(%rsp)
movl %esi, 0x4(%rsp)
movq 0x8(%rsp), %rax
movl 0x68(%rax), %eax
movl %eax, (%rsp)
testl %eax, %eax
je 0x5cc28
jmp 0x5cc1e
movl (%rsp), %eax
subl $0x1, %eax
je 0x5cc34
jmp 0x5cc49
xorl %eax, %eax
subl 0x4(%rsp), %eax
movl %eax, 0x14(%rsp)
jmp 0x5cca0
cmpl $0x0, 0x4(%rsp)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x14(%rsp)
jmp 0x5cca0
movq 0xef398(%rip), %rdi     # 0x14bfe8
leaq 0x9d4a1(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, %rdi
leaq 0xa09a0(%rip), %rsi     # 0xfd606
callq 0x8330
movq %rax, %rdi
leaq 0x9e775(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, %rdi
movl $0x6e, %esi
callq 0x8650
movq %rax, %rdi
movq 0xef2ef(%rip), %rsi     # 0x14bf80
callq 0x8380
movl $0xff, %edi
callq 0x8460
movl 0x14(%rsp), %eax
addq $0x18, %rsp
retq
nopl (%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: BranchInst::ComputeConstInt(int, int)
bool BranchInst::ComputeConstInt(int lhs, int rhs) {
  switch (cond_) {
    case EQ:
      return lhs == rhs;
    case NE:
      return lhs != rhs;
    case GT:
      return lhs > rhs;
    case GE:
      return lhs >= rhs;
    case LT:
      return lhs < rhs;
    case LE:
      return lhs <= rhs;
    default:
      MyAssert(0);
      return false;
  }
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x18(%rsp)
movl %esi, 0x14(%rsp)
movl %edx, 0x10(%rsp)
movq 0x18(%rsp), %rax
movl 0x68(%rax), %eax
decl %eax
movl %eax, %ecx
movq %rcx, 0x8(%rsp)
subl $0x5, %eax
ja 0x5cd6b
movq 0x8(%rsp), %rax
leaq 0xa07e5(%rip), %rcx     # 0xfd4cc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x14(%rsp), %eax
cmpl 0x10(%rsp), %eax
sete %al
andb $0x1, %al
movb %al, 0x27(%rsp)
jmp 0x5cdc2
movl 0x14(%rsp), %eax
cmpl 0x10(%rsp), %eax
setne %al
andb $0x1, %al
movb %al, 0x27(%rsp)
jmp 0x5cdc2
movl 0x14(%rsp), %eax
cmpl 0x10(%rsp), %eax
setg %al
andb $0x1, %al
movb %al, 0x27(%rsp)
jmp 0x5cdc2
movl 0x14(%rsp), %eax
cmpl 0x10(%rsp), %eax
setge %al
andb $0x1, %al
movb %al, 0x27(%rsp)
jmp 0x5cdc2
movl 0x14(%rsp), %eax
cmpl 0x10(%rsp), %eax
setl %al
andb $0x1, %al
movb %al, 0x27(%rsp)
jmp 0x5cdc2
movl 0x14(%rsp), %eax
cmpl 0x10(%rsp), %eax
setle %al
andb $0x1, %al
movb %al, 0x27(%rsp)
jmp 0x5cdc2
movq 0xef276(%rip), %rdi     # 0x14bfe8
leaq 0x9d37f(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, %rdi
leaq 0xa087e(%rip), %rsi     # 0xfd606
callq 0x8330
movq %rax, %rdi
leaq 0x9e653(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, %rdi
movl $0x83, %esi
callq 0x8650
movq %rax, %rdi
movq 0xef1cd(%rip), %rsi     # 0x14bf80
callq 0x8380
movl $0xff, %edi
callq 0x8460
movb 0x27(%rsp), %al
andb $0x1, %al
addq $0x28, %rsp
retq
nopl (%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: BinaryOperator::Print(std::ostream&)
void BinaryOperator::Print(std::ostream &outfile) {
  std::string op = "";
  switch (op_) {
    case ADD:
      op = "add";
      break;
    case SUB:
      op = "sub";
      break;
    case MUL:
      op = "mul";
      break;
    case DIV:
      op = "div";
      break;
    case MOD:
      op = "mod";
      break;
    default:
      break;
  }
  Value::Print(outfile);
  outfile << std::setw(INDENT) << "=" + op;
  User::Print(outfile);
  outfile << std::endl;
}

// Assembly:
subq $0x98, %rsp
movq %rdi, 0x90(%rsp)
movq %rsi, 0x88(%rsp)
movq 0x90(%rsp), %rax
movq %rax, 0x20(%rsp)
leaq 0x67(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x8680
movq 0x28(%rsp), %rdx
leaq 0x9c99a(%rip), %rsi     # 0xfa159
leaq 0x68(%rsp), %rdi
callq 0xc570
jmp 0x5d7cb
leaq 0x67(%rsp), %rdi
callq 0x83c0
movq 0x20(%rsp), %rax
movl 0x68(%rax), %eax
movq %rax, 0x18(%rsp)
subq $0x4, %rax
ja 0x5d89a
movq 0x18(%rsp), %rax
leaq 0x9fcec(%rip), %rcx     # 0xfd4e4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x58(%rsp)
movl %eax, 0x54(%rsp)
leaq 0x67(%rsp), %rdi
callq 0x83c0
jmp 0x5d979
leaq 0x9c8f8(%rip), %rsi     # 0xfa11d
leaq 0x68(%rsp), %rdi
callq 0x8500
jmp 0x5d831
jmp 0x5d89c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x58(%rsp)
movl %eax, 0x54(%rsp)
jmp 0x5d96f
leaq 0x9c8d4(%rip), %rsi     # 0xfa121
leaq 0x68(%rsp), %rdi
callq 0x8500
jmp 0x5d859
jmp 0x5d89c
leaq 0x9c8c9(%rip), %rsi     # 0xfa12b
leaq 0x68(%rsp), %rdi
callq 0x8500
jmp 0x5d86e
jmp 0x5d89c
leaq 0x9c8cd(%rip), %rsi     # 0xfa144
leaq 0x68(%rsp), %rdi
callq 0x8500
jmp 0x5d883
jmp 0x5d89c
leaq 0x9d988(%rip), %rsi     # 0xfb214
leaq 0x68(%rsp), %rdi
callq 0x8500
jmp 0x5d898
jmp 0x5d89c
jmp 0x5d89c
movq 0x20(%rsp), %rdi
movq 0x88(%rsp), %rsi
callq 0x5cdd0
jmp 0x5d8b0
movq 0x88(%rsp), %rax
movq %rax, 0x8(%rsp)
movl $0xc, %edi
callq 0x47e80
movl %eax, 0x14(%rsp)
jmp 0x5d8cd
movq 0x8(%rsp), %rdi
movl 0x14(%rsp), %eax
movl %eax, 0x50(%rsp)
movl 0x50(%rsp), %esi
callq 0x8420
movq %rax, (%rsp)
jmp 0x5d8e9
leaq 0x9e794(%rip), %rsi     # 0xfc084
leaq 0x30(%rsp), %rdi
leaq 0x68(%rsp), %rdx
callq 0x37520
jmp 0x5d901
movq (%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x8310
jmp 0x5d911
leaq 0x30(%rsp), %rdi
callq 0x8728
movq 0x20(%rsp), %rdi
movq 0x88(%rsp), %rsi
callq 0x5d0e0
jmp 0x5d92f
movq 0x88(%rsp), %rdi
movq 0xee642(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x5d945
leaq 0x68(%rsp), %rdi
callq 0x8728
addq $0x98, %rsp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x58(%rsp)
movl %eax, 0x54(%rsp)
leaq 0x30(%rsp), %rdi
callq 0x8728
leaq 0x68(%rsp), %rdi
callq 0x8728
movq 0x58(%rsp), %rdi
callq 0x8670
nopw %cs:(%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: UnaryOperator::Print(std::ostream&)
void UnaryOperator::Print(std::ostream &outfile) {
  std::string op = "";
  switch (op_) {
    case NEG:
      op = "neg";
      break;
    case NOT:
      op = "not";
      break;
    default:
      break;
  }
  Value::Print(outfile);
  outfile << std::setw(INDENT) << "=" + op;
  User::Print(outfile);
  outfile << std::endl;
}

// Assembly:
subq $0x98, %rsp
movq %rdi, 0x90(%rsp)
movq %rsi, 0x88(%rsp)
movq 0x90(%rsp), %rax
movq %rax, 0x20(%rsp)
leaq 0x67(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x8680
movq 0x28(%rsp), %rdx
leaq 0x9c78a(%rip), %rsi     # 0xfa159
leaq 0x68(%rsp), %rdi
callq 0xc570
jmp 0x5d9db
leaq 0x67(%rsp), %rdi
callq 0x83c0
movq 0x20(%rsp), %rax
movl 0x68(%rax), %eax
movl %eax, 0x1c(%rsp)
testl %eax, %eax
je 0x5da1f
jmp 0x5d9f7
movl 0x1c(%rsp), %eax
subl $0x1, %eax
je 0x5da47
jmp 0x5da5c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x58(%rsp)
movl %eax, 0x54(%rsp)
leaq 0x67(%rsp), %rdi
callq 0x83c0
jmp 0x5db3d
leaq 0x9d7f2(%rip), %rsi     # 0xfb218
leaq 0x68(%rsp), %rdi
callq 0x8500
jmp 0x5da32
jmp 0x5da5e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x58(%rsp)
movl %eax, 0x54(%rsp)
jmp 0x5db33
leaq 0x9d7ce(%rip), %rsi     # 0xfb21c
leaq 0x68(%rsp), %rdi
callq 0x8500
jmp 0x5da5a
jmp 0x5da5e
jmp 0x5da5e
movq 0x20(%rsp), %rdi
movq 0x88(%rsp), %rsi
callq 0x5cdd0
jmp 0x5da72
movq 0x88(%rsp), %rax
movq %rax, 0x10(%rsp)
movl $0xc, %edi
callq 0x47e80
movl %eax, 0x18(%rsp)
jmp 0x5da8f
movq 0x10(%rsp), %rdi
movl 0x18(%rsp), %eax
movl %eax, 0x50(%rsp)
movl 0x50(%rsp), %esi
callq 0x8420
movq %rax, 0x8(%rsp)
jmp 0x5daac
leaq 0x9e5d1(%rip), %rsi     # 0xfc084
leaq 0x30(%rsp), %rdi
leaq 0x68(%rsp), %rdx
callq 0x37520
jmp 0x5dac4
movq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x8310
jmp 0x5dad5
leaq 0x30(%rsp), %rdi
callq 0x8728
movq 0x20(%rsp), %rdi
movq 0x88(%rsp), %rsi
callq 0x5d0e0
jmp 0x5daf3
movq 0x88(%rsp), %rdi
movq 0xee47e(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x5db09
leaq 0x68(%rsp), %rdi
callq 0x8728
addq $0x98, %rsp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x58(%rsp)
movl %eax, 0x54(%rsp)
leaq 0x30(%rsp), %rdi
callq 0x8728
leaq 0x68(%rsp), %rdi
callq 0x8728
movq 0x58(%rsp), %rdi
callq 0x8670
nopw (%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: BranchInst::Print(std::ostream&)
void BranchInst::Print(std::ostream &outfile) {
  std::string cond = "b";
  switch (cond_) {
    case AL:
      cond += "";
      break;
    case EQ:
      cond += "eq";
      break;
    case NE:
      cond += "ne";
      break;
    case GT:
      cond += "gt";
      break;
    case GE:
      cond += "ge";
      break;
    case LT:
      cond += "lt";
      break;
    case LE:
      cond += "le";
      break;
    default:
      break;
  }
  outfile << std::setw(INDENT) << cond;
  User::Print(outfile);
  outfile << std::endl;
}

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x70(%rsp)
movq %rsi, 0x68(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rsp)
leaq 0x47(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x8680
movq 0x28(%rsp), %rdx
leaq 0x9fe81(%rip), %rsi     # 0xfda04
leaq 0x48(%rsp), %rdi
callq 0xc570
jmp 0x5db8f
leaq 0x47(%rsp), %rdi
callq 0x83c0
movq 0x20(%rsp), %rax
movl 0x68(%rax), %eax
movq %rax, 0x18(%rsp)
subq $0x6, %rax
ja 0x5dc95
movq 0x18(%rsp), %rax
leaq 0x9f93c(%rip), %rcx     # 0xfd4f8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x38(%rsp)
movl %eax, 0x34(%rsp)
leaq 0x47(%rsp), %rdi
callq 0x83c0
jmp 0x5dd10
leaq 0x9c570(%rip), %rsi     # 0xfa159
leaq 0x48(%rsp), %rdi
callq 0x8320
jmp 0x5dbf5
jmp 0x5dc97
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x38(%rsp)
movl %eax, 0x34(%rsp)
leaq 0x48(%rsp), %rdi
callq 0x8728
jmp 0x5dd10
leaq 0x9d616(%rip), %rsi     # 0xfb234
leaq 0x48(%rsp), %rdi
callq 0x8320
jmp 0x5dc2a
jmp 0x5dc97
leaq 0x9e5c1(%rip), %rsi     # 0xfc1f4
leaq 0x48(%rsp), %rdi
callq 0x8320
jmp 0x5dc3f
jmp 0x5dc97
leaq 0x9d5fc(%rip), %rsi     # 0xfb244
leaq 0x48(%rsp), %rdi
callq 0x8320
jmp 0x5dc54
jmp 0x5dc97
leaq 0x9d5eb(%rip), %rsi     # 0xfb248
leaq 0x48(%rsp), %rdi
callq 0x8320
jmp 0x5dc69
jmp 0x5dc97
leaq 0x9d5ca(%rip), %rsi     # 0xfb23c
leaq 0x48(%rsp), %rdi
callq 0x8320
jmp 0x5dc7e
jmp 0x5dc97
leaq 0x9ccf7(%rip), %rsi     # 0xfa97e
leaq 0x48(%rsp), %rdi
callq 0x8320
jmp 0x5dc93
jmp 0x5dc97
jmp 0x5dc97
movq 0x68(%rsp), %rax
movq %rax, 0x8(%rsp)
movl $0xc, %edi
callq 0x47e80
movl %eax, 0x14(%rsp)
jmp 0x5dcb1
movq 0x8(%rsp), %rdi
movl 0x14(%rsp), %eax
movl %eax, 0x30(%rsp)
movl 0x30(%rsp), %esi
callq 0x8420
movq %rax, (%rsp)
jmp 0x5dccd
movq (%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x8310
jmp 0x5dcdd
movq 0x20(%rsp), %rdi
movq 0x68(%rsp), %rsi
callq 0x5d0e0
jmp 0x5dcee
movq 0x68(%rsp), %rdi
movq 0xee286(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x5dd01
leaq 0x48(%rsp), %rdi
callq 0x8728
addq $0x78, %rsp
retq
movq 0x38(%rsp), %rdi
callq 0x8670
nopw (%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: CallInst::Print(std::ostream&)
void CallInst::Print(std::ostream &outfile) {
  std::string prefix = "";
  if (!GetType()->IsVoid()) {
    Value::Print(outfile);
    prefix = "=";
  }
  prefix += "call";
  outfile << std::setw(INDENT) << prefix;
  User::Print(outfile);
  outfile << std::endl;
}

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x70(%rsp)
movq %rsi, 0x68(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x20(%rsp)
leaq 0x47(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x8680
movq 0x28(%rsp), %rdx
leaq 0x9c406(%rip), %rsi     # 0xfa159
leaq 0x48(%rsp), %rdi
callq 0xc570
jmp 0x5dd5f
leaq 0x47(%rsp), %rdi
callq 0x83c0
movq 0x20(%rsp), %rdi
callq 0x5e940
movq %rax, 0x18(%rsp)
jmp 0x5dd7a
movq 0x18(%rsp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movb %al, 0x17(%rsp)
jmp 0x5dd8e
movb 0x17(%rsp), %al
testb $0x1, %al
jne 0x5ddf8
jmp 0x5dd98
movq 0x20(%rsp), %rdi
movq 0x68(%rsp), %rsi
callq 0x5cdd0
jmp 0x5dda9
leaq 0x9e2d4(%rip), %rsi     # 0xfc084
leaq 0x48(%rsp), %rdi
callq 0x8500
jmp 0x5ddbc
jmp 0x5ddf8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x38(%rsp)
movl %eax, 0x34(%rsp)
leaq 0x47(%rsp), %rdi
callq 0x83c0
jmp 0x5de84
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x38(%rsp)
movl %eax, 0x34(%rsp)
leaq 0x48(%rsp), %rdi
callq 0x8728
jmp 0x5de84
leaq 0x9d452(%rip), %rsi     # 0xfb251
leaq 0x48(%rsp), %rdi
callq 0x8320
jmp 0x5de0b
movq 0x68(%rsp), %rax
movq %rax, 0x8(%rsp)
movl $0xc, %edi
callq 0x47e80
movl %eax, 0x10(%rsp)
jmp 0x5de25
movq 0x8(%rsp), %rdi
movl 0x10(%rsp), %eax
movl %eax, 0x30(%rsp)
movl 0x30(%rsp), %esi
callq 0x8420
movq %rax, (%rsp)
jmp 0x5de41
movq (%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x8310
jmp 0x5de51
movq 0x20(%rsp), %rdi
movq 0x68(%rsp), %rsi
callq 0x5d0e0
jmp 0x5de62
movq 0x68(%rsp), %rdi
movq 0xee112(%rip), %rsi     # 0x14bf80
callq 0x8380
jmp 0x5de75
leaq 0x48(%rsp), %rdi
callq 0x8728
addq $0x78, %rsp
retq
movq 0x38(%rsp), %rdi
callq 0x8670
nop
// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: AllocaInst::Print(std::ostream&)
void AllocaInst::Print(std::ostream &outfile) {
  outfile << std::setw(INDENT) << "alloca";
  // outfile << (dynamic_cast<ArrayType *>(GetType()))->num_elements_;
  User::Print(outfile);
  outfile << std::endl;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x18(%rsp), %rax
movq %rax, (%rsp)
movl $0xc, %edi
callq 0x47e80
movq (%rsp), %rdi
movl %eax, 0x14(%rsp)
movl 0x14(%rsp), %esi
callq 0x8420
movq %rax, %rdi
leaq 0x9d314(%rip), %rsi     # 0xfb25a
callq 0x8330
movq 0x8(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0x5d0e0
movq 0x18(%rsp), %rdi
movq 0xee01a(%rip), %rsi     # 0x14bf80
callq 0x8380
addq $0x28, %rsp
retq
// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: LoadInst::Print(std::ostream&)
void LoadInst::Print(std::ostream &outfile) {
  Value::Print(outfile);
  outfile << std::setw(INDENT) << "=load";
  User::Print(outfile);
  outfile << std::endl;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movq 0x20(%rsp), %rdi
movq %rdi, 0x8(%rsp)
movq 0x18(%rsp), %rsi
callq 0x5cdd0
movq 0x18(%rsp), %rax
movq %rax, (%rsp)
movl $0xc, %edi
callq 0x47e80
movq (%rsp), %rdi
movl %eax, 0x14(%rsp)
movl 0x14(%rsp), %esi
callq 0x8420
movq %rax, %rdi
leaq 0x9f675(%rip), %rsi     # 0xfd635
callq 0x8330
movq 0x8(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0x5d0e0
movq 0x18(%rsp), %rdi
movq 0xedfa0(%rip), %rsi     # 0x14bf80
callq 0x8380
addq $0x28, %rsp
retq
nopw (%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: MovInst::Print(std::ostream&)
void MovInst::Print(std::ostream &outfile) {
  Value::Print(outfile);
  outfile << std::setw(INDENT) << "=mov";
  User::Print(outfile);
  outfile << std::endl;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movq 0x20(%rsp), %rdi
movq %rdi, 0x8(%rsp)
movq 0x18(%rsp), %rsi
callq 0x5cdd0
movq 0x18(%rsp), %rax
movq %rax, (%rsp)
movl $0xc, %edi
callq 0x47e80
movq (%rsp), %rdi
movl %eax, 0x14(%rsp)
movl 0x14(%rsp), %esi
callq 0x8420
movq %rax, %rdi
leaq 0x9f591(%rip), %rsi     # 0xfd641
callq 0x8330
movq 0x8(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0x5d0e0
movq 0x18(%rsp), %rdi
movq 0xedeb0(%rip), %rsi     # 0x14bf80
callq 0x8380
addq $0x28, %rsp
retq
nopw (%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa.cpp
// Function: PhiInst::Print(std::ostream&)
void PhiInst::Print(std::ostream &outfile) {
  Value::Print(outfile);
  outfile << std::setw(INDENT) << "=phi";
  User::Print(outfile);
  outfile << std::endl;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movq 0x20(%rsp), %rdi
movq %rdi, 0x8(%rsp)
movq 0x18(%rsp), %rsi
callq 0x5cdd0
movq 0x18(%rsp), %rax
movq %rax, (%rsp)
movl $0xc, %edi
callq 0x47e80
movq (%rsp), %rdi
movl %eax, 0x14(%rsp)
movl 0x14(%rsp), %esi
callq 0x8420
movq %rax, %rdi
leaq 0x9f516(%rip), %rsi     # 0xfd646
callq 0x8330
movq 0x8(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0x5d0e0
movq 0x18(%rsp), %rdi
movq 0xede30(%rip), %rsi     # 0x14bf80
callq 0x8380
addq $0x28, %rsp
retq
nopw (%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/../include/ssa.h
// Function: Use::operator=(Use&&)
Use& operator=(Use&& u) {
    user_ = u.GetUser();
    Set(u.Get());
    u.Set(nullptr);
    return *this;
  }

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movq %rsi, 0x8(%rsp)
movq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq 0x8(%rsp), %rdi
callq 0x60410
movq %rax, %rcx
movq (%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x8(%rsp), %rdi
callq 0x5e200
movq (%rsp), %rdi
movq %rax, %rsi
callq 0x5e390
movq 0x8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x5e390
movq (%rsp), %rax
addq $0x18, %rsp
retq
nopl (%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa_struct.cpp
// Function: SSAFunction::RemoveBasicBlock(SSABasicBlock*)
void SSAFunction::RemoveBasicBlock(SSABasicBlock* bb) {
  bb_list_.remove(bb);
  // TODO: manage memory
  for (auto pred : bb->GetPredBB()) {
    pred->RemoveSuccBB(bb);
  }
  for (auto succ : bb->GetSuccBB()) {
    succ->RemovePredBB(bb);
  }
}

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x50(%rsp)
movq %rsi, 0x48(%rsp)
movq 0x50(%rsp), %rdi
addq $0x30, %rdi
leaq 0x48(%rsp), %rsi
callq 0x62610
movq 0x48(%rsp), %rdi
callq 0x62710
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rdi
callq 0x62720
movq %rax, 0x38(%rsp)
movq 0x40(%rsp), %rdi
callq 0x62750
movq %rax, 0x30(%rsp)
leaq 0x38(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x62780
testb $0x1, %al
jne 0x61053
jmp 0x61080
leaq 0x38(%rsp), %rdi
callq 0x627a0
movq (%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rdi
movq 0x48(%rsp), %rsi
callq 0x627c0
leaq 0x38(%rsp), %rdi
callq 0x627f0
jmp 0x6103e
movq 0x48(%rsp), %rdi
callq 0x62810
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rdi
callq 0x62720
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rdi
callq 0x62750
movq %rax, 0x10(%rsp)
leaq 0x18(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x62780
testb $0x1, %al
jne 0x610c2
jmp 0x610ef
leaq 0x18(%rsp), %rdi
callq 0x627a0
movq (%rax), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rdi
movq 0x48(%rsp), %rsi
callq 0x62820
leaq 0x18(%rsp), %rdi
callq 0x627f0
jmp 0x610ad
addq $0x58, %rsp
retq
nopw %cs:(%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa_struct.cpp
// Function: SSAFunction::MaintainCallFunc()
void SSAFunction::MaintainCallFunc() {
  call_func_list_.clear();
  for (auto bb : bb_list_) {
    for (auto inst : bb->GetInstList()) {
      if (auto call_inst = dynamic_cast<CallInst*>(inst)) {
        auto func_val = dynamic_cast<FunctionValue*>(call_inst->GetOperand(0));
        MyAssert(nullptr != func_val);
        call_func_list_.insert(func_val->GetFunction());
      }
    }
  }
}

// Assembly:
subq $0xa8, %rsp
movq %rdi, 0xa0(%rsp)
movq 0xa0(%rsp), %rdi
movq %rdi, 0x30(%rsp)
addq $0x48, %rdi
callq 0x62850
movq 0x30(%rsp), %rax
addq $0x30, %rax
movq %rax, 0x98(%rsp)
movq 0x98(%rsp), %rdi
callq 0x62720
movq %rax, 0x90(%rsp)
movq 0x98(%rsp), %rdi
callq 0x62750
movq %rax, 0x88(%rsp)
leaq 0x90(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x62780
testb $0x1, %al
jne 0x6117e
jmp 0x61349
leaq 0x90(%rsp), %rdi
callq 0x627a0
movq (%rax), %rax
movq %rax, 0x80(%rsp)
movq 0x80(%rsp), %rdi
callq 0x62860
movq %rax, 0x78(%rsp)
movq 0x78(%rsp), %rdi
callq 0x62870
movq %rax, 0x70(%rsp)
movq 0x78(%rsp), %rdi
callq 0x628a0
movq %rax, 0x68(%rsp)
leaq 0x70(%rsp), %rdi
leaq 0x68(%rsp), %rsi
callq 0x628d0
testb $0x1, %al
jne 0x611de
jmp 0x61335
leaq 0x70(%rsp), %rdi
callq 0x628f0
movq (%rax), %rax
movq %rax, 0x60(%rsp)
movq 0x60(%rsp), %rax
movq %rax, 0x28(%rsp)
cmpq $0x0, %rax
je 0x61223
movq 0x28(%rsp), %rdi
leaq 0xea20c(%rip), %rsi     # 0x14b418
leaq 0xea4fd(%rip), %rdx     # 0x14b710
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0x20(%rsp)
jmp 0x6122c
xorl %eax, %eax
movq %rax, 0x20(%rsp)
jmp 0x6122c
movq 0x20(%rsp), %rax
movq %rax, 0x58(%rsp)
cmpq $0x0, 0x58(%rsp)
je 0x61324
movq 0x58(%rsp), %rdi
xorl %esi, %esi
callq 0x5c850
movq %rax, 0x18(%rsp)
cmpq $0x0, %rax
je 0x6127c
movq 0x18(%rsp), %rdi
leaq 0xea26b(%rip), %rsi     # 0x14b4d0
leaq 0xea2bc(%rip), %rdx     # 0x14b528
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0x10(%rsp)
jmp 0x61285
xorl %eax, %eax
movq %rax, 0x10(%rsp)
jmp 0x61285
movq 0x10(%rsp), %rax
movq %rax, 0x50(%rsp)
xorl %eax, %eax
cmpq 0x50(%rsp), %rax
jne 0x612ef
movq 0xead49(%rip), %rdi     # 0x14bfe8
leaq 0x98e52(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, %rdi
leaq 0x9c39c(%rip), %rsi     # 0xfd651
callq 0x8330
movq %rax, %rdi
leaq 0x9a126(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, %rdi
movl $0x38, %esi
callq 0x8650
movq %rax, %rdi
movq 0xeaca0(%rip), %rsi     # 0x14bf80
callq 0x8380
movl $0xff, %edi
callq 0x8460
movq 0x30(%rsp), %rax
addq $0x48, %rax
movq %rax, 0x8(%rsp)
movq 0x50(%rsp), %rdi
callq 0x5e2a0
movq 0x8(%rsp), %rdi
movq %rax, 0x48(%rsp)
leaq 0x48(%rsp), %rsi
callq 0x62910
movq %rax, 0x38(%rsp)
movb %dl, 0x40(%rsp)
jmp 0x61326
leaq 0x70(%rsp), %rdi
callq 0x62960
jmp 0x611c6
jmp 0x61337
leaq 0x90(%rsp), %rdi
callq 0x627f0
jmp 0x61160
addq $0xa8, %rsp
retq
nopw %cs:(%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa_struct.cpp
// Function: SSAFunction::Remove()
void SSAFunction::Remove() {
  // 要删除该函数 必须保证module内没有调用该函数的语句
  MyAssert(GetValue()->GetUses().empty());
  // 首先需要移除该函数在其调用的函数和使用的全局量中的使用信息 然后从module中删除它
  // 该函数调用的函数对应的value的uselist中存着该函数对应的value 是在生成call语句的时候加进去的
  for (auto call_func : call_func_list_) {
    std::cout << call_func->GetFuncName() << std::endl;
    call_func->GetValue()->KillUse(this);
  }
  // 该函数使用的globalvariable的uselist中存着该函数中所有对该globvar的load和store
  for (auto glob_var : used_glob_var_list_) {
    glob_var->KillUse(this);
  }
  m_->RemoveFunction(this);
  // FIXME: 在该函数中清空信息还是放到析构函数中清空???
}

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x50(%rsp)
movq 0x50(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x62a20
movq %rax, %rdi
callq 0x5e2d0
movq %rax, %rdi
callq 0x5f7a0
testb $0x1, %al
jne 0x61603
movq 0xeaa35(%rip), %rdi     # 0x14bfe8
leaq 0x98b3e(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, %rdi
leaq 0x9c088(%rip), %rsi     # 0xfd651
callq 0x8330
movq %rax, %rdi
leaq 0x99e12(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, %rdi
movl $0x4d, %esi
callq 0x8650
movq %rax, %rdi
movq 0xea98c(%rip), %rsi     # 0x14bf80
callq 0x8380
movl $0xff, %edi
callq 0x8460
movq 0x8(%rsp), %rax
addq $0x48, %rax
movq %rax, 0x48(%rsp)
movq 0x48(%rsp), %rdi
callq 0x62a30
movq %rax, 0x40(%rsp)
movq 0x48(%rsp), %rdi
callq 0x62a60
movq %rax, 0x38(%rsp)
leaq 0x40(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x62a90
testb $0x1, %al
jne 0x61644
jmp 0x616a1
leaq 0x40(%rsp), %rdi
callq 0x62ab0
movq (%rax), %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rdi
callq 0x62ad0
movq %rax, %rsi
movq 0xea946(%rip), %rdi     # 0x14bfb0
callq 0x8310
movq %rax, %rdi
movq 0xea907(%rip), %rsi     # 0x14bf80
callq 0x8380
movq 0x30(%rsp), %rdi
callq 0x62a20
movq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x5c210
leaq 0x40(%rsp), %rdi
callq 0x62ae0
jmp 0x6162f
movq 0x8(%rsp), %rax
addq $0x80, %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rdi
callq 0x62b10
movq %rax, 0x20(%rsp)
movq 0x28(%rsp), %rdi
callq 0x62b40
movq %rax, 0x18(%rsp)
leaq 0x20(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x62b70
testb $0x1, %al
jne 0x616e4
jmp 0x61711
leaq 0x20(%rsp), %rdi
callq 0x62b90
movq 0x8(%rsp), %rsi
movq (%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rdi
callq 0x5c210
leaq 0x20(%rsp), %rdi
callq 0x62bb0
jmp 0x616cf
movq 0x8(%rsp), %rsi
movq 0x20(%rsi), %rdi
callq 0x60e00
addq $0x58, %rsp
retq
nopw %cs:(%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa_struct.cpp
// Function: SSABasicBlock::GetNextBB()
SSABasicBlock* SSABasicBlock::GetNextBB() {
  // maybe return nullptr
  auto& bb_list = func_->GetBBList();
  auto it = ++std::find(bb_list.begin(), bb_list.end(), this);
  if (it == bb_list.end())
    return nullptr;
  else
    return *it;
}

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x48(%rsp)
movq 0x48(%rsp), %rax
movq %rax, 0x8(%rsp)
movq (%rax), %rdi
callq 0x62c10
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rdi
callq 0x62c80
movq %rax, 0x28(%rsp)
movq 0x40(%rsp), %rdi
callq 0x62cb0
movq %rax, %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x20(%rsp)
movq %rax, 0x18(%rsp)
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
leaq 0x18(%rsp), %rdx
callq 0x62c20
movq %rax, 0x30(%rsp)
leaq 0x30(%rsp), %rdi
callq 0x62ce0
movq (%rax), %rax
movq %rax, 0x38(%rsp)
movq 0x40(%rsp), %rdi
callq 0x62cb0
movq %rax, 0x10(%rsp)
leaq 0x38(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x62d00
testb $0x1, %al
jne 0x618aa
jmp 0x618b5
movq $0x0, 0x50(%rsp)
jmp 0x618c7
leaq 0x38(%rsp), %rdi
callq 0x62d20
movq (%rax), %rax
movq %rax, 0x50(%rsp)
movq 0x50(%rsp), %rax
addq $0x58, %rsp
retq
nopw %cs:(%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa_struct.cpp
// Function: SSABasicBlock::GetDomSet()
std::unordered_set<SSABasicBlock*> SSABasicBlock::GetDomSet() {
  // all ancestor in dom tree, including itself
  std::unordered_set<SSABasicBlock*> res;
  auto temp = this;
  while (nullptr != temp) {
    res.insert(temp);
    temp = temp->GetIDom();
  }
  return res;
}

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x20(%rsp)
movq %rdi, %rax
movq %rax, 0x28(%rsp)
movq %rdi, 0x70(%rsp)
movq %rsi, 0x68(%rsp)
movq 0x68(%rsp), %rax
movq %rax, 0x30(%rsp)
movb $0x0, 0x67(%rsp)
callq 0x50420
movq 0x30(%rsp), %rax
movq %rax, 0x58(%rsp)
xorl %eax, %eax
cmpq 0x58(%rsp), %rax
je 0x61a95
movq 0x20(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x62fb0
movb %dl, 0x17(%rsp)
movq %rax, 0x18(%rsp)
jmp 0x61a4c
movb 0x17(%rsp), %al
movq 0x18(%rsp), %rcx
movq %rcx, 0x38(%rsp)
movb %al, 0x40(%rsp)
movq 0x58(%rsp), %rdi
callq 0x63000
movq %rax, 0x8(%rsp)
jmp 0x61a6f
movq 0x8(%rsp), %rax
movq %rax, 0x58(%rsp)
jmp 0x61a29
movq 0x20(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x50(%rsp)
movl %eax, 0x4c(%rsp)
callq 0x63010
jmp 0x61ab5
movb $0x1, 0x67(%rsp)
testb $0x1, 0x67(%rsp)
jne 0x61aab
movq 0x20(%rsp), %rdi
callq 0x63010
movq 0x28(%rsp), %rax
addq $0x78, %rsp
retq
movq 0x50(%rsp), %rdi
callq 0x8670
nop
// File: luooofan[P]hblzbd_compiler/src/ssa_struct.cpp
// Function: SSABasicBlock::~SSABasicBlock()
SSABasicBlock::~SSABasicBlock() {
  // func_ = nullptr;
  // delete value_; // FIXME: should be delete and remove all use
  for (auto inst : inst_list_) {
    delete inst;
    // std::cout << "ok\n";
  }
  // inst_list_.clear();
  // pred_.clear();
  // succ_.clear();
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq 0x30(%rsp), %rax
movq %rax, 0x8(%rsp)
addq $0x28, %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rdi
callq 0x62870
movq %rax, 0x20(%rsp)
movq 0x28(%rsp), %rdi
callq 0x628a0
movq %rax, 0x18(%rsp)
leaq 0x20(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x628d0
testb $0x1, %al
jne 0x61b0f
jmp 0x61b48
leaq 0x20(%rsp), %rdi
callq 0x628f0
movq (%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq %rax, (%rsp)
cmpq $0x0, %rax
je 0x61b3a
movq (%rsp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x61b3c
leaq 0x20(%rsp), %rdi
callq 0x62960
jmp 0x61afa
movq 0x8(%rsp), %rdi
addq $0x90, %rdi
callq 0x63010
movq 0x8(%rsp), %rdi
addq $0x78, %rdi
callq 0x63020
movq 0x8(%rsp), %rdi
addq $0x58, %rdi
callq 0x62c00
movq 0x8(%rsp), %rdi
addq $0x40, %rdi
callq 0x62c00
movq 0x8(%rsp), %rdi
addq $0x28, %rdi
callq 0x63080
movq 0x8(%rsp), %rdi
addq $0x8, %rdi
callq 0x8728
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa_struct.cpp
// Function: SSAModule::EmitCode(std::ostream&)
void SSAModule::EmitCode(std::ostream& out) {
  for (auto glob : glob_var_list_) {
    glob->Print(out);
  }
  out << std::endl;
  // for (auto func : builtin_func_list_) {
  //   func->EmitCode(out);
  //   out << std::endl;
  // }
  for (auto func : func_list_) {
    func->EmitCode(out);
    out << std::endl;
  }
}

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x50(%rsp)
movq %rsi, 0x48(%rsp)
movq 0x50(%rsp), %rax
movq %rax, (%rsp)
addq $0x28, %rax
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rdi
callq 0x63090
movq %rax, 0x38(%rsp)
movq 0x40(%rsp), %rdi
callq 0x630c0
movq %rax, 0x30(%rsp)
leaq 0x38(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x630f0
testb $0x1, %al
jne 0x61c03
jmp 0x61c31
leaq 0x38(%rsp), %rdi
callq 0x63110
movq (%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rdi
movq 0x48(%rsp), %rsi
movq (%rdi), %rax
callq *0x10(%rax)
leaq 0x38(%rsp), %rdi
callq 0x63130
jmp 0x61bee
movq 0x48(%rsp), %rdi
movq 0xea343(%rip), %rsi     # 0x14bf80
callq 0x8380
movq (%rsp), %rax
addq $0x40, %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rdi
callq 0x624d0
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rdi
callq 0x62500
movq %rax, 0x10(%rsp)
leaq 0x18(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x62530
testb $0x1, %al
jne 0x61c82
jmp 0x61cc0
leaq 0x18(%rsp), %rdi
callq 0x62550
movq (%rax), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rdi
movq 0x48(%rsp), %rsi
callq 0x61cd0
movq 0x48(%rsp), %rdi
movq 0xea2d1(%rip), %rsi     # 0x14bf80
callq 0x8380
leaq 0x18(%rsp), %rdi
callq 0x62570
jmp 0x61c6d
addq $0x58, %rsp
retq
nopw %cs:(%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/ssa_struct.cpp
// Function: SSABasicBlock::EmitCode(std::ostream&)
void SSABasicBlock::EmitCode(std::ostream& out) {
  out << label_ << ":" << std::endl;
  out << "; BB Begin:" << std::endl;
  for (auto inst : inst_list_) {
    inst->Print(out);
  }
  out << "; BB End." << std::endl;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq %rsi, 0x28(%rsp)
movq 0x30(%rsp), %rsi
movq %rsi, (%rsp)
movq 0x28(%rsp), %rdi
addq $0x8, %rsi
callq 0x8310
movq %rax, %rdi
leaq 0x9928b(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, %rdi
movq 0xe9e12(%rip), %rsi     # 0x14bf80
callq 0x8380
movq 0x28(%rsp), %rdi
leaq 0x9b542(%rip), %rsi     # 0xfd6c1
callq 0x8330
movq %rax, %rdi
movq 0xe9df2(%rip), %rsi     # 0x14bf80
callq 0x8380
movq (%rsp), %rax
addq $0x28, %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rdi
callq 0x62870
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rdi
callq 0x628a0
movq %rax, 0x10(%rsp)
leaq 0x18(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x628d0
testb $0x1, %al
jne 0x621d3
jmp 0x62201
leaq 0x18(%rsp), %rdi
callq 0x628f0
movq (%rax), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq (%rdi), %rax
callq *0x10(%rax)
leaq 0x18(%rsp), %rdi
callq 0x62960
jmp 0x621be
movq 0x28(%rsp), %rdi
leaq 0x9b4c0(%rip), %rsi     # 0xfd6cd
callq 0x8330
movq %rax, %rdi
movq 0xe9d64(%rip), %rsi     # 0x14bf80
callq 0x8380
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/Pass/arm_liveness_analysis.cpp
// Function: ArmLivenessAnalysis::Run()
void ArmLivenessAnalysis::Run() {
  auto m = dynamic_cast<ArmModule *>(*(this->m_));
  MyAssert(nullptr != m);
  for (auto func : m->func_list_) {
    this->Run4Func(func);
  }
}

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x40(%rsp)
movq 0x40(%rsp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
movq %rax, 0x10(%rsp)
cmpq $0x0, %rax
je 0x7cfe3
movq 0x10(%rsp), %rdi
leaq 0xcd60c(%rip), %rsi     # 0x14a5d8
leaq 0xcd5ed(%rip), %rdx     # 0x14a5c0
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0x8(%rsp)
jmp 0x7cfec
xorl %eax, %eax
movq %rax, 0x8(%rsp)
jmp 0x7cfec
movq 0x8(%rsp), %rax
movq %rax, 0x38(%rsp)
xorl %eax, %eax
cmpq 0x38(%rsp), %rax
jne 0x7d056
movq 0xcefe2(%rip), %rdi     # 0x14bfe8
leaq 0x7d0eb(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, %rdi
leaq 0x80701(%rip), %rsi     # 0xfd71d
callq 0x8330
movq %rax, %rdi
leaq 0x7e3bf(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, %rdi
movl $0xd5, %esi
callq 0x8650
movq %rax, %rdi
movq 0xcef39(%rip), %rsi     # 0x14bf80
callq 0x8380
movl $0xff, %edi
callq 0x8460
movq 0x38(%rsp), %rax
addq $0x28, %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rdi
callq 0x10b00
movq %rax, 0x28(%rsp)
movq 0x30(%rsp), %rdi
callq 0x10b30
movq %rax, 0x20(%rsp)
leaq 0x28(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x10b60
testb $0x1, %al
jne 0x7d097
jmp 0x7d0bf
leaq 0x28(%rsp), %rdi
callq 0x10ba0
movq (%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rdi
callq 0x7c820
leaq 0x28(%rsp), %rdi
callq 0x10bb0
jmp 0x7d082
addq $0x48, %rsp
retq
nopw %cs:(%rax,%rax)
nop
// File: luooofan[P]hblzbd_compiler/src/Pass/arm_offset_fixup.cpp
// Function: SPOffsetFixup::Run()
void SPOffsetFixup::Run() {
  auto m = dynamic_cast<ArmModule *>(*(this->m_));
  MyAssert(nullptr != m);
  for (auto func : m->func_list_) {
    Fixup4Func(func);
  }
}

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x40(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x8(%rax), %rax
movq (%rax), %rax
movq %rax, 0x10(%rsp)
cmpq $0x0, %rax
je 0x7f087
movq 0x10(%rsp), %rdi
leaq 0xcb567(%rip), %rsi     # 0x14a5d8
leaq 0xcb548(%rip), %rdx     # 0x14a5c0
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, (%rsp)
jmp 0x7f08f
xorl %eax, %eax
movq %rax, (%rsp)
jmp 0x7f08f
movq (%rsp), %rax
movq %rax, 0x38(%rsp)
xorl %eax, %eax
cmpq 0x38(%rsp), %rax
jne 0x7f0f8
movq 0xccf40(%rip), %rdi     # 0x14bfe8
leaq 0x7b049(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, %rdi
leaq 0x7e698(%rip), %rsi     # 0xfd756
callq 0x8330
movq %rax, %rdi
leaq 0x7c31d(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, %rdi
movl $0xd, %esi
callq 0x8650
movq %rax, %rdi
movq 0xcce97(%rip), %rsi     # 0x14bf80
callq 0x8380
movl $0xff, %edi
callq 0x8460
movq 0x38(%rsp), %rax
addq $0x28, %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rdi
callq 0x10b00
movq %rax, 0x28(%rsp)
movq 0x30(%rsp), %rdi
callq 0x10b30
movq %rax, 0x20(%rsp)
leaq 0x28(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x10b60
testb $0x1, %al
jne 0x7f139
jmp 0x7f166
leaq 0x28(%rsp), %rdi
callq 0x10ba0
movq 0x8(%rsp), %rdi
movq (%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rsi
callq 0x7f170
leaq 0x28(%rsp), %rdi
callq 0x10bb0
jmp 0x7f124
addq $0x48, %rsp
retq
nopl (%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/Pass/cond_br_to_insts.cpp
// Function: CondBrToInsts::Run()
void CondBrToInsts::Run() {
  kCount = 0;
  auto m = dynamic_cast<ArmModule*>(*(this->m_));
  MyAssert(nullptr != m);
  for (auto func : m->func_list_) {
    Run4Func(func);
  }
#ifdef OUTPUT_CONDBRTOINSTS_EFFECT
  std::cout << "CondBrToInsts Pass works on: " << kCount << " ArmBBs" << std::endl;
#endif
}

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x40(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x8(%rsp)
movl $0x0, 0xcb297(%rip)     # 0x14c784
movq 0x8(%rax), %rax
movq (%rax), %rax
movq %rax, 0x10(%rsp)
cmpq $0x0, %rax
je 0x81521
movq 0x10(%rsp), %rdi
leaq 0xc90cd(%rip), %rsi     # 0x14a5d8
leaq 0xc90ae(%rip), %rdx     # 0x14a5c0
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, (%rsp)
jmp 0x81529
xorl %eax, %eax
movq %rax, (%rsp)
jmp 0x81529
movq (%rsp), %rax
movq %rax, 0x38(%rsp)
xorl %eax, %eax
cmpq 0x38(%rsp), %rax
jne 0x81592
movq 0xcaaa6(%rip), %rdi     # 0x14bfe8
leaq 0x78baf(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, %rdi
leaq 0x7c22c(%rip), %rsi     # 0xfd784
callq 0x8330
movq %rax, %rdi
leaq 0x79e83(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, %rdi
movl $0x13, %esi
callq 0x8650
movq %rax, %rdi
movq 0xca9fd(%rip), %rsi     # 0x14bf80
callq 0x8380
movl $0xff, %edi
callq 0x8460
movq 0x38(%rsp), %rax
addq $0x28, %rax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rdi
callq 0x10b00
movq %rax, 0x28(%rsp)
movq 0x30(%rsp), %rdi
callq 0x10b30
movq %rax, 0x20(%rsp)
leaq 0x28(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x10b60
testb $0x1, %al
jne 0x815d3
jmp 0x81600
leaq 0x28(%rsp), %rdi
callq 0x10ba0
movq 0x8(%rsp), %rdi
movq (%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rsi
callq 0x81610
leaq 0x28(%rsp), %rdi
callq 0x10bb0
jmp 0x815be
addq $0x48, %rsp
retq
nopw %cs:(%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/Pass/convert_ssa.cpp
// Function: ConvertSSA::Run()
void ConvertSSA::Run() {
  auto m = dynamic_cast<IRModule*>(*(this->m_));
  MyAssert(nullptr != m);
  for (auto f : m->func_list_) {
    InsertPhiIR(f);
    // f->EmitCode(std::cout);
    this->count_.clear();
    this->stack_.clear();
    Rename(f->bb_list_.front());
  }
  // m->EmitCode();
  auto ssam = this->ConstructSSA(m);
  *(this->m_) = static_cast<Module*>(ssam);
  delete m;
}

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x50(%rsp)
movq 0x50(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x8(%rax), %rax
movq (%rax), %rax
movq %rax, 0x18(%rsp)
cmpq $0x0, %rax
je 0x85338
movq 0x18(%rsp), %rdi
leaq 0xc52b7(%rip), %rsi     # 0x14a5d8
leaq 0xc5d10(%rip), %rdx     # 0x14b038
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0x8(%rsp)
jmp 0x85341
xorl %eax, %eax
movq %rax, 0x8(%rsp)
jmp 0x85341
movq 0x8(%rsp), %rax
movq %rax, 0x48(%rsp)
xorl %eax, %eax
cmpq 0x48(%rsp), %rax
jne 0x853ab
movq 0xc6c8d(%rip), %rdi     # 0x14bfe8
leaq 0x74d96(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, %rdi
leaq 0x78534(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, %rdi
leaq 0x7606a(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, %rdi
movl $0x10, %esi
callq 0x8650
movq %rax, %rdi
movq 0xc6be4(%rip), %rsi     # 0x14bf80
callq 0x8380
movl $0xff, %edi
callq 0x8460
movq 0x48(%rsp), %rax
addq $0x28, %rax
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rdi
callq 0x1d3c0
movq %rax, 0x38(%rsp)
movq 0x40(%rsp), %rdi
callq 0x1d240
movq %rax, 0x30(%rsp)
leaq 0x38(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x49210
testb $0x1, %al
jne 0x853ec
jmp 0x85450
leaq 0x38(%rsp), %rdi
callq 0x49250
movq 0x10(%rsp), %rdi
movq (%rax), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rsi
callq 0x854a0
movq 0x10(%rsp), %rdi
addq $0x38, %rdi
callq 0x8cc70
movq 0x10(%rsp), %rdi
addq $0x70, %rdi
callq 0x8cc80
movq 0x28(%rsp), %rdi
addq $0x30, %rdi
callq 0x8cc90
movq 0x10(%rsp), %rdi
movq (%rax), %rsi
callq 0x85d30
leaq 0x38(%rsp), %rdi
callq 0x49260
jmp 0x853d7
movq 0x10(%rsp), %rdi
movq 0x48(%rsp), %rsi
callq 0x86e40
movq %rax, %rcx
movq 0x10(%rsp), %rax
movq %rcx, 0x20(%rsp)
movq 0x20(%rsp), %rcx
movq 0x8(%rax), %rax
movq %rcx, (%rax)
movq 0x48(%rsp), %rax
movq %rax, (%rsp)
cmpq $0x0, %rax
je 0x85491
movq (%rsp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
addq $0x58, %rsp
retq
nopw %cs:(%rax,%rax)
// File: luooofan[P]hblzbd_compiler/src/Pass/convert_ssa.cpp
// Function: ConvertSSA::FindValueFromCompName(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, bool)
Value* ConvertSSA::FindValueFromCompName(const std::string& comp_name, bool is_global) {
  if (is_global) {
    auto it = glob_map.find(comp_name);
    if (it != glob_map.end()) return (*it).second;
  } else {
    auto it = work_map.find(comp_name);
    if (it != work_map.end()) return (*it).second;
  }
  return nullptr;
}

// Assembly:
subq $0x48, %rsp
movb %dl, %al
movq %rdi, 0x38(%rsp)
movq %rsi, 0x30(%rsp)
andb $0x1, %al
movb %al, 0x2f(%rsp)
movq 0x38(%rsp), %rax
movq %rax, (%rsp)
testb $0x1, 0x2f(%rsp)
je 0x874b1
movq (%rsp), %rdi
addq $0xe0, %rdi
movq 0x30(%rsp), %rsi
callq 0x8ccc0
movq (%rsp), %rdi
movq %rax, 0x20(%rsp)
addq $0xe0, %rdi
callq 0x8cd10
movq %rax, 0x18(%rsp)
leaq 0x20(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x8ccf0
testb $0x1, %al
jne 0x8749a
jmp 0x874af
leaq 0x20(%rsp), %rdi
callq 0x8cd40
movq 0x20(%rax), %rax
movq %rax, 0x40(%rsp)
jmp 0x87515
jmp 0x8750c
movq (%rsp), %rdi
addq $0xa8, %rdi
movq 0x30(%rsp), %rsi
callq 0x8ccc0
movq (%rsp), %rdi
movq %rax, 0x10(%rsp)
addq $0xa8, %rdi
callq 0x8cd10
movq %rax, 0x8(%rsp)
leaq 0x10(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x8ccf0
testb $0x1, %al
jne 0x874f5
jmp 0x8750a
leaq 0x10(%rsp), %rdi
callq 0x8cd40
movq 0x20(%rax), %rax
movq %rax, 0x40(%rsp)
jmp 0x87515
jmp 0x8750c
movq $0x0, 0x40(%rsp)
movq 0x40(%rsp), %rax
addq $0x48, %rsp
retq
nop
// File: luooofan[P]hblzbd_compiler/src/Pass/convert_ssa.cpp
// Function: ConvertSSA::ProcessResValue(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, ir::Opn*, Value*, SSABasicBlock*)
void ConvertSSA::ProcessResValue(const std::string& comp_name, Opn* opn, Value* val, SSABasicBlock* ssabb) {
  // 如果是全局量就加一条store语句 否则记录映射即可
  MyAssert(opn->type_ == Opn::Type::Var);
  if (0 == opn->scope_id_) {  // 全局变量需要store
    // maintain used_glob_var
    ssabb->GetFunction()->AddUsedGlobVar(dynamic_cast<GlobalVariable*>(val));

    new StoreInst(val, glob_map[comp_name], ssabb);
  } else {
    work_map[comp_name] = val;
  }
}

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x70(%rsp)
movq %rsi, 0x68(%rsp)
movq %rdx, 0x60(%rsp)
movq %rcx, 0x58(%rsp)
movq %r8, 0x50(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x60(%rsp), %rax
cmpl $0x0, (%rax)
je 0x875a8
movq 0xc4a90(%rip), %rdi     # 0x14bfe8
leaq 0x72b99(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, %rdi
leaq 0x76337(%rip), %rsi     # 0xfd8a5
callq 0x8330
movq %rax, %rdi
leaq 0x73e6d(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, %rdi
movl $0x2f, %esi
callq 0x8650
movq %rax, %rdi
movq 0xc49e7(%rip), %rsi     # 0x14bf80
callq 0x8380
movl $0xff, %edi
callq 0x8460
movq 0x60(%rsp), %rcx
xorl %eax, %eax
cmpl 0x28(%rcx), %eax
jne 0x87687
movq 0x50(%rsp), %rdi
callq 0x5e2c0
movq %rax, 0x28(%rsp)
movq 0x58(%rsp), %rax
movq %rax, 0x30(%rsp)
cmpq $0x0, %rax
je 0x875fa
movq 0x30(%rsp), %rdi
leaq 0xc3eed(%rip), %rsi     # 0x14b4d0
leaq 0xc3ef6(%rip), %rdx     # 0x14b4e0
xorl %eax, %eax
movl %eax, %ecx
callq 0x8410
movq %rax, 0x20(%rsp)
jmp 0x87603
xorl %eax, %eax
movq %rax, 0x20(%rsp)
jmp 0x87603
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x614c0
movl $0x68, %edi
callq 0x8340
movq 0x38(%rsp), %rdi
movq %rax, 0x8(%rsp)
movq 0x58(%rsp), %rax
movq %rax, 0x10(%rsp)
addq $0xe0, %rdi
movq 0x68(%rsp), %rsi
callq 0x8cd60
movq %rax, 0x18(%rsp)
jmp 0x87648
movq 0x10(%rsp), %rsi
movq 0x8(%rsp), %rdi
movq 0x18(%rsp), %rax
movq (%rax), %rdx
movq 0x50(%rsp), %rcx
callq 0x8cd90
jmp 0x87666
jmp 0x876ad
movq 0x8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x48(%rsp)
movl %eax, 0x44(%rsp)
movl $0x68, %esi
callq 0x8350
jmp 0x876b2
movq 0x38(%rsp), %rdi
movq 0x58(%rsp), %rax
movq %rax, (%rsp)
addq $0xa8, %rdi
movq 0x68(%rsp), %rsi
callq 0x8cd60
movq (%rsp), %rcx
movq %rcx, (%rax)
addq $0x78, %rsp
retq
movq 0x48(%rsp), %rdi
callq 0x8670
nopl (%rax)