aboutsummaryrefslogtreecommitdiff
path: root/nfib_nsa.ll
diff options
context:
space:
mode:
Diffstat (limited to 'nfib_nsa.ll')
-rw-r--r--nfib_nsa.ll163
1 files changed, 90 insertions, 73 deletions
diff --git a/nfib_nsa.ll b/nfib_nsa.ll
index b49ceae..62da012 100644
--- a/nfib_nsa.ll
+++ b/nfib_nsa.ll
@@ -1,7 +1,7 @@
-define {i64*,i64*} @n5(
- i64* inreg align 8 nocapture nofree nonnull %hp.0,
- i64** inreg align 8 noalias nocapture nofree nonnull %globasp.0,
- i64* inreg align 8 nocapture nofree dereferenceable(3) %n)
+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
@@ -12,12 +12,13 @@ define {i64*,i64*} @n5(
%asp.001 = getelementptr i64*, i64** %asp.000, i64 1
store i64* %n, i64** %asp.001
- %t.0 = bitcast {i64*,i64*}(i64**,i64*)* @_cycle_in_spine to i64*
+ %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} @ea5(i64* %hp.0, i64** %globasp.0)
- %hp.1 = extractvalue {i64*,i64} %t.1, 0
- %t.2 = extractvalue {i64*,i64} %t.1, 1
+ %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)
@@ -26,22 +27,23 @@ define {i64*,i64*} @n5(
%t.3 = call i64* @peek_a(i64** %asp.003)
%asp.004 = call i64** @pop_a1(i64** %asp.003)
- %ret.0 = insertvalue {i64*, i64*} undef, i64* %hp.1, 0
- %ret.1 = insertvalue {i64*, i64*} %ret.0, i64* %t.3, 1
- ret {i64*, i64*} %ret.1
+ %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} @ea5(
- i64* inreg align 8 nocapture nofree nonnull %hp.0,
- i64** inreg align 8 noalias nocapture nofree nonnull %globasp.0)
+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} @s5(i64* %hp.0, i64** %globasp.0)
- ret {i64*,i64} %ret.0
+ %ret.0 = tail call {i64*,i64**,i64} @s5(i64* %hp.0, i64** %globasp.0)
+ ret {i64*,i64**,i64} %ret.0
}
-define private {i64*,i64} @s5(
- i64* inreg align 8 nocapture nofree nonnull %hp.0,
- i64** inreg align 8 noalias nocapture nofree nonnull %globasp.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
@@ -54,14 +56,14 @@ define private {i64*,i64} @s5(
%t.1 = call i64* @peek_a(i64** %asp.001)
%asp.002 = call i64** @pop_a1(i64** %asp.001)
- %t.2 = tail call {i64*,i64} @s4(i64* %hp.1, i64** %globasp.0, i64* %t.1)
- ret {i64*,i64} %t.2
+ %t.2 = tail call {i64*,i64**,i64} @s4(i64* %hp.1, i64** %globasp.0, i64* %t.1)
+ ret {i64*,i64**,i64} %t.2
}
-define inreg {i64*,i64} @s4(
- i64* inreg align 8 nocapture nofree nonnull %hp.0,
- i64** inreg align 8 noalias nocapture nofree nonnull %globasp.0,
- i64* inreg align 8 nocapture nofree dereferenceable(3) %n)
+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
@@ -72,7 +74,9 @@ define inreg {i64*,i64} @s4(
store i64* %n, i64** %asp.001
%asp.002 = call i64** @push_a(i64 -0, i64** %asp.001)
- %hp.1 = call i64* @jsr_eval(i64 -0, i64** %asp.002, i64** %asp.000, i64** %globasp.0, i64* %hp.0)
+ %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)
@@ -94,9 +98,10 @@ l.0:
%t.2 = call i64 @peek_b(i64* %bsp.100)
%bsp.101 = call i64* @pop_b1(i64* %bsp.100)
- %ret.0 = insertvalue {i64*,i64} undef, i64* %hp.1, 0
- %ret.1 = insertvalue {i64*,i64} %ret.0, i64 %t.2, 1
- ret {i64*,i64} %ret.1
+ %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)
@@ -105,16 +110,17 @@ else.1:
%asp.201 = call i64** @push_a(i64 -1, i64** %asp.200)
- %t.4 = bitcast {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.0, i64* %hp.2)
+ %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} @s4(i64* %hp.3, i64** %globasp.0, i64* %t.6)
- %hp.4 = extractvalue {i64*,i64} %t.7, 0
- %t.8 = extractvalue {i64*,i64} %t.7, 1
+ %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)
@@ -123,16 +129,17 @@ else.1:
%asp.205 = call i64** @push_a(i64 -1, i64** %asp.204)
- %t.10 = bitcast {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.0, i64* %hp.5)
+ %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} @s4(i64* %hp.6, i64** %globasp.0, i64* %t.12)
- %hp.7 = extractvalue {i64*,i64} %t.13, 0
- %t.14 = extractvalue {i64*,i64} %t.13, 1
+ %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)
@@ -146,15 +153,16 @@ else.1:
%t.15 = call i64 @peek_b(i64* %bsp.208)
%bsp.209 = call i64* @pop_b1(i64* %bsp.208)
- %ret.2 = insertvalue {i64*,i64} undef, i64* %hp.7, 0
- %ret.3 = insertvalue {i64*,i64} %ret.2, i64 %t.15, 1
- ret {i64*,i64} %ret.3
+ %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*} @n2(
- i64* inreg align 8 nocapture nofree nonnull %hp.0,
- i64** inreg align 8 noalias nocapture nofree nonnull %globasp.0,
- i64* inreg align 8 nocapture nofree dereferenceable(3) %n)
+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
@@ -165,7 +173,7 @@ define {i64*,i64*} @n2(
%asp.001 = getelementptr i64*, i64** %asp.000, i64 1
store i64* %n, i64** %asp.001
- %t.0 = bitcast {i64*,i64*}(i64**,i64*)* @_cycle_in_spine to i64*
+ %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)
@@ -173,9 +181,11 @@ define {i64*,i64*} @n2(
%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} @ea2(i64* %hp.0, i64** %globasp.1, i64* %t.1, i64* %t.2)
- %hp.1 = extractvalue {i64*,i64} %t.3, 0
- %t.4 = extractvalue {i64*,i64} %t.3, 1
+ %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)
@@ -184,16 +194,17 @@ define {i64*,i64*} @n2(
%t.5 = call i64* @peek_a(i64** %asp.005)
%asp.006 = call i64** @pop_a1(i64** %asp.005)
- %ret.0 = insertvalue {i64*, i64*} undef, i64* %hp.0, 0
- %ret.1 = insertvalue {i64*, i64*} %ret.0, i64* %t.5, 1
- ret {i64*, i64*} %ret.1
+ %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} @ea2(
- i64* inreg align 8 nocapture nofree nonnull %hp.0,
- i64** inreg align 8 noalias nocapture nofree nonnull %globasp.0,
- i64* inreg align 8 nofree nonnull %arg1,
- i64* inreg align 8 nofree nonnull %arg2)
+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
@@ -205,8 +216,12 @@ define private {i64*,i64} @ea2(
%asp.002 = getelementptr i64*, i64** %asp.001, i64 1
store i64* %arg1, i64** %asp.002
- %hp.1 = call i64* @jsr_eval(i64 -1, i64** %asp.002, i64** %asp.000, i64** %globasp.0, i64* %hp.0)
- %hp.2 = call i64* @jsr_eval(i64 -0, i64** %asp.002, i64** %asp.000, i64** %globasp.0, i64* %hp.1)
+ %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)
@@ -217,13 +232,13 @@ define private {i64*,i64} @ea2(
%t.1 = call i64 @peek_b(i64* %bsp.003)
%bsp.004 = call i64* @pop_b1(i64* %bsp.003)
- %ret = tail call {i64*,i64} @s2(i64* %hp.2, i64** %globasp.0, i64 %t.0, i64 %t.1)
- ret {i64*,i64} %ret
+ %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} @s2(
- i64* inreg align 8 nocapture nofree nonnull %hp.0,
- i64** inreg align 8 noalias nocapture nofree nonnull %globasp.0,
+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 {
@@ -240,22 +255,24 @@ define private {i64*,i64} @s2(
%t.0 = call i64 @peek_b(i64* %bsp.003)
%bsp.004 = call i64* @pop_b1(i64* %bsp.003)
- %ret.0 = insertvalue {i64*,i64} undef, i64* %hp.0, 0
- %ret.1 = insertvalue {i64*,i64} %ret.0, i64 %t.0, 1
- ret {i64*,i64} %ret.1
+ %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)
- %astack = call i64** @_alloc_a_stack(i64 10000)
+ %asp.0 = call i64** @_alloc_a_stack(i64 10000)
%n.0 = getelementptr i64, i64* %hp.0
- store i64 ptrtoint ({i64*,i64*}(i64*,i64**,i64*)* @n5 to i64), i64* %n.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*} @n5(i64* %hp.1, i64** %astack, i64* %n.0)
- %hp.2 = extractvalue {i64*,i64*} %t.0, 0
- %n.1 = extractvalue {i64*,i64*} %t.0, 1
+ %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