aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCamil Staps2021-01-08 11:37:49 +0100
committerCamil Staps2021-01-08 11:37:49 +0100
commit2f35a66e33bdd4ef608199c0e02864395f0f916b (patch)
tree89067ab3410d9166a199c5263c62cdbd8356aa43
parentUse malloc to allocate heap and stack (diff)
Move hp and stack pointers to beginning of function parameters in fib_* and nfib (for easier calling convention)
-rw-r--r--fib_eqI_b.ll64
-rw-r--r--fib_ltI.ll12
-rw-r--r--nfib.ll12
-rw-r--r--rts.ll6
4 files changed, 47 insertions, 47 deletions
diff --git a/fib_eqI_b.ll b/fib_eqI_b.ll
index 12a3c95..72e08e1 100644
--- a/fib_eqI_b.ll
+++ b/fib_eqI_b.ll
@@ -1,4 +1,4 @@
-define {i64*,i64*} @e_fib_eqI_b_nfib(i64* %n, i64** %globasp, i64* %hp.0) align 8
+define {i64*,i64*} @e_fib_eqI_b_nfib(i64* %hp.0, i64** %globasp, 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,9 +14,9 @@ define {i64*,i64*} @e_fib_eqI_b_nfib(i64* %n, i64** %globasp, i64* %hp.0) align
%t.1 = call i64* @peek_a(i64** %asp.002)
%asp.003 = call i64** @pop_a1(i64** %asp.002)
%globasp.0 = call i64** @_push_local_astack(i64** %asp.003, i64** %asp.000, i64** %globasp)
- %t.2 = call {i64,i64*} @ea1(i64* %t.1, i64** %globasp.0, i64* %hp.0)
- %t.2.0 = extractvalue {i64,i64*} %t.2, 0
- %hp.1 = extractvalue {i64,i64*} %t.2, 1
+ %t.2 = call {i64*,i64} @ea1(i64* %hp.0, i64** %globasp.0, i64* %t.1)
+ %hp.1 = extractvalue {i64*,i64} %t.2, 0
+ %t.2.0 = extractvalue {i64*,i64} %t.2, 1
%bsp.001 = call i64* @pushI(i64 %t.2.0, i64* %bsp.000)
%asp.004 = call i64** @fillI_b(i64 0, i64 -0, i64* %bsp.001, i64** %asp.003)
@@ -25,12 +25,12 @@ define {i64*,i64*} @e_fib_eqI_b_nfib(i64* %n, i64** %globasp, i64* %hp.0) align
%t.3 = call i64* @peek_a(i64** %asp.004)
%asp.005 = call i64** @pop_a1(i64** %asp.004)
- %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*} @ea1(i64* %n, i64** %globasp, i64* %hp.0) {
+define private {i64*,i64} @ea1(i64* %hp.0, i64** %globasp, i64* %n) {
%astack = alloca i64*, i64 10
%asp.000 = getelementptr i64*, i64** %astack, i64 0
%bstack = alloca i64, i64 10
@@ -45,16 +45,16 @@ define private {i64,i64*} @ea1(i64* %n, i64** %globasp, i64* %hp.0) {
%t.0 = call i64 @peek_b(i64* %bsp.001)
%bsp.002 = call i64* @pop_b1(i64* %bsp.001)
- %t.1 = tail call {i64,i64*} @s1(i64 %t.0, i64** %globasp, i64* %hp.1)
- %t.2 = extractvalue {i64,i64*} %t.1, 0
- %hp.2 = extractvalue {i64,i64*} %t.1, 1
+ %t.1 = tail call {i64*,i64} @s1(i64* %hp.1, i64** %globasp, i64 %t.0)
+ %hp.2 = extractvalue {i64*,i64} %t.1, 0
+ %t.2 = extractvalue {i64*,i64} %t.1, 1
- %ret.0 = insertvalue {i64,i64*} undef, i64 %t.2, 0
- %ret.1 = insertvalue {i64,i64*} %ret.0, i64* %hp.2, 1
- ret {i64,i64*} %ret.1
+ %ret.0 = insertvalue {i64*,i64} undef, i64* %hp.2, 0
+ %ret.1 = insertvalue {i64*,i64} %ret.0, i64 %t.2, 1
+ ret {i64*,i64} %ret.1
}
-define private {i64,i64*} @s1(i64 %arg, i64** %globasp, i64* %hp.0) #0 {
+define private {i64*,i64} @s1(i64* %hp.0, i64** %globasp, i64 %arg) #0 {
%astack = alloca i64*, i64 10000
%asp.000 = getelementptr i64*, i64** %astack
%bstack = alloca i64, i64 10000
@@ -82,9 +82,9 @@ 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*} undef, i64 %r.1, 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 %r.1, 1
+ ret {i64*,i64} %ret.1
case.2:
%bsp.200 = call i64* @pop_b1(i64* %bsp.005)
@@ -93,9 +93,9 @@ case.2:
%r.2 = call i64 @peek_b(i64* %bsp.201)
%bsp.202 = call i64* @pop_b1(i64* %bsp.201)
- %ret.2 = insertvalue {i64,i64*} undef, i64 %r.2, 0
- %ret.3 = insertvalue {i64,i64*} %ret.2, i64* %hp.0, 1
- ret {i64,i64*} %ret.3
+ %ret.2 = insertvalue {i64*,i64} undef, i64* %hp.0, 0
+ %ret.3 = insertvalue {i64*,i64} %ret.2, i64 %r.2, 1
+ ret {i64*,i64} %ret.3
case.3:
%bsp.300 = call i64* @pushI(i64 1, i64* %bsp.005)
@@ -104,9 +104,9 @@ 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*} @s1(i64 %arg.0, i64** %globasp, i64* %hp.0)
- %t.5 = extractvalue {i64,i64*} %t.4, 0
- %hp.1 = extractvalue {i64,i64*} %t.4, 1
+ %t.4 = call {i64*,i64} @s1(i64* %hp.0, i64** %globasp, i64 %arg.0)
+ %hp.1 = extractvalue {i64*,i64} %t.4, 0
+ %t.5 = extractvalue {i64*,i64} %t.4, 1
%bsp.303 = call i64* @pushI(i64 %t.5, i64* %bsp.302.0)
%bsp.304 = call i64* @pushI(i64 2, i64* %bsp.303)
@@ -115,9 +115,9 @@ 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*} @s1(i64 %arg.1, i64** %globasp, i64* %hp.1)
- %t.7 = extractvalue {i64,i64*} %t.6, 0
- %hp.2 = extractvalue {i64,i64*} %t.6, 1
+ %t.6 = call {i64*,i64} @s1(i64* %hp.1, i64** %globasp, i64 %arg.1)
+ %hp.2 = extractvalue {i64*,i64} %t.6, 0
+ %t.7 = extractvalue {i64*,i64} %t.6, 1
%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)
@@ -127,9 +127,9 @@ case.3:
%r.3 = call i64 @peek_b(i64* %bsp.310)
%bsp.311 = call i64* @pop_b1(i64* %bsp.310)
- %ret.4 = insertvalue {i64,i64*} undef, i64 %r.3, 0
- %ret.5 = insertvalue {i64,i64*} %ret.4, i64* %hp.2, 1
- ret {i64,i64*} %ret.5
+ %ret.4 = insertvalue {i64*,i64} undef, i64* %hp.2, 0
+ %ret.5 = insertvalue {i64*,i64} %ret.4, i64 %r.3, 1
+ ret {i64*,i64} %ret.5
}
define i64 @main() {
@@ -151,9 +151,9 @@ define i64 @main() {
store i64 %t.0, i64* %n.1.0
%hp.2 = getelementptr i64, i64* %hp.0, i64 3
- %t.1 = call {i64*,i64*} @e_fib_eqI_b_nfib(i64* %n.1, i64** %astack, i64* %hp.2)
- %n.2 = extractvalue {i64*,i64*} %t.1, 0
- %hp.3 = extractvalue {i64*,i64*} %t.1, 1
+ %t.1 = call {i64*,i64*} @e_fib_eqI_b_nfib(i64* %hp.2, i64** %astack, i64* %n.1)
+ %hp.3 = extractvalue {i64*,i64*} %t.1, 0
+ %n.2 = extractvalue {i64*,i64*} %t.1, 1
%n.3 = getelementptr i64, i64* %n.2, i64 1
%r = load i64, i64* %n.3
diff --git a/fib_ltI.ll b/fib_ltI.ll
index f8a14a2..1a48796 100644
--- a/fib_ltI.ll
+++ b/fib_ltI.ll
@@ -1,4 +1,4 @@
-define private i64 @s1(i64 %arg, i64** %globasp) {
+define private i64 @s1(i64** %globasp, i64 %arg) {
%astack = alloca i64*, i64 10000
%asp.000 = getelementptr i64*, i64** %astack
%bstack = alloca i64, i64 10000
@@ -30,7 +30,7 @@ else.1:
%arg.0 = call i64 @peek_b(i64* %bsp.302)
%bsp.302.0 = call i64* @pop_b1(i64* %bsp.302)
- %r.0 = call i64 @s1(i64 %arg.0, i64** %globasp)
+ %r.0 = call i64 @s1(i64** %globasp, i64 %arg.0)
%bsp.303 = call i64* @pushI(i64 %r.0, i64* %bsp.302.0)
%bsp.304 = call i64* @pushI(i64 2, i64* %bsp.303)
@@ -39,7 +39,7 @@ else.1:
%arg.1 = call i64 @peek_b(i64* %bsp.306)
%bsp.306.0 = call i64* @pop_b1(i64* %bsp.306)
- %r.1 = call i64 @s1(i64 %arg.1, i64** %globasp)
+ %r.1 = call i64 @s1(i64** %globasp, i64 %arg.1)
%bsp.307 = call i64* @pushI(i64 %r.1, i64* %bsp.306.0)
%bsp.308 = call i64* @update_b(i64 1, i64 2, i64* %bsp.307)
@@ -51,8 +51,8 @@ else.1:
ret i64 %relse
}
-define private i64 @_s2(i64 %arg, i64** %globasp) {
- %ret = tail call i64 @s1(i64 %arg, i64** %globasp)
+define private i64 @_s2(i64** %globasp, i64 %arg) {
+ %ret = tail call i64 @s1(i64** %globasp, i64 %arg)
ret i64 %ret
}
@@ -60,7 +60,7 @@ define i64 @main() {
%heap = call i64* @_alloc_heap(i64 10000)
%astack = call i64** @_alloc_a_stack(i64 10000)
- %r = call i64 @_s2(i64 43, i64** %astack)
+ %r = call i64 @_s2(i64** %astack, i64 43)
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)
diff --git a/nfib.ll b/nfib.ll
index dcae8f0..900bf16 100644
--- a/nfib.ll
+++ b/nfib.ll
@@ -1,4 +1,4 @@
-define private i64 @s1(i64 %arg, i64** %globasp) #0 {
+define private i64 @s1(i64** %globasp, i64 %arg) #0 {
%astack = alloca i64*, i64 10000
%asp.000 = getelementptr i64*, i64** %astack
%bstack = alloca i64, i64 10000
@@ -30,7 +30,7 @@ else.1:
%arg.0 = call i64 @peek_b(i64* %bsp.302)
%bsp.302.0 = call i64* @pop_b1(i64* %bsp.302)
- %r.0 = call i64 @s1(i64 %arg.0, i64** %globasp)
+ %r.0 = call i64 @s1(i64** %globasp, i64 %arg.0)
%bsp.303 = call i64* @pushI(i64 %r.0, i64* %bsp.302.0)
%bsp.304 = call i64* @pushI(i64 1, i64* %bsp.303)
@@ -39,7 +39,7 @@ else.1:
%arg.1 = call i64 @peek_b(i64* %bsp.306)
%bsp.306.0 = call i64* @pop_b1(i64* %bsp.306)
- %r.1 = call i64 @s1(i64 %arg.1, i64** %globasp)
+ %r.1 = call i64 @s1(i64** %globasp, i64 %arg.1)
%bsp.307 = call i64* @pushI(i64 %r.1, i64* %bsp.306.0)
%bsp.308 = call i64* @addI(i64* %bsp.307)
@@ -57,8 +57,8 @@ else.1:
ret i64 %relse
}
-define private i64 @_s2(i64 %arg, i64** %globasp) {
- %ret = tail call i64 @s1(i64 %arg, i64** %globasp)
+define private i64 @s2(i64** %globasp, i64 %arg) {
+ %ret = tail call i64 @s1(i64** %globasp, i64 %arg)
ret i64 %ret
}
@@ -66,7 +66,7 @@ define i64 @main() {
%heap = call i64* @_alloc_heap(i64 1000)
%astack = call i64** @_alloc_a_stack(i64 1000)
- %r = call i64 @_s2(i64 43, i64** %astack)
+ %r = call i64 @s2(i64** %astack, i64 43)
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)
diff --git a/rts.ll b/rts.ll
index 1181167..2a9b47a 100644
--- a/rts.ll
+++ b/rts.ll
@@ -157,9 +157,9 @@ done:
eval:
%globasp.1 = call i64** @_push_local_astack(i64** %asp.0, i64** %aspstart, i64** %globasp.0)
%nentry.0 = inttoptr i64 %d.0 to {i64*, i64*} (i64*, i64**, i64*)*
- %t.2 = call {i64*, i64*} %nentry.0(i64* %n.0, i64** %globasp.1, i64* %hp.0)
- %n.1 = extractvalue {i64*, i64*} %t.2, 0
- %hp.1 = extractvalue {i64*, i64*} %t.2, 1
+ %t.2 = call {i64*, i64*} %nentry.0(i64* %hp.0, i64** %globasp.1, i64* %n.0)
+ %hp.1 = extractvalue {i64*, i64*} %t.2, 0
+ %n.1 = extractvalue {i64*, i64*} %t.2, 1
store i64* %n.1, i64** %asp.1
ret i64* %hp.1
}