// File: /workspace/github_c_makefile_star2_O0/cogbee[P]vmir-latest/src/vmir_transform.c
// Function: function_bind_instr_inputs
static void
function_bind_instr_inputs(ir_unit_t *iu, ir_function_t *f)
{
  ir_bb_t *bb;
  TAILQ_FOREACH(bb, &f->if_bbs, ib_link) {
    ir_instr_t *ii;
    TAILQ_FOREACH(ii, &bb->ib_instrs, ii_link) {

      instr_verify_output(iu, ii);

      switch(ii->ii_class) {
      case IR_IC_UNREACHABLE:
        break;
      case IR_IC_RET:
      case IR_IC_CAST:
      case IR_IC_VAARG:
        instr_bind_input(iu, ((ir_instr_unary_t *)ii)->value, ii);
        break;
      case IR_IC_LOAD:
        instr_bind_input(iu, ((ir_instr_load_t *)ii)->ptr, ii);
        if(((ir_instr_load_t *)ii)->value_offset.value >= 0)
          instr_bind_input(iu, ((ir_instr_load_t *)ii)->value_offset, ii);
        break;

      case IR_IC_BINOP:
      case IR_IC_CMP2:
        instr_bind_input(iu, ((ir_instr_binary_t *)ii)->lhs_value, ii);
        instr_bind_input(iu, ((ir_instr_binary_t *)ii)->rhs_value, ii);
        break;
      case IR_IC_STORE:
        instr_bind_input(iu, ((ir_instr_store_t *)ii)->value, ii);
        instr_bind_input(iu, ((ir_instr_store_t *)ii)->ptr, ii);
        break;
      case IR_IC_BR:
        instr_bind_input(iu, ((ir_instr_br_t *)ii)->condition, ii);
        break;
      case IR_IC_ALLOCA:
        instr_bind_input(iu, ((ir_instr_alloca_t *)ii)->num_items_value, ii);
        break;
      case IR_IC_SELECT:
        instr_bind_input(iu, ((ir_instr_select_t *)ii)->pred, ii);
        instr_bind_input(iu, ((ir_instr_select_t *)ii)->true_value, ii);
        instr_bind_input(iu, ((ir_instr_select_t *)ii)->false_value, ii);
        break;
      case IR_IC_LEA:
        instr_bind_input(iu, ((ir_instr_lea_t *)ii)->baseptr, ii);
        instr_bind_input(iu, ((ir_instr_lea_t *)ii)->value_offset, ii);
        break;
      case IR_IC_CALL:
      case IR_IC_VMOP:
      case IR_IC_INVOKE:
        {
          ir_instr_call_t *p = (ir_instr_call_t *)ii;
          instr_bind_input(iu, p->callee, ii);
          for(int i = 0; i < p->argc; i++)
            instr_bind_input(iu, p->argv[i].value, ii);
        }
        break;
      case IR_IC_SWITCH:
        {
          ir_instr_switch_t *s = (ir_instr_switch_t *)ii;
          instr_bind_input(iu, s->value, ii);
        }
        break;
      case IR_IC_PHI:
        {
          ir_instr_phi_t *p = (ir_instr_phi_t *)ii;
          for(int i = 0; i < p->num_nodes; i++)
            instr_bind_input(iu, p->nodes[i].value, ii);
        }
        break;
      case IR_IC_MOVE:
        {
          ir_instr_move_t *p = (ir_instr_move_t *)ii;
          instr_bind_input(iu, p->value, ii);
        }
        break;
      case IR_IC_EXTRACTVAL:
        {
          ir_instr_extractval_t *e = (ir_instr_extractval_t *)ii;
          instr_bind_input(iu, e->value, ii);
        }
        break;
      case IR_IC_RESUME:
        {
          ir_instr_resume_t *e = (ir_instr_resume_t *)ii;
          for (int i=0; i<e->num_values; ++i)
            instr_bind_input(iu, e->values[i], ii);
        }
        break;
      case IR_IC_INSERTVAL:
        {
          ir_instr_insertval_t *e = (ir_instr_insertval_t *)ii;
          instr_bind_input(iu, e->src, ii);
          instr_bind_input(iu, e->replacement, ii);
        }
        break;
      case IR_IC_LANDINGPAD:
        break;

      default:
        parser_error(iu, "Unable to bind input values on instr-class %d",
                     ii->ii_class);
      }
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x24a8e
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0x24a7c
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x266c0
movq -0x20(%rbp), %rax
movl 0x28(%rax), %eax
movq %rax, -0x78(%rbp)
subq $0x16, %rax
ja 0x24a44
movq -0x78(%rbp), %rax
leaq 0x18ece(%rip), %rcx     # 0x3d61c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x24a6a
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x58(%rax), %rsi
callq 0x267c0
jmp 0x24a6a
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x58(%rax), %rsi
callq 0x267c0
movq -0x20(%rbp), %rax
cmpl $0x0, 0x64(%rax)
jl 0x247aa
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x64(%rax), %rsi
callq 0x267c0
jmp 0x24a6a
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x5c(%rax), %rsi
callq 0x267c0
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x64(%rax), %rsi
callq 0x267c0
jmp 0x24a6a
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x60(%rax), %rsi
callq 0x267c0
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x58(%rax), %rsi
callq 0x267c0
jmp 0x24a6a
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x58(%rax), %rsi
callq 0x267c0
jmp 0x24a6a
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x5c(%rax), %rsi
callq 0x267c0
jmp 0x24a6a
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x68(%rax), %rsi
callq 0x267c0
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x58(%rax), %rsi
callq 0x267c0
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x60(%rax), %rsi
callq 0x267c0
jmp 0x24a6a
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x58(%rax), %rsi
callq 0x267c0
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x64(%rax), %rsi
callq 0x267c0
jmp 0x24a6a
movq -0x20(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x58(%rax), %rsi
callq 0x267c0
movl $0x0, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl 0x6c(%rcx), %eax
jge 0x24912
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rax
addq $0x70, %rax
movslq -0x2c(%rbp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq -0x20(%rbp), %rdx
movq (%rax), %rsi
callq 0x267c0
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x248d8
jmp 0x24a6a
movq -0x20(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x58(%rax), %rsi
callq 0x267c0
jmp 0x24a6a
movq -0x20(%rbp), %rax
movq %rax, -0x40(%rbp)
movl $0x0, -0x44(%rbp)
movl -0x44(%rbp), %eax
movq -0x40(%rbp), %rcx
cmpl 0x58(%rcx), %eax
jge 0x24983
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rax
addq $0x5c, %rax
movslq -0x44(%rbp), %rcx
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq -0x20(%rbp), %rdx
movq 0x4(%rax), %rsi
callq 0x267c0
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x24948
jmp 0x24a6a
movq -0x20(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x58(%rax), %rsi
callq 0x267c0
jmp 0x24a6a
movq -0x20(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x8(%rbp), %rdi
movq -0x58(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x58(%rax), %rsi
callq 0x267c0
jmp 0x24a6a
movq -0x20(%rbp), %rax
movq %rax, -0x60(%rbp)
movl $0x0, -0x64(%rbp)
movl -0x64(%rbp), %eax
movq -0x60(%rbp), %rcx
cmpl 0x58(%rcx), %eax
jge 0x24a0c
movq -0x8(%rbp), %rdi
movq -0x60(%rbp), %rax
movslq -0x64(%rbp), %rcx
movq -0x20(%rbp), %rdx
movq 0x5c(%rax,%rcx,8), %rsi
callq 0x267c0
movl -0x64(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x64(%rbp)
jmp 0x249db
jmp 0x24a6a
movq -0x20(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x8(%rbp), %rdi
movq -0x70(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x58(%rax), %rsi
callq 0x267c0
movq -0x8(%rbp), %rdi
movq -0x70(%rbp), %rax
movq -0x20(%rbp), %rdx
movq 0x60(%rax), %rsi
callq 0x267c0
jmp 0x24a6a
jmp 0x24a6a
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x28(%rax), %r8d
leaq 0x1a996(%rip), %rsi     # 0x3f3ed
movl $0x28a, %edx            # imm = 0x28A
leaq 0x1ab7a(%rip), %rcx     # 0x3f5dd
movb $0x0, %al
callq 0x18220
jmp 0x24a6c
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x24716
jmp 0x24a7e
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x246ff
addq $0x80, %rsp
popq %rbp
retq
nopw (%rax,%rax)