aboutsummaryrefslogtreecommitdiff
path: root/fib_ltI.ll
diff options
context:
space:
mode:
Diffstat (limited to 'fib_ltI.ll')
-rw-r--r--fib_ltI.ll213
1 files changed, 47 insertions, 166 deletions
diff --git a/fib_ltI.ll b/fib_ltI.ll
index 52df35c..65598fd 100644
--- a/fib_ltI.ll
+++ b/fib_ltI.ll
@@ -1,185 +1,66 @@
-target triple = "x86_64-pc-linux-gnu"
-
-declare i64 @printf(i8*, ...)
-@printf_d = private unnamed_addr constant [3 x i8] c"%d\00", align 1
-@printf_c = private unnamed_addr constant [3 x i8] c"%c\00", align 1
-
-%S = type { i64*, i64* }
-
-attributes #0 = { alwaysinline }
-
-define private %S @addI(%S %s.0) #0 {
- %bsp.0 = extractvalue %S %s.0, 1
- %t.0 = load i64, i64* %bsp.0
- store i64 undef, i64* %bsp.0
- %bsp.1 = getelementptr i64, i64* %bsp.0, i64 1
- %t.1 = load i64, i64* %bsp.1
- %t.2 = add i64 %t.0, %t.1
- store i64 %t.2, i64* %bsp.1
- %s.1 = insertvalue %S %s.0, i64* %bsp.1, 1
- ret %S %s.1
-}
-
-define private %S @ltI(%S %s.0) #0 {
- %bsp.0 = extractvalue %S %s.0, 1
- %t.0 = load i64, i64* %bsp.0
- store i64 undef, i64* %bsp.0
- %bsp.1 = getelementptr i64, i64* %bsp.0, i64 1
- %t.1 = load i64, i64* %bsp.1
- %t.2 = icmp slt i64 %t.0, %t.1
- %t.3 = zext i1 %t.2 to i64
- store i64 %t.3, i64* %bsp.1
- %s.1 = insertvalue %S %s.0, i64* %bsp.1, 1
- ret %S %s.1
-}
-
-define private %S @pop_b1(%S %s.0) #0 {
- %bsp.0 = extractvalue %S %s.0, 1
- store i64 undef, i64* %bsp.0
- %bsp.1 = getelementptr i64, i64* %bsp.0, i64 1
- %s.1 = insertvalue %S %s.0, i64* %bsp.1, 1
- ret %S %s.1
-}
-
-define private %S @print_int(%S %s.0) #0 {
- %bsp.0 = extractvalue %S %s.0, 1
- %t.0 = load i64, i64* %bsp.0
- store i64 undef, i64* %bsp.0
- call i64 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @printf_d, i64 0, i64 0), i64 %t.0)
- %bsp.1 = getelementptr i64, i64* %bsp.0, i64 1
- %s.1 = insertvalue %S %s.0, i64* %bsp.1, 1
- ret %S %s.1
-}
-
-define private %S @push_b(i64 %n, %S %s.0) #0 {
- %bsp.0 = extractvalue %S %s.0, 1
- %bsp.1 = getelementptr i64, i64* %bsp.0, i64 %n
- %t.0 = load i64, i64* %bsp.1
- %bsp.2 = getelementptr i64, i64* %bsp.0, i64 -1
- store i64 %t.0, i64* %bsp.2
- %s.1 = insertvalue %S %s.0, i64* %bsp.2, 1
- ret %S %s.1
-}
-
-define private %S @pushI(i64 %i, %S %s.0) #0 {
- %bsp.0 = extractvalue %S %s.0, 1
- %bsp.1 = getelementptr i64, i64* %bsp.0, i64 -1
- store i64 %i, i64* %bsp.1
- %s.1 = insertvalue %S %s.0, i64* %bsp.1, 1
- ret %S %s.1
-}
+define private i64 @s1(i64 %arg, i64** %globasp) {
+ %astack = alloca i64*, i64 10000
+ %asp.000 = getelementptr i64*, i64** %astack
+ %bstack = alloca i64, i64 10000
+ %bsp.000 = getelementptr i64, i64* %bstack, i64 9999
-define private %S @subI(%S %s.0) #0 {
- %bsp.0 = extractvalue %S %s.0, 1
- %t.0 = load i64, i64* %bsp.0
- store i64 undef, i64* %bsp.0
- %bsp.1 = getelementptr i64, i64* %bsp.0, i64 1
- %t.1 = load i64, i64* %bsp.1
- %t.2 = sub i64 %t.0, %t.1
- store i64 %t.2, i64* %bsp.1
- %s.1 = insertvalue %S %s.0, i64* %bsp.1, 1
- ret %S %s.1
-}
-
-define private %S @update_b(i64 %n1, i64 %n2, %S %s.0) #0 {
- %bsp.0 = extractvalue %S %s.0, 1
- %bsp.1 = getelementptr i64, i64* %bsp.0, i64 %n1
- %t.0 = load i64, i64* %bsp.1
- %bsp.2 = getelementptr i64, i64* %bsp.0, i64 %n2
- store i64 %t.0, i64* %bsp.2
- ret %S %s.0
-}
+ %bsp.001 = call i64* @pushI(i64 %arg, i64* %bsp.000)
-define private %S @updatepop_b01(%S %s.0) #0 {
- %bsp.0 = extractvalue %S %s.0, 1
- %t.0 = load i64, i64* %bsp.0
- store i64 undef, i64* %bsp.0
- %bsp.1 = getelementptr i64, i64* %bsp.0, i64 1
- store i64 %t.0, i64* %bsp.1
- %s.1 = insertvalue %S %s.0, i64* %bsp.1, 1
- ret %S %s.1
-}
-
-define private i64 @peek_b(%S %s) #0 {
- %bsp = extractvalue %S %s, 1
- %t = load i64, i64* %bsp
- ret i64 %t
-}
+ %bsp.100 = call i64* @pushI(i64 2, i64* %bsp.001)
+ %bsp.101 = call i64* @push_b(i64 1, i64* %bsp.100)
+ %bsp.102 = call i64* @ltI(i64* %bsp.101)
-define private {i64, %S} @_s1(i64 %arg, %S %s.000) #0 {
- %s.001 = call %S @pushI(i64 %arg, %S %s.000)
-
- %s.100 = call %S @pushI(i64 2, %S %s.001)
- %s.101 = call %S @push_b(i64 1, %S %s.100)
- %s.102 = call %S @ltI(%S %s.101)
-
- %t.0 = call i64 @peek_b(%S %s.102)
- %s.103 = call %S @pop_b1(%S %s.102)
+ %t.0 = call i64 @peek_b(i64* %bsp.102)
+ %bsp.103 = call i64* @pop_b1(i64* %bsp.102)
%t.1 = trunc i64 %t.0 to i1
br i1 %t.1, label %l.0, label %else.1
l.0:
- %s.200 = call %S @pop_b1(%S %s.103)
- %s.201 = call %S @pushI(i64 1, %S %s.200)
-
- %r = call i64 @peek_b(%S %s.201)
- %s.202 = call %S @pop_b1(%S %s.201)
+ %bsp.200 = call i64* @pop_b1(i64* %bsp.103)
+ %bsp.201 = call i64* @pushI(i64 1, i64* %bsp.200)
- %rval.0 = insertvalue {i64,%S} undef, i64 %r, 0
- %rval.1 = insertvalue {i64,%S} %rval.0, %S %s.202, 1
- ret {i64, %S} %rval.1
+ %r = call i64 @peek_b(i64* %bsp.201)
+ %bsp.202 = call i64* @pop_b1(i64* %bsp.201)
+ ret i64 %r
else.1:
- %s.300 = call %S @pushI(i64 1, %S %s.103)
- %s.301 = call %S @push_b(i64 1, %S %s.300)
- %s.302 = call %S @subI(%S %s.301)
-
- %arg.0 = call i64 @peek_b(%S %s.302)
- %s.302.0 = call %S @pop_b1(%S %s.302)
- %ret.0 = call {i64,%S} @_s1(i64 %arg.0, %S %s.302.0)
- %r.0 = extractvalue {i64, %S} %ret.0, 0
- %s.302.1 = extractvalue {i64, %S} %ret.0, 1
- %s.303 = call %S @pushI(i64 %r.0, %S %s.302.1)
-
- %s.304 = call %S @pushI(i64 2, %S %s.303)
- %s.305 = call %S @push_b(i64 2, %S %s.304)
- %s.306 = call %S @subI(%S %s.305)
-
- %arg.1 = call i64 @peek_b(%S %s.306)
- %s.306.0 = call %S @pop_b1(%S %s.306)
- %ret.1 = call {i64,%S} @_s1(i64 %arg.1, %S %s.306.0)
- %r.1 = extractvalue {i64, %S} %ret.1, 0
- %s.306.1 = extractvalue {i64, %S} %ret.1, 1
- %s.307 = call %S @pushI(i64 %r.1, %S %s.306.1)
-
- %s.308 = call %S @update_b(i64 1, i64 2, %S %s.307)
- %s.309 = call %S @updatepop_b01(%S %s.308)
- %s.310 = call %S @addI(%S %s.309)
-
- %relse = call i64 @peek_b(%S %s.310)
- %s.311 = call %S @pop_b1(%S %s.310)
-
- %rval.2 = insertvalue {i64,%S} undef, i64 %relse, 0
- %rval.3 = insertvalue {i64,%S} %rval.2, %S %s.311, 1
- ret {i64, %S} %rval.3
+ %bsp.300 = call i64* @pushI(i64 1, i64* %bsp.103)
+ %bsp.301 = call i64* @push_b(i64 1, i64* %bsp.300)
+ %bsp.302 = call i64* @subI(i64* %bsp.301)
+
+ %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)
+ %bsp.303 = call i64* @pushI(i64 %r.0, i64* %bsp.302.0)
+
+ %bsp.304 = call i64* @pushI(i64 2, i64* %bsp.303)
+ %bsp.305 = call i64* @push_b(i64 2, i64* %bsp.304)
+ %bsp.306 = call i64* @subI(i64* %bsp.305)
+
+ %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)
+ %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)
+ %bsp.309 = call i64* @updatepop_b01(i64* %bsp.308)
+ %bsp.310 = call i64* @addI(i64* %bsp.309)
+
+ %relse = call i64 @peek_b(i64* %bsp.310)
+ %bsp.311 = call i64* @pop_b1(i64* %bsp.310)
+ ret i64 %relse
}
-define private {i64, %S} @_s2(i64 %arg, %S %s.000) {
- %ret = tail call {i64,%S} @_s1(i64 %arg, %S %s.000)
- ret {i64, %S} %ret
+define private i64 @_s2(i64 %arg, i64** %globasp) {
+ %ret = tail call i64 @s1(i64 %arg, i64** %globasp)
+ ret i64 %ret
}
define i64 @main() {
- %stack = alloca [10000 x i64]
-
- %asp = getelementptr [10000 x i64], [10000 x i64]* %stack, i64 0, i64 0
- %bsp = getelementptr [10000 x i64], [10000 x i64]* %stack, i64 0, i64 9999
-
- %s.001 = insertvalue %S undef, i64* %asp, 0
- %s.002 = insertvalue %S %s.001, i64* %bsp, 1
+ %heap = bitcast [10000 x i64]* @heap to i64*
+ %astack = bitcast [10000 x i64*]* @astack to i64**
- %ret = call {i64,%S} @_s2(i64 43, %S %s.002)
- %r = extractvalue {i64, %S} %ret, 0
+ %r = call i64 @_s2(i64 43, i64** %astack)
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)