declare  void @llvm.gcroot(i8**, i8*) 
define {i64, i64, i64} @bs15.gen2.3(i64 %hp_in, i64 %p_in, i64 %v19, i64 %v20, i64 %v21) nounwind noredzone {
Entry:
  %exception_sync = alloca double
  %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 
  %root21 = alloca i64
  %root20 = alloca i64
  %root19 = alloca i64
  %root91 = alloca i64
  %root88 = alloca i64
  %root85 = alloca i64
  %root62 = alloca i64
  %root61 = alloca i64
  %root56 = alloca i64
  %root50 = alloca i64
  %root40 = alloca i64
  %root39 = alloca i64
  %root35 = alloca i64
  %root32 = alloca i64
  %root29 = alloca i64
  %root27 = alloca i64
  %root24 = alloca i64
  %badarg_var = ptrtoint i64* @badarg to i64
  %system_limit_var = ptrtoint i64* @system_limit to i64
  store i64 %v19, i64* %root19 
  store i64 %v20, i64* %root20 
  store i64 %v21, i64* %root21 
  br label %L1
L73:
  br label %L1
L1:
  %t17 = load i64* %root19 
  %t18 = load i64* %root20 
  %r22 = and i64 %t17, %t18
  %r23 = and i64 %r22, 15
  %t19 = icmp eq i64 %r23, 15
  br i1 %t19, label %L4, label %L3
L4:
  %t20 = load i64* %root20 
  %r90 = sub i64 %t20, 15
  %t21 = load i64* %root19 
  %t23 = call   {i64, i1} @llvm.ssub.with.overflow.i64(i64 %t21, i64 %r90) 
  %t22 = extractvalue {i64, i1} %t23, 0
  store i64 %t22, i64* %root91 
  %t24 = extractvalue {i64, i1} %t23, 1
  br i1 %t24, label %L3, label %L2
L2:
  %root25 = phi i64*[ %root91, %L4 ], [ %root24, %L3 ]
  %t25 = load i64* %root25 
  %r26 = and i64 %t25, 15
  %t26 = icmp eq i64 %r26, 15
  br i1 %t26, label %L10, label %L8
L10:
  %t27 = load i64* %root25 
  %t28 = icmp sge i64 %t27, 15
  br i1 %t28, label %L6, label %L7
L6:
  %t29 = load i64* %root25 
  %r28 = and i64 %t29, 15
  %t30 = icmp eq i64 %r28, 15
  br i1 %t30, label %L13, label %L12
L13:
  %r87 = sub i64 15, 15
  %t31 = load i64* %root25 
  %t33 = call   {i64, i1} @llvm.sadd.with.overflow.i64(i64 %t31, i64 %r87) 
  %t32 = extractvalue {i64, i1} %t33, 0
  store i64 %t32, i64* %root88 
  %t34 = extractvalue {i64, i1} %t33, 1
  br i1 %t34, label %L12, label %L11
L11:
  %root30 = phi i64*[ %root88, %L13 ], [ %root29, %L12 ]
  %t35 = load i64* %root20 
  %r31 = and i64 %t35, 15
  %t36 = icmp eq i64 %r31, 15
  br i1 %t36, label %L19, label %L17
L19:
  %t37 = load i64* %root20 
  %t38 = icmp sge i64 %t37, 15
  br i1 %t38, label %L15, label %L16
L15:
  %t39 = load i64* %root20 
  %t40 = load i64* %root30 
  %r33 = and i64 %t39, %t40
  %r34 = and i64 %r33, 15
  %t41 = icmp eq i64 %r34, 15
  br i1 %t41, label %L22, label %L21
L22:
  %t42 = load i64* %root30 
  %r84 = sub i64 %t42, 15
  %t43 = load i64* %root20 
  %t45 = call   {i64, i1} @llvm.sadd.with.overflow.i64(i64 %t43, i64 %r84) 
  %t44 = extractvalue {i64, i1} %t45, 0
  store i64 %t44, i64* %root85 
  %t46 = extractvalue {i64, i1} %t45, 1
  br i1 %t46, label %L21, label %L20
L20:
  %root36 = phi i64*[ %root85, %L22 ], [ %root35, %L21 ]
  ; get_heap_pointer
  ; get_heap_limit
  %t47 = load i64* %p_reg_var 
  %t48 = inttoptr i64 %t47 to i64*
  %t49 = getelementptr i64* %t48, i64 1
  %t50 = load i64* %t49 
  %t51 = load i64* %hp_reg_var 
  %r37 = sub i64 %t50, %t51
  %t52 = icmp slt i64 %r37, 128
  br i1 %t52, label %L72, label %L71
L72:
  %p55 = load i64* %p_reg_var 
  %hp54 = load i64* %hp_reg_var 
  %t56 = call    {i64, i64, i64} @gc_1(i64 %hp54, i64 %p55, i64 271) 
  %p58 = extractvalue {i64, i64, i64} %t56, 1
  %hp57 = extractvalue {i64, i64, i64} %t56, 0
  store i64 %p58, i64* %p_reg_var 
  store i64 %hp57, i64* %hp_reg_var 
  br label %L71
L71:
  %t59 = load i64* %root36 
  %r38 = and i64 %t59, 15
  %t60 = icmp eq i64 %r38, 15
  br i1 %t60, label %L39, label %L40
L39:
  %t61 = load i64* %root36 
  store i64 -5, i64* %root36 
  %r78 = ashr i64 %t61, 4
  %t62 = icmp sge i64 %r78, 0
  br i1 %t62, label %L41, label %L25
L41:
  %r41 = phi i64[ %r83, %L44 ], [ %r78, %L39 ]
  %r42 = lshr i64 %r41, 3
  %r43 = and i64 %r41, 7
  %t63 = icmp eq i64 %r43, 0
  br i1 %t63, label %L32, label %L33
L32:
  %r76 = select i1 true, i64 %r42, i64 undef
  br label %L37
L37:
  %r44 = phi i64[ %r77, %L33 ], [ %r76, %L32 ]
  %t64 = icmp sle i64 %r41, 2305843009213693951
  br i1 %t64, label %L34, label %L27
L34:
  %t65 = icmp sle i64 %r44, 64
  br i1 %t65, label %L29, label %L30
L29:
  ; get_heap_pointer
  %r63 = add i64 %r44, 7
  %r64 = ashr i64 %r63, 3
  %r65 = add i64 %r64, 1
  %t66 = load i64* %hp_reg_var 
  %r66 = add i64 %t66, 16
  %r67 = shl i64 %r65, 6
  %r68 = add i64 %r67, 36
  %t67 = load i64* %hp_reg_var 
  %t68 = add i64 %t67, 0
  %t69 = inttoptr i64 %t68 to i64*
  store i64 %r68, i64* %t69 
  %t70 = load i64* %hp_reg_var 
  %t71 = add i64 %t70, 8
  %t72 = inttoptr i64 %t71 to i64*
  store i64 %r44, i64* %t72 
  %t73 = load i64* %hp_reg_var 
  %r69 = add i64 %t73, 2
  %t74 = load i64* %hp_reg_var 
  %r70 = add i64 %t74, %r44
  %r71 = add i64 %r70, 23
  %t75 = and i64 %r71, -8
  store i64 %t75, i64* %hp_reg_var 
  ; put_heap_pointer
  br label %L38
L38:
  %r45 = phi i64[ %r73, %L30 ], [ %r69, %L29 ]
  %r46 = phi i64[ %r72, %L30 ], [ %r66, %L29 ]
  %r47 = select i1 true, i64 0, i64 undef
  %t76 = icmp eq i64 %r43, 0
  br i1 %t76, label %L35, label %L36
L35:
  %t77 = select i1 true, i64 %r45, i64 undef
  store i64 %t77, i64* %root61 
  br label %L24
L24:
  %root48 = phi i64*[ %root62, %L36 ], [ %root61, %L35 ]
  %t78 = load i64* %root20 
  %r49 = and i64 %t78, 15
  %t79 = icmp eq i64 %r49, 15
  br i1 %t79, label %L50, label %L46
L50:
  %t80 = load i64* %root20 
  %t81 = icmp sge i64 %t80, 15
  br i1 %t81, label %L51, label %L46
L51:
  %t82 = load i64* %root20 
  store i64 -5, i64* %root20 
  %r51 = ashr i64 %t82, 4
  %r52 = select i1 true, i64 2, i64 undef
  %t83 = load i64* %root21 
  %p85 = load i64* %p_reg_var 
  %hp84 = load i64* %hp_reg_var 
  %t86 = call    {i64, i64, i64} @bs_put_big_integer(i64 %hp84, i64 %p85, i64 %t83, i64 %r51, i64 %r46, i64 %r47, i64 %r52) 
  %p88 = extractvalue {i64, i64, i64} %t86, 1
  %hp87 = extractvalue {i64, i64, i64} %t86, 0
  store i64 %p88, i64* %p_reg_var 
  store i64 %hp87, i64* %hp_reg_var 
  %r53 = extractvalue {i64, i64, i64} %t86, 2
  %t89 = icmp eq i64 %r53, 0
  br i1 %t89, label %L46, label %L52
L46:
  %t90 = select i1 true, i64 %badarg_var, i64 undef
  store i64 %t90, i64* %root50 
  %t92 = load i64* %root50 
  store i64 -5, i64* %root50 
  %p94 = load i64* %p_reg_var 
  %hp93 = load i64* %hp_reg_var 
  %t95 = call    {i64, i64, i64} @erlang.error.1(i64 %hp93, i64 %p94, i64 %t92) 
  %p97 = extractvalue {i64, i64, i64} %t95, 1
  %hp96 = extractvalue {i64, i64, i64} %t95, 0
  store i64 %p97, i64* %p_reg_var 
  store i64 %hp96, i64* %hp_reg_var 
  %p99 = load i64* %p_reg_var 
  %hp98 = load i64* %hp_reg_var 
  %t100 = insertvalue {i64, i64, i64} undef, i64 %hp98, 0
  %t101 = insertvalue {i64, i64, i64} %t100, i64 %p99, 1
  %t102 = insertvalue {i64, i64, i64} %t101, i64 15, 2
  ret {i64, i64, i64} %t102
L52:
  %r54 = add i64 %r47, %r51
  %t103 = load i64* %root25 
  %r55 = and i64 %t103, 15
  %t104 = icmp eq i64 %r55, 15
  br i1 %t104, label %L61, label %L57
L61:
  %t105 = load i64* %root25 
  %t106 = icmp sge i64 %t105, 15
  br i1 %t106, label %L62, label %L57
L62:
  %t107 = load i64* %root25 
  store i64 -5, i64* %root25 
  %r57 = ashr i64 %t107, 4
  %r58 = select i1 true, i64 2, i64 undef
  %t108 = load i64* %root21 
  store i64 -5, i64* %root21 
  %p110 = load i64* %p_reg_var 
  %hp109 = load i64* %hp_reg_var 
  %t111 = call    {i64, i64, i64} @bs_put_big_integer(i64 %hp109, i64 %p110, i64 %t108, i64 %r57, i64 %r46, i64 %r54, i64 %r58) 
  %p113 = extractvalue {i64, i64, i64} %t111, 1
  %hp112 = extractvalue {i64, i64, i64} %t111, 0
  store i64 %p113, i64* %p_reg_var 
  store i64 %hp112, i64* %hp_reg_var 
  %r59 = extractvalue {i64, i64, i64} %t111, 2
  %t114 = icmp eq i64 %r59, 0
  br i1 %t114, label %L57, label %L63
L57:
  %t115 = select i1 true, i64 %badarg_var, i64 undef
  store i64 %t115, i64* %root56 
  %t117 = load i64* %root56 
  store i64 -5, i64* %root56 
  %p119 = load i64* %p_reg_var 
  %hp118 = load i64* %hp_reg_var 
  %t120 = call    {i64, i64, i64} @erlang.error.1(i64 %hp118, i64 %p119, i64 %t117) 
  %p122 = extractvalue {i64, i64, i64} %t120, 1
  %hp121 = extractvalue {i64, i64, i64} %t120, 0
  store i64 %p122, i64* %p_reg_var 
  store i64 %hp121, i64* %hp_reg_var 
  %p124 = load i64* %p_reg_var 
  %hp123 = load i64* %hp_reg_var 
  %t125 = insertvalue {i64, i64, i64} undef, i64 %hp123, 0
  %t126 = insertvalue {i64, i64, i64} %t125, i64 %p124, 1
  %t127 = insertvalue {i64, i64, i64} %t126, i64 15, 2
  ret {i64, i64, i64} %t127
L63:
  %t128 = load i64* %root48 
  store i64 -5, i64* %root48 
  %p130 = load i64* %p_reg_var 
  %hp129 = load i64* %hp_reg_var 
  %t131 = insertvalue {i64, i64, i64} undef, i64 %hp129, 0
  %t132 = insertvalue {i64, i64, i64} %t131, i64 %p130, 1
  %t133 = insertvalue {i64, i64, i64} %t132, i64 %t128, 2
  ret {i64, i64, i64} %t133
L36:
  ; get_heap_pointer
  %t135 = load i64* %hp_reg_var 
  %t134 = add i64 %t135, 2
  store i64 %t134, i64* %root62 
  %t136 = load i64* %root62 
  %t137 = add i64 %t136, -2
  %t138 = inttoptr i64 %t137 to i64*
  store i64 232, i64* %t138 
  %t139 = load i64* %root62 
  %t140 = add i64 %t139, 6
  %t141 = inttoptr i64 %t140 to i64*
  store i64 %r42, i64* %t141 
  %t142 = load i64* %root62 
  %t143 = add i64 %t142, 14
  %t144 = inttoptr i64 %t143 to i64*
  store i64 0, i64* %t144 
  %t145 = load i64* %root62 
  %t146 = add i64 %t145, 22
  %t147 = inttoptr i64 %t146 to i8*
  %t148 = trunc i64 %r43 to i8
  store i8 %t148, i8* %t147 
  %t149 = load i64* %root62 
  %t150 = add i64 %t149, 23
  %t151 = inttoptr i64 %t150 to i8*
  %t152 = trunc i64 0 to i8
  store i8 %t152, i8* %t151 
  %t153 = load i64* %root62 
  %t154 = add i64 %t153, 24
  %t155 = inttoptr i64 %t154 to i8*
  %t156 = trunc i64 0 to i8
  store i8 %t156, i8* %t155 
  %t157 = load i64* %root62 
  %t158 = add i64 %t157, 30
  %t159 = inttoptr i64 %t158 to i64*
  store i64 %r45, i64* %t159 
  %t161 = load i64* %hp_reg_var 
  %t160 = add i64 %t161, 40
  store i64 %t160, i64* %hp_reg_var 
  ; put_heap_pointer
  br label %L24
L30:
  %p163 = load i64* %p_reg_var 
  %hp162 = load i64* %hp_reg_var 
  %t164 = call    {i64, i64, i64} @bs_allocate(i64 %hp162, i64 %p163, i64 %r44) 
  %p166 = extractvalue {i64, i64, i64} %t164, 1
  %hp165 = extractvalue {i64, i64, i64} %t164, 0
  store i64 %p166, i64* %p_reg_var 
  store i64 %hp165, i64* %hp_reg_var 
  %r72 = extractvalue {i64, i64, i64} %t164, 2
  ; get_heap_pointer
  %t167 = load i64* %hp_reg_var 
  %r73 = add i64 %t167, 2
  %t168 = load i64* %hp_reg_var 
  %t169 = add i64 %t168, 0
  %t170 = inttoptr i64 %t169 to i64*
  store i64 352, i64* %t170 
  %t171 = load i64* %hp_reg_var 
  %t172 = add i64 %t171, 8
  %t173 = inttoptr i64 %t172 to i64*
  store i64 %r44, i64* %t173 
  %t174 = load i64* %p_reg_var 
  %t175 = add i64 %t174, 584
  %t176 = inttoptr i64 %t175 to i64*
  %r74 = load i64* %t176 
  %t177 = load i64* %hp_reg_var 
  %t178 = add i64 %t177, 16
  %t179 = inttoptr i64 %t178 to i64*
  store i64 %r74, i64* %t179 
  %t180 = load i64* %p_reg_var 
  %t181 = load i64* %hp_reg_var 
  %t182 = add i64 %t180, 584
  %t183 = inttoptr i64 %t182 to i64*
  store i64 %t181, i64* %t183 
  %r75 = sub i64 %r72, 24
  %t184 = load i64* %hp_reg_var 
  %t185 = add i64 %t184, 24
  %t186 = inttoptr i64 %t185 to i64*
  store i64 %r75, i64* %t186 
  %t187 = load i64* %hp_reg_var 
  %t188 = add i64 %t187, 32
  %t189 = inttoptr i64 %t188 to i64*
  store i64 %r72, i64* %t189 
  %t190 = load i64* %hp_reg_var 
  %t191 = add i64 %t190, 40
  %t192 = inttoptr i64 %t191 to i64*
  store i64 0, i64* %t192 
  %t194 = load i64* %hp_reg_var 
  %t193 = add i64 %t194, 48
  store i64 %t193, i64* %hp_reg_var 
  ; put_heap_pointer
  br label %L38
L27:
  %t195 = select i1 true, i64 %system_limit_var, i64 undef
  store i64 %t195, i64* %root40 
  %t197 = load i64* %root40 
  store i64 -5, i64* %root40 
  %p199 = load i64* %p_reg_var 
  %hp198 = load i64* %hp_reg_var 
  %t200 = call    {i64, i64, i64} @erlang.error.1(i64 %hp198, i64 %p199, i64 %t197) 
  %p202 = extractvalue {i64, i64, i64} %t200, 1
  %hp201 = extractvalue {i64, i64, i64} %t200, 0
  store i64 %p202, i64* %p_reg_var 
  store i64 %hp201, i64* %hp_reg_var 
  %p204 = load i64* %p_reg_var 
  %hp203 = load i64* %hp_reg_var 
  %t205 = insertvalue {i64, i64, i64} undef, i64 %hp203, 0
  %t206 = insertvalue {i64, i64, i64} %t205, i64 %p204, 1
  %t207 = insertvalue {i64, i64, i64} %t206, i64 15, 2
  ret {i64, i64, i64} %t207
L33:
  %r77 = add i64 %r42, 1
  br label %L37
L25:
  %t208 = select i1 true, i64 %badarg_var, i64 undef
  store i64 %t208, i64* %root39 
  %t210 = load i64* %root39 
  store i64 -5, i64* %root39 
  %p212 = load i64* %p_reg_var 
  %hp211 = load i64* %hp_reg_var 
  %t213 = call    {i64, i64, i64} @erlang.error.1(i64 %hp211, i64 %p212, i64 %t210) 
  %p215 = extractvalue {i64, i64, i64} %t213, 1
  %hp214 = extractvalue {i64, i64, i64} %t213, 0
  store i64 %p215, i64* %p_reg_var 
  store i64 %hp214, i64* %hp_reg_var 
  %p217 = load i64* %p_reg_var 
  %hp216 = load i64* %hp_reg_var 
  %t218 = insertvalue {i64, i64, i64} undef, i64 %hp216, 0
  %t219 = insertvalue {i64, i64, i64} %t218, i64 %p217, 1
  %t220 = insertvalue {i64, i64, i64} %t219, i64 15, 2
  ret {i64, i64, i64} %t220
L40:
  %t221 = load i64* %root36 
  %r79 = and i64 %t221, 1
  %t222 = icmp eq i64 %r79, 0
  br i1 %t222, label %L43, label %L25
L43:
  %t223 = load i64* %root36 
  %t224 = add i64 %t223, -2
  %t225 = inttoptr i64 %t224 to i64*
  %r80 = load i64* %t225 
  %r81 = and i64 %r80, 63
  %t226 = icmp eq i64 %r81, 8
  br i1 %t226, label %L42, label %L25
L42:
  %t227 = load i64* %root36 
  %t228 = add i64 %t227, -2
  %t229 = inttoptr i64 %t228 to i64*
  %r82 = load i64* %t229 
  %t230 = icmp eq i64 %r82, 72
  br i1 %t230, label %L44, label %L27
L44:
  %t231 = load i64* %root36 
  store i64 -5, i64* %root36 
  %t232 = add i64 %t231, 6
  %t233 = inttoptr i64 %t232 to i64*
  %r83 = load i64* %t233 
  br label %L41
L21:
  %t235 = load i64* %root20 
  %t236 = load i64* %root30 
  store i64 -5, i64* %root30 
  %p238 = load i64* %p_reg_var 
  %hp237 = load i64* %hp_reg_var 
  %t239 = call    {i64, i64, i64} @bif_add(i64 %hp237, i64 %p238, i64 %t235, i64 %t236) 
  %p241 = extractvalue {i64, i64, i64} %t239, 1
  %hp240 = extractvalue {i64, i64, i64} %t239, 0
  store i64 %p241, i64* %p_reg_var 
  store i64 %hp240, i64* %hp_reg_var 
  %t234 = extractvalue {i64, i64, i64} %t239, 2
  store i64 %t234, i64* %root35 
  br label %L20
L16:
  %t242 = select i1 true, i64 %badarg_var, i64 undef
  store i64 %t242, i64* %root32 
  %t244 = load i64* %root32 
  store i64 -5, i64* %root32 
  %p246 = load i64* %p_reg_var 
  %hp245 = load i64* %hp_reg_var 
  %t247 = call    {i64, i64, i64} @erlang.error.1(i64 %hp245, i64 %p246, i64 %t244) 
  %p249 = extractvalue {i64, i64, i64} %t247, 1
  %hp248 = extractvalue {i64, i64, i64} %t247, 0
  store i64 %p249, i64* %p_reg_var 
  store i64 %hp248, i64* %hp_reg_var 
  %p251 = load i64* %p_reg_var 
  %hp250 = load i64* %hp_reg_var 
  %t252 = insertvalue {i64, i64, i64} undef, i64 %hp250, 0
  %t253 = insertvalue {i64, i64, i64} %t252, i64 %p251, 1
  %t254 = insertvalue {i64, i64, i64} %t253, i64 15, 2
  ret {i64, i64, i64} %t254
L17:
  %t255 = load i64* %root20 
  %p257 = load i64* %p_reg_var 
  %hp256 = load i64* %hp_reg_var 
  %t258 = call    {i64, i64, i64} @cmp_2(i64 %hp256, i64 %p257, i64 %t255, i64 15) 
  %p260 = extractvalue {i64, i64, i64} %t258, 1
  %hp259 = extractvalue {i64, i64, i64} %t258, 0
  store i64 %p260, i64* %p_reg_var 
  store i64 %hp259, i64* %hp_reg_var 
  %r86 = extractvalue {i64, i64, i64} %t258, 2
  %t261 = icmp sge i64 %r86, 0
  br i1 %t261, label %L15, label %L16
L12:
  %t263 = load i64* %root25 
  %p265 = load i64* %p_reg_var 
  %hp264 = load i64* %hp_reg_var 
  %t266 = call    {i64, i64, i64} @bif_add(i64 %hp264, i64 %p265, i64 %t263, i64 15) 
  %p268 = extractvalue {i64, i64, i64} %t266, 1
  %hp267 = extractvalue {i64, i64, i64} %t266, 0
  store i64 %p268, i64* %p_reg_var 
  store i64 %hp267, i64* %hp_reg_var 
  %t262 = extractvalue {i64, i64, i64} %t266, 2
  store i64 %t262, i64* %root29 
  br label %L11
L7:
  %t269 = select i1 true, i64 %badarg_var, i64 undef
  store i64 %t269, i64* %root27 
  %t271 = load i64* %root27 
  store i64 -5, i64* %root27 
  %p273 = load i64* %p_reg_var 
  %hp272 = load i64* %hp_reg_var 
  %t274 = call    {i64, i64, i64} @erlang.error.1(i64 %hp272, i64 %p273, i64 %t271) 
  %p276 = extractvalue {i64, i64, i64} %t274, 1
  %hp275 = extractvalue {i64, i64, i64} %t274, 0
  store i64 %p276, i64* %p_reg_var 
  store i64 %hp275, i64* %hp_reg_var 
  %p278 = load i64* %p_reg_var 
  %hp277 = load i64* %hp_reg_var 
  %t279 = insertvalue {i64, i64, i64} undef, i64 %hp277, 0
  %t280 = insertvalue {i64, i64, i64} %t279, i64 %p278, 1
  %t281 = insertvalue {i64, i64, i64} %t280, i64 15, 2
  ret {i64, i64, i64} %t281
L8:
  %t282 = load i64* %root25 
  %p284 = load i64* %p_reg_var 
  %hp283 = load i64* %hp_reg_var 
  %t285 = call    {i64, i64, i64} @cmp_2(i64 %hp283, i64 %p284, i64 %t282, i64 15) 
  %p287 = extractvalue {i64, i64, i64} %t285, 1
  %hp286 = extractvalue {i64, i64, i64} %t285, 0
  store i64 %p287, i64* %p_reg_var 
  store i64 %hp286, i64* %hp_reg_var 
  %r89 = extractvalue {i64, i64, i64} %t285, 2
  %t288 = icmp sge i64 %r89, 0
  br i1 %t288, label %L6, label %L7
L3:
  %t290 = load i64* %root19 
  store i64 -5, i64* %root19 
  %t291 = load i64* %root20 
  %p293 = load i64* %p_reg_var 
  %hp292 = load i64* %hp_reg_var 
  %t294 = call    {i64, i64, i64} @bif_sub(i64 %hp292, i64 %p293, i64 %t290, i64 %t291) 
  %p296 = extractvalue {i64, i64, i64} %t294, 1
  %hp295 = extractvalue {i64, i64, i64} %t294, 0
  store i64 %p296, i64* %p_reg_var 
  store i64 %hp295, i64* %hp_reg_var 
  %t289 = extractvalue {i64, i64, i64} %t294, 2
  store i64 %t289, i64* %root24 
  br label %L2
}
@badarg = external constant i64 
@system_limit = external constant i64 
declare    {i64, i1} @llvm.ssub.with.overflow.i64(i64, i64) 
declare    {i64, i64, i64} @bs_allocate(i64, i64, i64) 
declare    {i64, i64, i64} @cmp_2(i64, i64, i64, i64) 
declare    {i64, i64, i64} @gc_1(i64, i64, i64) 
declare    {i64, i64, i64} @erlang.error.1(i64, i64, i64) 
declare    {i64, i64, i64} @bs_put_big_integer(i64, i64, i64, i64, i64, i64, i64) 
declare    {i64, i64, i64} @bif_add(i64, i64, i64, i64) 
declare    {i64, i1} @llvm.sadd.with.overflow.i64(i64, i64) 
declare    {i64, i64, i64} @bif_sub(i64, i64, i64, i64) 
