define cc 11  {i64, i64, i64, i64} @trivial_22.test.0(i64 %hp_in, i64 %p_in, i64 %nsp_in) noredzone {
Entry:
  %exception_sync = alloca double
  %nsp_reg_var = alloca i64
  store i64 %nsp_in, i64* %nsp_reg_var 
  %p_reg_var = alloca i64
  store i64 %p_in, i64* %p_reg_var 
  %hp_reg_var = alloca i64
  store i64 %hp_in, i64* %hp_reg_var 
  %a_var = ptrtoint i64* @a to i64
  %EXIT_var = ptrtoint i64* @EXIT to i64
  %exit_var = ptrtoint i64* @exit to i64
  %case_clause_var = ptrtoint i64* @case_clause to i64
  %throw_var = ptrtoint i64* @throw to i64
  %badarith_var = ptrtoint i64* @badarith to i64
  %ok_var = ptrtoint i64* @ok to i64
  br label %L1
L44:
  br label %L1
L1:
  ; get_fcalls
  %t1 = load i64* %p_reg_var 
  %t2 = inttoptr i64 %t1 to i64*
  %t3 = getelementptr i64* %t2, i64 30
  %t4 = load i64* %t3 
  %t0 = sub i64 %t4, 1
  %t5 = load i64* %p_reg_var 
  %t6 = inttoptr i64 %t5 to i64*
  %t7 = getelementptr i64* %t6, i64 30
  store i64 %t0, i64* %t7 
  %t8 = load i64* %p_reg_var 
  %t9 = inttoptr i64 %t8 to i64*
  %t10 = getelementptr i64* %t9, i64 30
  %t11 = load i64* %t10 
  %t12 = icmp slt i64 %t11, 0
  br i1 %t12, label %L3, label %L5
L3:
  %nsp16 = load i64* %nsp_reg_var 
  %p15 = load i64* %p_reg_var 
  %hp14 = load i64* %hp_reg_var 
  %t17 = call cc 11  {i64, i64, i64, i64} @suspend_0..(i64 %hp14, i64 %p15, i64 %nsp16) 
  %nsp20 = extractvalue {i64, i64, i64, i64} %t17, 2
  %p19 = extractvalue {i64, i64, i64, i64} %t17, 1
  %hp18 = extractvalue {i64, i64, i64, i64} %t17, 0
  store i64 %nsp20, i64* %nsp_reg_var 
  store i64 %p19, i64* %p_reg_var 
  store i64 %hp18, i64* %hp_reg_var 
  br label %L5
L5:
  %v19 = select i1 true, i64 %a_var, i64 undef
  %nsp23 = load i64* %nsp_reg_var 
  %p22 = load i64* %p_reg_var 
  %hp21 = load i64* %hp_reg_var 
  %t24 = invoke cc 11 {i64, i64, i64, i64} @trivial_22.foo.1(i64 %hp21, i64 %p22, i64 %nsp23, i64 %v19)  to label %L9999999999 unwind label %L6 
L9999999999:
  %nsp27 = extractvalue {i64, i64, i64, i64} %t24, 2
  %p26 = extractvalue {i64, i64, i64, i64} %t24, 1
  %hp25 = extractvalue {i64, i64, i64, i64} %t24, 0
  store i64 %nsp27, i64* %nsp_reg_var 
  store i64 %p26, i64* %p_reg_var 
  store i64 %hp25, i64* %hp_reg_var 
  %v20 = extractvalue {i64, i64, i64, i64} %t24, 3
  br label %L7
L7:
  %v35 = select i1 true, i64 %v20, i64 undef
  br label %L8
L8:
  %v21 = phi i64[ %v46, %L40 ], [ %v40, %L22 ], [ %v35, %L7 ]
  %r22 = and i64 %v21, 1
  %t28 = icmp eq i64 %r22, 0
  br i1 %t28, label %L11, label %L10
L11:
  %t29 = add i64 %v21, -2
  %t30 = inttoptr i64 %t29 to i64*
  %r26 = load i64* %t30 
  %t31 = icmp eq i64 %r26, 128
  br i1 %t31, label %L9, label %L10
L9:
  %t32 = add i64 %v21, 6
  %t33 = inttoptr i64 %t32 to i64*
  %v27 = load i64* %t33 
  %t34 = add i64 %v21, 14
  %t35 = inttoptr i64 %t34 to i64*
  %v28 = load i64* %t35 
  %v29 = select i1 true, i64 %EXIT_var, i64 undef
  %t36 = icmp eq i64 %v27, %v29
  br i1 %t36, label %L14, label %L10
L14:
  %r30 = and i64 %v28, 1
  %t37 = icmp eq i64 %r30, 0
  br i1 %t37, label %L16, label %L10
L16:
  %t38 = add i64 %v28, -2
  %t39 = inttoptr i64 %t38 to i64*
  %r31 = load i64* %t39 
  %t40 = icmp eq i64 %r31, 128
  br i1 %t40, label %L15, label %L10
L15:
  %t41 = add i64 %v28, 6
  %t42 = inttoptr i64 %t41 to i64*
  %v32 = load i64* %t42 
  %v33 = select i1 true, i64 %badarith_var, i64 undef
  %t43 = icmp eq i64 %v32, %v33
  br i1 %t43, label %L18, label %L10
L18:
  %v34 = select i1 true, i64 %ok_var, i64 undef
  %nsp46 = load i64* %nsp_reg_var 
  %p45 = load i64* %p_reg_var 
  %hp44 = load i64* %hp_reg_var 
  %t47 = insertvalue {i64, i64, i64, i64} undef, i64 %hp44, 0
  %t48 = insertvalue {i64, i64, i64, i64} %t47, i64 %p45, 1
  %t49 = insertvalue {i64, i64, i64, i64} %t48, i64 %nsp46, 2
  %t50 = insertvalue {i64, i64, i64, i64} %t49, i64 %v34, 3
  ret {i64, i64, i64, i64} %t50
L10:
  ; get_heap_pointer
  ; get_heap_limit
  %t51 = load i64* %p_reg_var 
  %t52 = inttoptr i64 %t51 to i64*
  %t53 = getelementptr i64* %t52, i64 1
  %t54 = load i64* %t53 
  %t55 = load i64* %hp_reg_var 
  %r23 = sub i64 %t54, %t55
  %t56 = icmp slt i64 %r23, 24
  br i1 %t56, label %L39, label %L38
L39:
  %nsp60 = load i64* %nsp_reg_var 
  %p59 = load i64* %p_reg_var 
  %hp58 = load i64* %hp_reg_var 
  %t61 = call cc 11  {i64, i64, i64, i64} @gc_1..(i64 %hp58, i64 %p59, i64 %nsp60, i64 63) 
  %nsp64 = extractvalue {i64, i64, i64, i64} %t61, 2
  %p63 = extractvalue {i64, i64, i64, i64} %t61, 1
  %hp62 = extractvalue {i64, i64, i64, i64} %t61, 0
  store i64 %nsp64, i64* %nsp_reg_var 
  store i64 %p63, i64* %p_reg_var 
  store i64 %hp62, i64* %hp_reg_var 
  br label %L38
L38:
  %v24 = select i1 true, i64 %case_clause_var, i64 undef
  ; get_heap_pointer
  %t65 = load i64* %hp_reg_var 
  %t66 = add i64 %t65, 0
  %t67 = inttoptr i64 %t66 to i64*
  store i64 128, i64* %t67 
  %t68 = load i64* %hp_reg_var 
  %t69 = add i64 %t68, 8
  %t70 = inttoptr i64 %t69 to i64*
  store i64 %v24, i64* %t70 
  %t71 = load i64* %hp_reg_var 
  %t72 = add i64 %t71, 16
  %t73 = inttoptr i64 %t72 to i64*
  store i64 %v21, i64* %t73 
  %t74 = load i64* %hp_reg_var 
  %v25 = add i64 %t74, 2
  %t76 = load i64* %hp_reg_var 
  %t75 = add i64 %t76, 24
  store i64 %t75, i64* %hp_reg_var 
  ; put_heap_pointer
  %nsp80 = load i64* %nsp_reg_var 
  %p79 = load i64* %p_reg_var 
  %hp78 = load i64* %hp_reg_var 
  %t81 = call cc 11  {i64, i64, i64, i64} @erlang.error.1(i64 %hp78, i64 %p79, i64 %nsp80, i64 %v25) 
  %nsp84 = extractvalue {i64, i64, i64, i64} %t81, 2
  %p83 = extractvalue {i64, i64, i64, i64} %t81, 1
  %hp82 = extractvalue {i64, i64, i64, i64} %t81, 0
  store i64 %nsp84, i64* %nsp_reg_var 
  store i64 %p83, i64* %p_reg_var 
  store i64 %hp82, i64* %hp_reg_var 
  %nsp87 = load i64* %nsp_reg_var 
  %p86 = load i64* %p_reg_var 
  %hp85 = load i64* %hp_reg_var 
  %t88 = insertvalue {i64, i64, i64, i64} undef, i64 %hp85, 0
  %t89 = insertvalue {i64, i64, i64, i64} %t88, i64 %p86, 1
  %t90 = insertvalue {i64, i64, i64, i64} %t89, i64 %nsp87, 2
  %t91 = insertvalue {i64, i64, i64, i64} %t90, i64 15, 3
  ret {i64, i64, i64, i64} %t91
L6:
  ; begin_handler
  %t92 = load i64* %p_reg_var 
  %t93 = add i64 %t92, 320
  %t94 = inttoptr i64 %t93 to i64*
  %v36 = load i64* %t94 
  %t95 = load i64* %p_reg_var 
  %t96 = add i64 %t95, 336
  %t97 = inttoptr i64 %t96 to i64*
  %v37 = load i64* %t97 
  %t98 = load i64* %p_reg_var 
  %t99 = add i64 %t98, 168
  %t100 = inttoptr i64 %t99 to i64*
  %v38 = load i64* %t100 
  %v39 = select i1 true, i64 %throw_var, i64 undef
  %t101 = icmp eq i64 %v38, %v39
  br i1 %t101, label %L22, label %L23
L22:
  %v40 = select i1 true, i64 %v36, i64 undef
  br label %L8
L23:
  %v41 = select i1 true, i64 %exit_var, i64 undef
  %t102 = icmp eq i64 %v38, %v41
  br i1 %t102, label %L24, label %L25
L24:
  %v47 = select i1 true, i64 %v36, i64 undef
  br label %L26
L26:
  %v42 = phi i64[ %v51, %L42 ], [ %v47, %L24 ]
  ; get_heap_pointer
  ; get_heap_limit
  %t103 = load i64* %p_reg_var 
  %t104 = inttoptr i64 %t103 to i64*
  %t105 = getelementptr i64* %t104, i64 1
  %t106 = load i64* %t105 
  %t107 = load i64* %hp_reg_var 
  %r43 = sub i64 %t106, %t107
  %t108 = icmp slt i64 %r43, 24
  br i1 %t108, label %L41, label %L40
L41:
  %nsp112 = load i64* %nsp_reg_var 
  %p111 = load i64* %p_reg_var 
  %hp110 = load i64* %hp_reg_var 
  %t113 = call cc 11  {i64, i64, i64, i64} @gc_1..(i64 %hp110, i64 %p111, i64 %nsp112, i64 63) 
  %nsp116 = extractvalue {i64, i64, i64, i64} %t113, 2
  %p115 = extractvalue {i64, i64, i64, i64} %t113, 1
  %hp114 = extractvalue {i64, i64, i64, i64} %t113, 0
  store i64 %nsp116, i64* %nsp_reg_var 
  store i64 %p115, i64* %p_reg_var 
  store i64 %hp114, i64* %hp_reg_var 
  br label %L40
L40:
  %v44 = select i1 true, i64 %EXIT_var, i64 undef
  ; get_heap_pointer
  %t117 = load i64* %hp_reg_var 
  %t118 = add i64 %t117, 0
  %t119 = inttoptr i64 %t118 to i64*
  store i64 128, i64* %t119 
  %t120 = load i64* %hp_reg_var 
  %t121 = add i64 %t120, 8
  %t122 = inttoptr i64 %t121 to i64*
  store i64 %v44, i64* %t122 
  %t123 = load i64* %hp_reg_var 
  %t124 = add i64 %t123, 16
  %t125 = inttoptr i64 %t124 to i64*
  store i64 %v42, i64* %t125 
  %t126 = load i64* %hp_reg_var 
  %v45 = add i64 %t126, 2
  %t128 = load i64* %hp_reg_var 
  %t127 = add i64 %t128, 24
  store i64 %t127, i64* %hp_reg_var 
  ; put_heap_pointer
  %v46 = select i1 true, i64 %v45, i64 undef
  br label %L8
L25:
  %nsp131 = load i64* %nsp_reg_var 
  %p130 = load i64* %p_reg_var 
  %hp129 = load i64* %hp_reg_var 
  %t132 = call cc 11  {i64, i64, i64, i64} @erlang.get_stacktrace.0() 
  %nsp135 = extractvalue {i64, i64, i64, i64} %t132, 2
  %p134 = extractvalue {i64, i64, i64, i64} %t132, 1
  %hp133 = extractvalue {i64, i64, i64, i64} %t132, 0
  store i64 %nsp135, i64* %nsp_reg_var 
  store i64 %p134, i64* %p_reg_var 
  store i64 %hp133, i64* %hp_reg_var 
  %v48 = extractvalue {i64, i64, i64, i64} %t132, 3
  ; get_heap_pointer
  ; get_heap_limit
  %t136 = load i64* %p_reg_var 
  %t137 = inttoptr i64 %t136 to i64*
  %t138 = getelementptr i64* %t137, i64 1
  %t139 = load i64* %t138 
  %t140 = load i64* %hp_reg_var 
  %r49 = sub i64 %t139, %t140
  %t141 = icmp slt i64 %r49, 24
  br i1 %t141, label %L43, label %L42
L43:
  %nsp145 = load i64* %nsp_reg_var 
  %p144 = load i64* %p_reg_var 
  %hp143 = load i64* %hp_reg_var 
  %t146 = call cc 11  {i64, i64, i64, i64} @gc_1..(i64 %hp143, i64 %p144, i64 %nsp145, i64 63) 
  %nsp149 = extractvalue {i64, i64, i64, i64} %t146, 2
  %p148 = extractvalue {i64, i64, i64, i64} %t146, 1
  %hp147 = extractvalue {i64, i64, i64, i64} %t146, 0
  store i64 %nsp149, i64* %nsp_reg_var 
  store i64 %p148, i64* %p_reg_var 
  store i64 %hp147, i64* %hp_reg_var 
  br label %L42
L42:
  ; get_heap_pointer
  %t150 = load i64* %hp_reg_var 
  %t151 = add i64 %t150, 0
  %t152 = inttoptr i64 %t151 to i64*
  store i64 128, i64* %t152 
  %t153 = load i64* %hp_reg_var 
  %t154 = add i64 %t153, 8
  %t155 = inttoptr i64 %t154 to i64*
  store i64 %v36, i64* %t155 
  %t156 = load i64* %hp_reg_var 
  %t157 = add i64 %t156, 16
  %t158 = inttoptr i64 %t157 to i64*
  store i64 %v48, i64* %t158 
  %t159 = load i64* %hp_reg_var 
  %v50 = add i64 %t159, 2
  %t161 = load i64* %hp_reg_var 
  %t160 = add i64 %t161, 24
  store i64 %t160, i64* %hp_reg_var 
  ; put_heap_pointer
  %v51 = select i1 true, i64 %v50, i64 undef
  br label %L26
}
@a = external constant i64 
@EXIT = external constant i64 
@exit = external constant i64 
@case_clause = external constant i64 
@throw = external constant i64 
@badarith = external constant i64 
@ok = external constant i64 
declare cc 11  {i64, i64, i64, i64} @erlang.get_stacktrace.0() 
declare cc 11  {i64, i64, i64, i64} @trivial_22.foo.1(i64, i64, i64, i64) 
declare cc 11  {i64, i64, i64, i64} @suspend_0..(i64, i64, i64) 
declare cc 11  {i64, i64, i64, i64} @erlang.error.1(i64, i64, i64, i64) 
declare cc 11  {i64, i64, i64, i64} @gc_1..(i64, i64, i64, i64) 
