diff options
Diffstat (limited to 'fib_eqI_b.ll')
-rw-r--r-- | fib_eqI_b.ll | 107 |
1 files changed, 58 insertions, 49 deletions
diff --git a/fib_eqI_b.ll b/fib_eqI_b.ll index a6a684b..fbc1811 100644 --- a/fib_eqI_b.ll +++ b/fib_eqI_b.ll @@ -1,4 +1,4 @@ -define {i64*,i64**,i64*} @e_fib_eqI_b_nfib(i64* %hp.0, i64** %globasp.0, i64* %n) align 8 +define cc101 {%Hp,i64**,i64*} @e_fib_eqI_b_nfib(%Hp %hp.0, i64** %globasp.0, i64* %n) align 8 prefix {i8*, i64} {i8* inttoptr (i64 0 to i8*), i64 1} { %astack = alloca i64*, i64 10 %asp.000 = getelementptr i64*, i64** %astack @@ -14,10 +14,10 @@ define {i64*,i64**,i64*} @e_fib_eqI_b_nfib(i64* %hp.0, i64** %globasp.0, i64* %n %t.1 = call i64* @peek_a(i64** %asp.002) %asp.003 = call i64** @pop_a1(i64** %asp.002) %globasp.1 = call i64** @_push_local_astack(i64** %asp.003, i64** %asp.000, i64** %globasp.0) - %t.2 = call {i64*,i64**,i64} @ea1(i64* %hp.0, i64** %globasp.1, i64* %t.1) - %hp.1 = extractvalue {i64*,i64**,i64} %t.2, 0 - %globasp.2 = extractvalue {i64*,i64**,i64} %t.2, 1 - %t.2.0 = extractvalue {i64*,i64**,i64} %t.2, 2 + %t.2 = call cc101 {%Hp,i64**,i64} @ea1(%Hp %hp.0, i64** %globasp.1, i64* %t.1) + %hp.1 = extractvalue {%Hp,i64**,i64} %t.2, 0 + %globasp.2 = extractvalue {%Hp,i64**,i64} %t.2, 1 + %t.2.0 = extractvalue {%Hp,i64**,i64} %t.2, 2 %globasp.3 = call i64** @_pop_global_astack(i64** %asp.003, i64** %asp.000, i64** %globasp.2) %bsp.001 = call i64* @pushI(i64 %t.2.0, i64* %bsp.000) @@ -27,13 +27,13 @@ define {i64*,i64**,i64*} @e_fib_eqI_b_nfib(i64* %hp.0, i64** %globasp.0, i64* %n %t.3 = call i64* @peek_a(i64** %asp.004) %asp.005 = call i64** @pop_a1(i64** %asp.004) - %ret.0 = insertvalue {i64*,i64**,i64*} undef, i64* %hp.1, 0 - %ret.1 = insertvalue {i64*,i64**,i64*} %ret.0, i64** %globasp.3, 1 - %ret.2 = insertvalue {i64*,i64**,i64*} %ret.1, i64* %t.3, 2 - ret {i64*,i64**,i64*} %ret.2 + %ret.0 = insertvalue {%Hp,i64**,i64*} undef, %Hp %hp.1, 0 + %ret.1 = insertvalue {%Hp,i64**,i64*} %ret.0, i64** %globasp.3, 1 + %ret.2 = insertvalue {%Hp,i64**,i64*} %ret.1, i64* %t.3, 2 + ret {%Hp,i64**,i64*} %ret.2 } -define private {i64*,i64**,i64} @ea1(i64* %hp.0, i64** %globasp.0, i64* %n) { +define private cc101 {%Hp,i64**,i64} @ea1(%Hp %hp.0, i64** %globasp.0, i64* %n) { %astack = alloca i64*, i64 10 %asp.000 = getelementptr i64*, i64** %astack, i64 0 %bstack = alloca i64, i64 10 @@ -42,26 +42,26 @@ define private {i64*,i64**,i64} @ea1(i64* %hp.0, i64** %globasp.0, i64* %n) { %asp.001 = getelementptr i64*, i64** %asp.000, i64 1 store i64* %n, i64** %asp.001 - %j.0 = call {i64*,i64**} @jsr_eval(i64 -0, i64** %asp.001, 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.0 = call {%Hp,i64**} @jsr_eval(i64 -0, i64** %asp.001, i64** %asp.000, i64** %globasp.0, %Hp %hp.0) + %hp.1 = extractvalue {%Hp,i64**} %j.0, 0 + %globasp.1 = extractvalue {%Hp,i64**} %j.0, 1 %bsp.001 = call i64* @pushI_a(i64 -0, i64* %bsp.000, i64** %asp.001) %asp.002 = call i64** @pop_a1(i64** %asp.001) %t.0 = call i64 @peek_b(i64* %bsp.001) %bsp.002 = call i64* @pop_b1(i64* %bsp.001) - %t.1 = tail call {i64*,i64**,i64} @s1(i64* %hp.1, i64** %globasp.1, i64 %t.0) - %hp.2 = extractvalue {i64*,i64**,i64} %t.1, 0 - %globasp.2 = extractvalue {i64*,i64**,i64} %t.1, 1 - %t.2 = extractvalue {i64*,i64**,i64} %t.1, 2 - - %ret.0 = insertvalue {i64*,i64**,i64} undef, i64* %hp.2, 0 - %ret.1 = insertvalue {i64*,i64**,i64} %ret.0, i64** %globasp.2, 1 - %ret.2 = insertvalue {i64*,i64**,i64} %ret.1, i64 %t.2, 2 - ret {i64*,i64**,i64} %ret.2 + %t.1 = tail call cc101 {%Hp,i64**,i64} @s1(%Hp %hp.1, i64** %globasp.1, i64 %t.0) + %hp.2 = extractvalue {%Hp,i64**,i64} %t.1, 0 + %globasp.2 = extractvalue {%Hp,i64**,i64} %t.1, 1 + %t.2 = extractvalue {%Hp,i64**,i64} %t.1, 2 + + %ret.0 = insertvalue {%Hp,i64**,i64} undef, %Hp %hp.2, 0 + %ret.1 = insertvalue {%Hp,i64**,i64} %ret.0, i64** %globasp.2, 1 + %ret.2 = insertvalue {%Hp,i64**,i64} %ret.1, i64 %t.2, 2 + ret {%Hp,i64**,i64} %ret.2 } -define private {i64*,i64**,i64} @s1(i64* %hp.0, i64** %globasp.0, i64 %arg) #0 { +define private cc101 {%Hp,i64**,i64} @s1(%Hp %hp.0, i64** %globasp.0, i64 %arg) #0 { %astack = alloca i64*, i64 10000 %asp.000 = getelementptr i64*, i64** %astack %bstack = alloca i64, i64 10000 @@ -89,10 +89,10 @@ case.1: %r.1 = call i64 @peek_b(i64* %bsp.101) %bsp.102 = call i64* @pop_b1(i64* %bsp.101) - %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 %r.1, 2 - ret {i64*,i64**,i64} %ret.2 + %ret.0 = insertvalue {%Hp,i64**,i64} undef, %Hp %hp.0, 0 + %ret.1 = insertvalue {%Hp,i64**,i64} %ret.0, i64** %globasp.0, 1 + %ret.2 = insertvalue {%Hp,i64**,i64} %ret.1, i64 %r.1, 2 + ret {%Hp,i64**,i64} %ret.2 case.2: %bsp.200 = call i64* @pop_b1(i64* %bsp.005) @@ -101,10 +101,10 @@ case.2: %r.2 = call i64 @peek_b(i64* %bsp.201) %bsp.202 = call i64* @pop_b1(i64* %bsp.201) - %ret.3 = insertvalue {i64*,i64**,i64} undef, i64* %hp.0, 0 - %ret.4 = insertvalue {i64*,i64**,i64} %ret.3, i64** %globasp.0, 1 - %ret.5 = insertvalue {i64*,i64**,i64} %ret.4, i64 %r.2, 2 - ret {i64*,i64**,i64} %ret.5 + %ret.3 = insertvalue {%Hp,i64**,i64} undef, %Hp %hp.0, 0 + %ret.4 = insertvalue {%Hp,i64**,i64} %ret.3, i64** %globasp.0, 1 + %ret.5 = insertvalue {%Hp,i64**,i64} %ret.4, i64 %r.2, 2 + ret {%Hp,i64**,i64} %ret.5 case.3: %bsp.300 = call i64* @pushI(i64 1, i64* %bsp.005) @@ -113,10 +113,10 @@ case.3: %arg.0 = call i64 @peek_b(i64* %bsp.302) %bsp.302.0 = call i64* @pop_b1(i64* %bsp.302) - %t.4 = call {i64*,i64**,i64} @s1(i64* %hp.0, i64** %globasp.0, i64 %arg.0) - %hp.1 = extractvalue {i64*,i64**,i64} %t.4, 0 - %globasp.1 = extractvalue {i64*,i64**,i64} %t.4, 1 - %t.5 = extractvalue {i64*,i64**,i64} %t.4, 2 + %t.4 = call cc101 {%Hp,i64**,i64} @s1(%Hp %hp.0, i64** %globasp.0, i64 %arg.0) + %hp.1 = extractvalue {%Hp,i64**,i64} %t.4, 0 + %globasp.1 = extractvalue {%Hp,i64**,i64} %t.4, 1 + %t.5 = extractvalue {%Hp,i64**,i64} %t.4, 2 %bsp.303 = call i64* @pushI(i64 %t.5, i64* %bsp.302.0) %bsp.304 = call i64* @pushI(i64 2, i64* %bsp.303) @@ -125,10 +125,10 @@ case.3: %arg.1 = call i64 @peek_b(i64* %bsp.306) %bsp.306.0 = call i64* @pop_b1(i64* %bsp.306) - %t.6 = call {i64*,i64**,i64} @s1(i64* %hp.1, i64** %globasp.1, i64 %arg.1) - %hp.2 = extractvalue {i64*,i64**,i64} %t.6, 0 - %globasp.2 = extractvalue {i64*,i64**,i64} %t.6, 1 - %t.7 = extractvalue {i64*,i64**,i64} %t.6, 2 + %t.6 = call cc101 {%Hp,i64**,i64} @s1(%Hp %hp.1, i64** %globasp.1, i64 %arg.1) + %hp.2 = extractvalue {%Hp,i64**,i64} %t.6, 0 + %globasp.2 = extractvalue {%Hp,i64**,i64} %t.6, 1 + %t.7 = extractvalue {%Hp,i64**,i64} %t.6, 2 %bsp.307 = call i64* @pushI(i64 %t.7, i64* %bsp.306.0) %bsp.308 = call i64* @update_b(i64 1, i64 2, i64* %bsp.307) @@ -138,14 +138,18 @@ case.3: %r.3 = call i64 @peek_b(i64* %bsp.310) %bsp.311 = call i64* @pop_b1(i64* %bsp.310) - %ret.6 = insertvalue {i64*,i64**,i64} undef, i64* %hp.2, 0 - %ret.7 = insertvalue {i64*,i64**,i64} %ret.6, i64** %globasp.2, 1 - %ret.8 = insertvalue {i64*,i64**,i64} %ret.7, i64 %r.3, 2 - ret {i64*,i64**,i64} %ret.8 + %ret.6 = insertvalue {%Hp,i64**,i64} undef, %Hp %hp.2, 0 + %ret.7 = insertvalue {%Hp,i64**,i64} %ret.6, i64** %globasp.2, 1 + %ret.8 = insertvalue {%Hp,i64**,i64} %ret.7, i64 %r.3, 2 + ret {%Hp,i64**,i64} %ret.8 } define i64 @main() { - %hp.0 = call i64* @_alloc_heap(i64 10000) + %hp_free.0 = add i64 10000, 0 + %hp.0 = call i64* @_alloc_heap(i64 %hp_free.0) + %hp_s.0 = insertvalue %Hp undef, i64* %hp.0, 0 + %hp_s.1 = insertvalue %Hp %hp_s.0, i64 %hp_free.0, 1 + %asp.0 = call i64** @_alloc_a_stack(i64 10000) %n.0 = getelementptr i64, i64* %hp.0 @@ -155,18 +159,23 @@ define i64 @main() { %n.0.0 = getelementptr i64, i64* %n.0, i64 1 store i64 43, i64* %n.0.0 %hp.1 = getelementptr i64, i64* %hp.0, i64 2 + %hp_free.1 = sub i64 %hp_free.0, 2 %n.1 = getelementptr i64, i64* %hp.1 - store i64 ptrtoint ({i64*,i64**,i64*}(i64*,i64**,i64*)* @e_fib_eqI_b_nfib to i64), i64* %n.1 + store i64 ptrtoint ({%Hp,i64**,i64*}(%Hp,i64**,i64*)* @e_fib_eqI_b_nfib to i64), i64* %n.1 %t.0 = ptrtoint i64* %n.0 to i64 %n.1.0 = getelementptr i64, i64* %n.1, i64 1 store i64 %t.0, i64* %n.1.0 %hp.2 = getelementptr i64, i64* %hp.0, i64 3 + %hp_free.2 = sub i64 %hp_free.1, 3 + + %hp_s.2 = insertvalue %Hp %hp_s.1, i64* %hp.2, 0 + %hp_s.3 = insertvalue %Hp %hp_s.2, i64 %hp_free.2, 1 - %t.1 = call {i64*,i64**,i64*} @e_fib_eqI_b_nfib(i64* %hp.2, i64** %asp.0, i64* %n.1) - %hp.3 = extractvalue {i64*,i64**,i64*} %t.1, 0 - %asp.1 = extractvalue {i64*,i64**,i64*} %t.1, 1 - %n.2 = extractvalue {i64*,i64**,i64*} %t.1, 2 + %t.1 = call cc101 {%Hp,i64**,i64*} @e_fib_eqI_b_nfib(%Hp %hp_s.3, i64** %asp.0, i64* %n.1) + %hp_s.4 = extractvalue {%Hp,i64**,i64*} %t.1, 0 + %asp.1 = extractvalue {%Hp,i64**,i64*} %t.1, 1 + %n.2 = extractvalue {%Hp,i64**,i64*} %t.1, 2 %n.3 = getelementptr i64, i64* %n.2, i64 1 %r = load i64, i64* %n.3 |