diff options
| -rw-r--r-- | fib_eqI_b.ll | 4 | ||||
| -rw-r--r-- | fib_ltI.ll | 4 | ||||
| -rw-r--r-- | nfib.ll | 4 | ||||
| -rw-r--r-- | nfib_nsa.ll | 4 | ||||
| -rw-r--r-- | rts.ll | 29 | 
5 files changed, 34 insertions, 11 deletions
| diff --git a/fib_eqI_b.ll b/fib_eqI_b.ll index 58be88a..12a3c95 100644 --- a/fib_eqI_b.ll +++ b/fib_eqI_b.ll @@ -133,8 +133,8 @@ case.3:  }  define i64 @main() { -  %hp.0 = bitcast [100000000 x i64]* @heap to i64* -  %astack = bitcast [10000 x i64*]* @astack to i64** +  %hp.0 = call i64* @_alloc_heap(i64 10000) +  %astack = call i64** @_alloc_a_stack(i64 10000)    %n.0 = getelementptr i64, i64* %hp.0    %INT.0 = ptrtoint {i64, i64, i64*, i64, i8, i8, i8}* @INT to i64 @@ -57,8 +57,8 @@ define private i64 @_s2(i64 %arg, i64** %globasp) {  }  define i64 @main() { -  %heap = bitcast [100000000 x i64]* @heap to i64* -  %astack = bitcast [10000 x i64*]* @astack to i64** +  %heap = call i64* @_alloc_heap(i64 10000) +  %astack = call i64** @_alloc_a_stack(i64 10000)    %r = call i64 @_s2(i64 43, i64** %astack) @@ -63,8 +63,8 @@ define private i64 @_s2(i64 %arg, i64** %globasp) {  }  define i64 @main() { -  %heap = bitcast [100000000 x i64]* @heap to i64* -  %astack = bitcast [10000 x i64*]* @astack to i64** +  %heap = call i64* @_alloc_heap(i64 1000) +  %astack = call i64** @_alloc_a_stack(i64 1000)    %r = call i64 @_s2(i64 43, i64** %astack) diff --git a/nfib_nsa.ll b/nfib_nsa.ll index 051cdb0..f7843a7 100644 --- a/nfib_nsa.ll +++ b/nfib_nsa.ll @@ -218,8 +218,8 @@ define private {i64, i64*} @s2 (i64 %arg1, i64 %arg2, i64* %hp.0) {  }  define i64 @main() { -  %hp.0 = bitcast [100000000 x i64]* @heap to i64* -  %astack = bitcast [10000 x i64*]* @astack to i64** +  %hp.0 = call i64* @_alloc_heap(i64 100000000) +  %astack = 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 @@ -1,15 +1,38 @@  target triple = "x86_64-pc-linux-gnu" +declare i8* @malloc(i64) +  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  @printf_cycle = private unnamed_addr constant [16 x i8] c"cycle in spine\0a\00", align 1 -@heap = global [100000000 x i64] zeroinitializer, align 16 -@astack = global [10000 x i64*] zeroinitializer, align 16 -  attributes #0 = { alwaysinline } +define private i64* @_alloc_heap(i64 %n) alwaysinline { +  %s.0 = alloca i64 +  %s.1 = getelementptr i64, i64* %s.0, i64 1 +  %s.0.0 = ptrtoint i64* %s.0 to i64 +  %s.1.0 = ptrtoint i64* %s.1 to i64 +  %s.2 = sub i64 %s.1.0, %s.0.0 +  %s.3 = mul i64 %s.2, %n +  %r.0 = call i8* @malloc(i64 %s.3) +  %r.1 = bitcast i8* %r.0 to i64* +  ret i64* %r.1 +} + +define private i64** @_alloc_a_stack(i64 %n) alwaysinline { +  %s.0 = alloca i64* +  %s.1 = getelementptr i64*, i64** %s.0, i64 1 +  %s.0.0 = ptrtoint i64** %s.0 to i64 +  %s.1.0 = ptrtoint i64** %s.1 to i64 +  %s.2 = sub i64 %s.1.0, %s.0.0 +  %s.3 = mul i64 %s.2, %n +  %r.0 = call i8* @malloc(i64 %s.3) +  %r.1 = bitcast i8* %r.0 to i64** +  ret i64** %r.1 +} +  define private i64** @_push_local_astack(i64** %asp.0, i64** %aspstart, i64** %globasp.0) #0 {  entry:    br label %loop | 
