// File: /workspace/github_c_makefile_star2_O2/cogbee[P]vmir-latest/src/vmir.c
// Function: iu_cleanup
static void
iu_cleanup(ir_unit_t *iu)
{
  value_resize(iu, 0);

  VECTOR_CLEAR(&iu->iu_argv);
  VECTOR_CLEAR(&iu->iu_branch_fixups);
  VECTOR_CLEAR(&iu->iu_jit_vmbb_fixups);
  VECTOR_CLEAR(&iu->iu_jit_branch_fixups);
  VECTOR_CLEAR(&iu->iu_jit_bb_to_addr_fixups);
  VECTOR_CLEAR(&iu->iu_initializers);
  VECTOR_CLEAR(&iu->iu_values);

  VECTOR_CLEAR(&iu->iu_wasm_type_map);
  VECTOR_CLEAR(&iu->iu_wasm_globalvar_map);
  VECTOR_CLEAR(&iu->iu_wasm_functions);
  VECTOR_CLEAR(&iu->iu_wasm_value_stack);
  VECTOR_CLEAR(&iu->iu_wasm_cfg_stack);

  ir_attr_t *ia;
  while((ia = LIST_FIRST(&iu->iu_attribute_groups)) != NULL) {
    LIST_REMOVE(ia, ia_link);
    free(ia);
  }

  for(int i = 0; i < VECTOR_LEN(&iu->iu_attrsets); i++) {
    ir_attrset_t *ias = &VECTOR_ITEM(&iu->iu_attrsets, i);
    free(ias->ias_list);
  }
  VECTOR_CLEAR(&iu->iu_attrsets);

  iu->iu_current_bb = NULL;
  iu->iu_current_function = NULL;

  for(int i = 0; i < IU_MAX_TMP_STR; i++) {
    free(iu->iu_tmp_str[i]);
    iu->iu_tmp_str[i] = NULL;
  }

  ir_blockinfo_t *ib;
  while((ib = LIST_FIRST(&iu->iu_blockinfos)) != NULL)
    blockinfo_destroy(ib);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
xorl %esi, %esi
callq 0xe127
xorps %xmm0, %xmm0
movups %xmm0, 0x458(%rbx)
movq 0x450(%rbx), %rdi
callq 0x3030
xorps %xmm0, %xmm0
movups %xmm0, 0x310(%rbx)
movq 0x308(%rbx), %rdi
callq 0x3030
xorps %xmm0, %xmm0
movups %xmm0, 0x328(%rbx)
movq 0x320(%rbx), %rdi
callq 0x3030
xorps %xmm0, %xmm0
movups %xmm0, 0x340(%rbx)
movq 0x338(%rbx), %rdi
callq 0x3030
xorps %xmm0, %xmm0
movups %xmm0, 0x358(%rbx)
movq 0x350(%rbx), %rdi
callq 0x3030
xorps %xmm0, %xmm0
movups %xmm0, 0x2f8(%rbx)
movq 0x2f0(%rbx), %rdi
callq 0x3030
xorps %xmm0, %xmm0
movups %xmm0, 0x188(%rbx)
movq 0x180(%rbx), %rdi
callq 0x3030
xorps %xmm0, %xmm0
movups %xmm0, 0x588(%rbx)
movq 0x580(%rbx), %rdi
callq 0x3030
xorps %xmm0, %xmm0
movups %xmm0, 0x5a0(%rbx)
movq 0x598(%rbx), %rdi
callq 0x3030
xorps %xmm0, %xmm0
movups %xmm0, 0x5b8(%rbx)
movq 0x5b0(%rbx), %rdi
callq 0x3030
xorps %xmm0, %xmm0
movups %xmm0, 0x5d0(%rbx)
movq 0x5c8(%rbx), %rdi
callq 0x3030
xorps %xmm0, %xmm0
movups %xmm0, 0x5e8(%rbx)
movq 0x5e0(%rbx), %rdi
callq 0x3030
movq 0x148(%rbx), %rdi
testq %rdi, %rdi
je 0xb559
movq (%rdi), %rax
movq 0x8(%rdi), %rcx
testq %rax, %rax
je 0xb554
movq %rcx, 0x8(%rax)
movq %rax, (%rcx)
jmp 0xb533
leaq 0x158(%rbx), %r14
pushq $0x8
popq %r15
xorl %r12d, %r12d
cmpq %r12, (%r14)
jbe 0xb585
movq 0x150(%rbx), %rax
movq (%rax,%r15), %rdi
callq 0x3030
incq %r12
addq $0x10, %r15
jmp 0xb567
xorps %xmm0, %xmm0
movups %xmm0, (%r14)
movq 0x150(%rbx), %rdi
callq 0x3030
xorps %xmm0, %xmm0
movups %xmm0, 0x1c0(%rbx)
xorl %r14d, %r14d
cmpq $0x20, %r14
je 0xb5ea
movq 0x1d0(%rbx,%r14,8), %rdi
callq 0x3030
andq $0x0, 0x1d0(%rbx,%r14,8)
incq %r14
jmp 0xb5a5
movq (%r14), %rax
movq 0x8(%r14), %rcx
testq %rax, %rax
je 0xb5d6
movq %rcx, 0x8(%rax)
movq %rax, (%rcx)
leaq 0x18(%r14), %rdi
callq 0xe1ef
movq %r14, %rdi
callq 0x3030
movq 0x138(%rbx), %r14
testq %r14, %r14
jne 0xb5c6
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq