aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nfib_nsa.ll146
1 files changed, 87 insertions, 59 deletions
diff --git a/nfib_nsa.ll b/nfib_nsa.ll
index f7843a7..b49ceae 100644
--- a/nfib_nsa.ll
+++ b/nfib_nsa.ll
@@ -1,9 +1,13 @@
-define {i64*,i64*} @n5(i64* %n, i64** %globasp.0, i64* %hp.0) align 8
+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)
+ nofree willreturn nosync nounwind argmemonly align 8
prefix {i8*, i64} {i8* inttoptr (i64 0 to i8*), i64 0} {
- %astack = alloca i64*, i64 10
+ %astack = alloca i64*, i64 5
%asp.000 = getelementptr i64*, i64** %astack
- %bstack = alloca i64, i64 10
- %bsp.000 = getelementptr i64, i64* %bstack, i64 9
+ %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
@@ -11,9 +15,9 @@ define {i64*,i64*} @n5(i64* %n, i64** %globasp.0, i64* %hp.0) align 8
%t.0 = bitcast {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** %globasp.0, i64* %hp.0)
- %t.2 = extractvalue {i64,i64*} %t.1, 0
- %hp.1 = extractvalue {i64,i64*} %t.1, 1
+ %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
%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)
@@ -22,21 +26,27 @@ define {i64*,i64*} @n5(i64* %n, i64** %globasp.0, i64* %hp.0) align 8
%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* %t.3, 0
- %ret.1 = insertvalue {i64*, i64*} %ret.0, i64* %hp.1, 1
+ %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
}
-define private {i64,i64*} @ea5(i64** %globasp.0, i64* %hp.0) {
- %ret.0 = tail call {i64,i64*} @s5(i64** %globasp.0, i64* %hp.0)
- ret {i64,i64*} %ret.0
+define private {i64*,i64} @ea5(
+ i64* inreg align 8 nocapture nofree nonnull %hp.0,
+ i64** inreg 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
}
-define private {i64,i64*} @s5(i64** %globasp.0, i64* %hp.0) {
- %astack = alloca i64*, i64 10
+define private {i64*,i64} @s5(
+ i64* inreg align 8 nocapture nofree nonnull %hp.0,
+ i64** inreg 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 10
- %bsp.000 = getelementptr i64, i64* %bstack, i64 9
+ %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
@@ -44,15 +54,19 @@ define private {i64,i64*} @s5(i64** %globasp.0, i64* %hp.0) {
%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* %t.1, i64** %globasp.0, i64* %hp.1)
- ret {i64,i64*} %t.2
+ %t.2 = tail call {i64*,i64} @s4(i64* %hp.1, i64** %globasp.0, i64* %t.1)
+ ret {i64*,i64} %t.2
}
-define {i64,i64*} @s4(i64* %n, i64** %globasp.0, i64* %hp.0) noinline {
- %astack = alloca i64*, i64 10
+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)
+ nofree willreturn nosync nounwind argmemonly {
+ %astack = alloca i64*, i64 5
%asp.000 = getelementptr i64*, i64** %astack
- %bstack = alloca i64, i64 10
- %bsp.000 = getelementptr i64, i64* %bstack, i64 9
+ %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
@@ -80,9 +94,9 @@ 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 %t.2, 0
- %ret.1 = insertvalue {i64, i64*} %ret.0, i64* %hp.1, 1
- ret {i64, i64*} %ret.1
+ %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
else.1:
%t.3 = call {i64**,i64*} @buildI(i64 1, i64** %asp.003, i64* %hp.1)
@@ -98,9 +112,9 @@ else.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* %t.6, i64** %globasp.0, i64* %hp.3)
- %t.8 = extractvalue {i64,i64*} %t.7, 0
- %hp.4 = extractvalue {i64,i64*} %t.7, 1
+ %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
%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)
@@ -116,9 +130,9 @@ else.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* %t.12, i64** %globasp.0, i64* %hp.6)
- %t.14 = extractvalue {i64,i64*} %t.13, 0
- %hp.7 = extractvalue {i64,i64*} %t.13, 1
+ %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
%bsp.201 = call i64* @pushI(i64 %t.14, i64* %bsp.200)
%bsp.202 = call i64* @addI(i64* %bsp.201)
@@ -132,17 +146,21 @@ 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 %t.15, 0
- %ret.3 = insertvalue {i64, i64*} %ret.2, i64* %hp.7, 1
- ret {i64, i64*} %ret.3
+ %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
}
-define {i64*,i64*} @n2(i64* %n, i64** %globasp.0, i64* %hp.0) align 8
+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)
+ nofree willreturn nosync nounwind argmemonly align 8
prefix {i8*, i64} {i8* inttoptr (i64 0 to i8*), i64 2} {
- %astack = alloca i64*, i64 10
+ %astack = alloca i64*, i64 5
%asp.000 = getelementptr i64*, i64** %astack
- %bstack = alloca i64, i64 10
- %bsp.000 = getelementptr i64, i64* %bstack, i64 9
+ %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
@@ -155,9 +173,9 @@ define {i64*,i64*} @n2(i64* %n, i64** %globasp.0, i64* %hp.0) align 8
%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* %t.1, i64* %t.2, i64** %globasp.1, i64* %hp.0)
- %t.4 = extractvalue {i64, i64*} %t.3, 0
- %hp.1 = extractvalue {i64, i64*} %t.3, 1
+ %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
%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)
@@ -166,16 +184,21 @@ define {i64*,i64*} @n2(i64* %n, i64** %globasp.0, i64* %hp.0) align 8
%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* %t.5, 0
- %ret.1 = insertvalue {i64*, i64*} %ret.0, i64* %hp.0, 1
+ %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
}
-define private {i64, i64*} @ea2(i64* %arg1, i64* %arg2, i64** %globasp.0, i64* %hp.0) {
- %astack = alloca i64*, i64 10
+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)
+ nofree willreturn nosync nounwind argmemonly {
+ %astack = alloca i64*, i64 5
%asp.000 = getelementptr i64*, i64** %astack
- %bstack = alloca i64, i64 10
- %bsp.000 = getelementptr i64, i64* %bstack, i64 9
+ %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
@@ -194,15 +217,20 @@ define private {i64, i64*} @ea2(i64* %arg1, i64* %arg2, i64** %globasp.0, i64* %
%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 %t.0, i64 %t.1, i64* %hp.2)
- ret {i64, i64*} %ret
+ %ret = tail call {i64*,i64} @s2(i64* %hp.2, i64** %globasp.0, i64 %t.0, i64 %t.1)
+ ret {i64*,i64} %ret
}
-define private {i64, i64*} @s2 (i64 %arg1, i64 %arg2, i64* %hp.0) {
- %astack = alloca i64*, i64 10
+define private {i64*,i64} @s2(
+ i64* inreg align 8 nocapture nofree nonnull %hp.0,
+ i64** inreg 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 10
- %bsp.000 = getelementptr i64, i64* %bstack, i64 9
+ %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)
@@ -212,9 +240,9 @@ define private {i64, i64*} @s2 (i64 %arg1, i64 %arg2, i64* %hp.0) {
%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 %t.0, 0
- %ret.1 = insertvalue {i64, i64*} %ret.0, i64* %hp.0, 1
- ret {i64, i64*} %ret.1
+ %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
}
define i64 @main() {
@@ -225,9 +253,9 @@ define i64 @main() {
store i64 ptrtoint ({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* %n.0, i64** %astack, i64* %hp.1)
- %n.1 = extractvalue {i64*,i64*} %t.0, 0
- %hp.2 = extractvalue {i64*,i64*} %t.0, 1
+ %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
%n.1.0 = getelementptr i64, i64* %n.1, i64 1
%r = load i64, i64* %n.1.0