define {i64*,i64**,i64*} @n5( i64* align 8 nocapture nofree nonnull %hp.0, i64** nocapture nofree nonnull %globasp.0, i64* align 8 nocapture nofree dereferenceable(3) %n) nofree willreturn nosync nounwind argmemonly align 8 prefix {i8*, i64} {i8* inttoptr (i64 0 to i8*), i64 0} { %astack = alloca i64*, i64 5 %asp.000 = getelementptr i64*, i64** %astack %bstack = alloca i64, i64 5 %bsp.000 = getelementptr i64, i64* %bstack, i64 4 %asp.001 = getelementptr i64*, i64** %asp.000, i64 1 store i64* %n, i64** %asp.001 %t.0 = bitcast {i64*,i64**,i64*}(i64*,i64**)* @_cycle_in_spine to i64* %asp.002 = call i64** @push_node(i64* %t.0, i64 0, i64** %asp.001) %t.1 = call {i64*,i64**,i64} @ea5(i64* %hp.0, i64** %globasp.0) %hp.1 = extractvalue {i64*,i64**,i64} %t.1, 0 %globasp.1 = extractvalue {i64*,i64**,i64} %t.1, 1 %t.2 = extractvalue {i64*,i64**,i64} %t.1, 2 %bsp.001 = call i64* @pushI(i64 %t.2, i64* %bsp.000) %asp.003 = call i64** @fillI_b(i64 0, i64 -0, i64* %bsp.001, i64** %asp.002) %bsp.002 = call i64* @pop_b1(i64* %bsp.001) %t.3 = call i64* @peek_a(i64** %asp.003) %asp.004 = call i64** @pop_a1(i64** %asp.003) %ret.0 = insertvalue {i64*,i64**,i64*} undef, i64* %hp.1, 0 %ret.1 = insertvalue {i64*,i64**,i64*} %ret.0, i64** %globasp.1, 1 %ret.2 = insertvalue {i64*,i64**,i64*} %ret.1, i64* %t.3, 2 ret {i64*,i64**,i64*} %ret.2 } define private {i64*,i64**,i64} @ea5( i64* align 8 nocapture nofree nonnull %hp.0, i64** align 8 noalias nocapture nofree nonnull %globasp.0) nofree willreturn nosync nounwind argmemonly { %ret.0 = tail call {i64*,i64**,i64} @s5(i64* %hp.0, i64** %globasp.0) ret {i64*,i64**,i64} %ret.0 } define private {i64*,i64**,i64} @s5( i64* align 8 nocapture nofree nonnull %hp.0, i64** align 8 noalias nocapture nofree nonnull %globasp.0) nofree willreturn nosync nounwind argmemonly { %astack = alloca i64*, i64 5 %asp.000 = getelementptr i64*, i64** %astack %bstack = alloca i64, i64 5 %bsp.000 = getelementptr i64, i64* %bstack, i64 4 %t.0 = call {i64**,i64*} @buildI(i64 34, i64** %asp.000, i64* %hp.0) %asp.001 = extractvalue {i64**,i64*} %t.0, 0 %hp.1 = extractvalue {i64**,i64*} %t.0, 1 %t.1 = call i64* @peek_a(i64** %asp.001) %asp.002 = call i64** @pop_a1(i64** %asp.001) %t.2 = tail call {i64*,i64**,i64} @s4(i64* %hp.1, i64** %globasp.0, i64* %t.1) ret {i64*,i64**,i64} %t.2 } define {i64*,i64**,i64} @s4( i64* align 8 nocapture nofree nonnull %hp.0, i64** align 8 noalias nocapture nofree nonnull %globasp.0, i64* align 8 nocapture nofree dereferenceable(3) %n) nofree willreturn nosync nounwind argmemonly { %astack = alloca i64*, i64 5 %asp.000 = getelementptr i64*, i64** %astack %bstack = alloca i64, i64 5 %bsp.000 = getelementptr i64, i64* %bstack, i64 4 %asp.001 = getelementptr i64*, i64** %asp.000, i64 1 store i64* %n, i64** %asp.001 %asp.002 = call i64** @push_a(i64 -0, i64** %asp.001) %j.0 = call {i64*,i64**} @jsr_eval(i64 -0, i64** %asp.002, i64** %asp.000, i64** %globasp.0, i64* %hp.0) %hp.1 = extractvalue {i64*,i64**} %j.0, 0 %globasp.1 = extractvalue {i64*,i64**} %j.0, 1 %bsp.001 = call i64* @pushI_a(i64 -1, i64* %bsp.000, i64** %asp.002) %asp.003 = call i64** @pop_a1(i64** %asp.002) %bsp.002 = call i64* @pushI(i64 2, i64* %bsp.001) %bsp.003 = call i64* @push_b(i64 1, i64* %bsp.002) %bsp.004 = call i64* @update_b(i64 1, i64 2, i64* %bsp.003) %bsp.005 = call i64* @update_b(i64 0, i64 1, i64* %bsp.004) %bsp.006 = call i64* @pop_b1(i64* %bsp.005) %bsp.007 = call i64* @ltI(i64* %bsp.006) %t.0 = call i64 @peek_b(i64* %bsp.007) %bsp.008 = call i64* @pop_b1(i64* %bsp.007) %t.1 = trunc i64 %t.0 to i1 br i1 %t.1, label %l.0, label %else.1 l.0: %asp.100 = call i64** @pop_a1(i64** %asp.003) %bsp.100 = call i64* @pushI(i64 1, i64* %bsp.008) %t.2 = call i64 @peek_b(i64* %bsp.100) %bsp.101 = call i64* @pop_b1(i64* %bsp.100) %ret.0 = insertvalue {i64*,i64**,i64} undef, i64* %hp.1, 0 %ret.1 = insertvalue {i64*,i64**,i64} %ret.0, i64** %globasp.1, 1 %ret.2 = insertvalue {i64*,i64**,i64} %ret.1, i64 %t.2, 2 ret {i64*,i64**,i64} %ret.2 else.1: %t.3 = call {i64**,i64*} @buildI(i64 1, i64** %asp.003, i64* %hp.1) %asp.200 = extractvalue {i64**,i64*} %t.3, 0 %hp.2 = extractvalue {i64**,i64*} %t.3, 1 %asp.201 = call i64** @push_a(i64 -1, i64** %asp.200) %t.4 = bitcast {i64*,i64**,i64*}(i64*,i64**,i64*)* @n2 to i64* %t.5 = call {i64**,i64*} @build(i64* %t.4, i64 2, i64** %asp.201, i64** %asp.000, i64** %globasp.1, i64* %hp.2) %asp.202 = extractvalue {i64**,i64*} %t.5, 0 %hp.3 = extractvalue {i64**,i64*} %t.5, 1 %t.6 = call i64* @peek_a(i64** %asp.202) %asp.203 = call i64** @pop_a1(i64** %asp.202) %t.7 = call {i64*,i64**,i64} @s4(i64* %hp.3, i64** %globasp.1, i64* %t.6) %hp.4 = extractvalue {i64*,i64**,i64} %t.7, 0 %globasp.2 = extractvalue {i64*,i64**,i64} %t.7, 1 %t.8 = extractvalue {i64*,i64**,i64} %t.7, 2 %bsp.200 = call i64* @pushI(i64 %t.8, i64* %bsp.008) %t.9 = call {i64**,i64*} @buildI(i64 2, i64** %asp.203, i64* %hp.4) %asp.204 = extractvalue {i64**,i64*} %t.9, 0 %hp.5 = extractvalue {i64**,i64*} %t.9, 1 %asp.205 = call i64** @push_a(i64 -1, i64** %asp.204) %t.10 = bitcast {i64*,i64**,i64*}(i64*,i64**,i64*)* @n2 to i64* %t.11 = call {i64**,i64*} @build(i64* %t.10, i64 2, i64** %asp.205, i64** %asp.000, i64** %globasp.2, i64* %hp.5) %asp.206 = extractvalue {i64**,i64*} %t.11, 0 %hp.6 = extractvalue {i64**,i64*} %t.11, 1 %t.12 = call i64* @peek_a(i64** %asp.206) %asp.207 = call i64** @pop_a1(i64** %asp.206) %t.13 = call {i64*,i64**,i64} @s4(i64* %hp.6, i64** %globasp.2, i64* %t.12) %hp.7 = extractvalue {i64*,i64**,i64} %t.13, 0 %globasp.3 = extractvalue {i64*,i64**,i64} %t.13, 1 %t.14 = extractvalue {i64*,i64**,i64} %t.13, 2 %bsp.201 = call i64* @pushI(i64 %t.14, i64* %bsp.200) %bsp.202 = call i64* @addI(i64* %bsp.201) %bsp.203 = call i64* @pushI(i64 1, i64* %bsp.202) %bsp.204 = call i64* @push_b(i64 1, i64* %bsp.203) %bsp.205 = call i64* @update_b(i64 1, i64 2, i64* %bsp.204) %bsp.206 = call i64* @update_b(i64 0, i64 1, i64* %bsp.205) %bsp.207 = call i64* @pop_b1(i64* %bsp.206) %bsp.208 = call i64* @addI(i64* %bsp.207) %t.15 = call i64 @peek_b(i64* %bsp.208) %bsp.209 = call i64* @pop_b1(i64* %bsp.208) %ret.3 = insertvalue {i64*,i64**,i64} undef, i64* %hp.7, 0 %ret.4 = insertvalue {i64*,i64**,i64} %ret.3, i64** %globasp.3, 1 %ret.5 = insertvalue {i64*,i64**,i64} %ret.4, i64 %t.15, 2 ret {i64*,i64**,i64} %ret.5 } define {i64*,i64**,i64*} @n2( i64* align 8 nocapture nofree nonnull %hp.0, i64** align 8 noalias nocapture nofree nonnull %globasp.0, i64* align 8 nocapture nofree dereferenceable(3) %n) nofree willreturn nosync nounwind argmemonly align 8 prefix {i8*, i64} {i8* inttoptr (i64 0 to i8*), i64 2} { %astack = alloca i64*, i64 5 %asp.000 = getelementptr i64*, i64** %astack %bstack = alloca i64, i64 5 %bsp.000 = getelementptr i64, i64* %bstack, i64 4 %asp.001 = getelementptr i64*, i64** %asp.000, i64 1 store i64* %n, i64** %asp.001 %t.0 = bitcast {i64*,i64**,i64*}(i64*,i64**)* @_cycle_in_spine to i64* %asp.002 = call i64** @push_node(i64* %t.0, i64 2, i64** %asp.001) %t.1 = call i64* @peek_a(i64** %asp.002) %asp.003 = call i64** @pop_a1(i64** %asp.002) %t.2 = call i64* @peek_a(i64** %asp.003) %asp.004 = call i64** @pop_a1(i64** %asp.003) %globasp.1 = call i64** @_push_local_astack(i64** %asp.004, i64** %asp.000, i64** %globasp.0) %t.3 = call {i64*,i64**,i64} @ea2(i64* %hp.0, i64** %globasp.1, i64* %t.1, i64* %t.2) %hp.1 = extractvalue {i64*,i64**,i64} %t.3, 0 %globasp.2 = extractvalue {i64*,i64**,i64} %t.3, 1 %t.4 = extractvalue {i64*,i64**,i64} %t.3, 2 %globasp.3 = call i64** @_pop_global_astack(i64** %asp.004, i64** %asp.000, i64** %globasp.2) %bsp.001 = call i64* @pushI(i64 %t.4, i64* %bsp.000) %asp.005 = call i64** @fillI_b(i64 0, i64 -0, i64* %bsp.001, i64** %asp.004) %bsp.002 = call i64* @pop_b1(i64* %bsp.001) %t.5 = call i64* @peek_a(i64** %asp.005) %asp.006 = call i64** @pop_a1(i64** %asp.005) %ret.0 = insertvalue {i64*,i64**,i64*} undef, i64* %hp.0, 0 %ret.1 = insertvalue {i64*,i64**,i64*} %ret.0, i64** %globasp.3, 1 %ret.2 = insertvalue {i64*,i64**,i64*} %ret.1, i64* %t.5, 2 ret {i64*,i64**,i64*} %ret.2 } define private {i64*,i64**,i64} @ea2( i64* align 8 nocapture nofree nonnull %hp.0, i64** align 8 noalias nocapture nofree nonnull %globasp.0, i64* align 8 nofree nonnull %arg1, i64* align 8 nofree nonnull %arg2) nofree willreturn nosync nounwind argmemonly { %astack = alloca i64*, i64 5 %asp.000 = getelementptr i64*, i64** %astack %bstack = alloca i64, i64 5 %bsp.000 = getelementptr i64, i64* %bstack, i64 4 %asp.001 = getelementptr i64*, i64** %asp.000, i64 1 store i64* %arg2, i64** %asp.001 %asp.002 = getelementptr i64*, i64** %asp.001, i64 1 store i64* %arg1, i64** %asp.002 %j.0 = call {i64*,i64**} @jsr_eval(i64 -1, i64** %asp.002, i64** %asp.000, i64** %globasp.0, i64* %hp.0) %hp.1 = extractvalue {i64*,i64**} %j.0, 0 %globasp.1 = extractvalue {i64*,i64**} %j.0, 1 %j.1 = call {i64*,i64**} @jsr_eval(i64 -0, i64** %asp.002, i64** %asp.000, i64** %globasp.1, i64* %hp.1) %hp.2 = extractvalue {i64*,i64**} %j.1, 0 %globasp.2 = extractvalue {i64*,i64**} %j.1, 1 %bsp.001 = call i64* @pushI_a(i64 -1, i64* %bsp.000, i64** %asp.002) %bsp.002 = call i64* @pushI_a(i64 -0, i64* %bsp.001, i64** %asp.002) %asp.003 = call i64** @pop_a1(i64** %asp.002) %asp.004 = call i64** @pop_a1(i64** %asp.003) %t.0 = call i64 @peek_b(i64* %bsp.002) %bsp.003 = call i64* @pop_b1(i64* %bsp.002) %t.1 = call i64 @peek_b(i64* %bsp.003) %bsp.004 = call i64* @pop_b1(i64* %bsp.003) %ret = tail call {i64*,i64**,i64} @s2(i64* %hp.2, i64** %globasp.2, i64 %t.0, i64 %t.1) ret {i64*,i64**,i64} %ret } define private {i64*,i64**,i64} @s2( i64* align 8 nocapture nofree nonnull %hp.0, i64** align 8 noalias nocapture nofree nonnull %globasp.0, i64 inreg %arg1, i64 inreg %arg2) nofree willreturn nosync nounwind argmemonly { %astack = alloca i64*, i64 5 %asp.000 = getelementptr i64*, i64** %astack %bstack = alloca i64, i64 5 %bsp.000 = getelementptr i64, i64* %bstack, i64 4 %bsp.001 = call i64* @pushI(i64 %arg2, i64* %bsp.000) %bsp.002 = call i64* @pushI(i64 %arg1, i64* %bsp.001) %bsp.003 = call i64* @subI(i64* %bsp.002) %t.0 = call i64 @peek_b(i64* %bsp.003) %bsp.004 = call i64* @pop_b1(i64* %bsp.003) %ret.0 = insertvalue {i64*,i64**,i64} undef, i64* %hp.0, 0 %ret.1 = insertvalue {i64*,i64**,i64} %ret.0, i64** %globasp.0, 1 %ret.2 = insertvalue {i64*,i64**,i64} %ret.1, i64 %t.0, 2 ret {i64*,i64**,i64} %ret.2 } define i64 @main() { %hp.0 = call i64* @_alloc_heap(i64 100000000) %asp.0 = call i64** @_alloc_a_stack(i64 10000) %n.0 = getelementptr i64, i64* %hp.0 store i64 ptrtoint ({i64*,i64**,i64*}(i64*,i64**,i64*)* @n5 to i64), i64* %n.0 %hp.1 = getelementptr i64, i64* %hp.0, i64 3 %t.0 = call {i64*,i64**,i64*} @n5(i64* %hp.1, i64** %asp.0, i64* %n.0) %hp.2 = extractvalue {i64*,i64**,i64*} %t.0, 0 %asp.1 = extractvalue {i64*,i64**,i64*} %t.0, 1 %n.1 = extractvalue {i64*,i64**,i64*} %t.0, 2 %n.1.0 = getelementptr i64, i64* %n.1, i64 1 %r = load i64, i64* %n.1.0 call i64 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @printf_d, i64 0, i64 0), i64 %r) call i64 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @printf_c, i64 0, i64 0), i64 10) ret i64 0 }