aboutsummaryrefslogtreecommitdiff
path: root/nfib.ll
blob: 900bf16657d760e947bdf188a9d91d622dc7431b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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
  %bsp.000 = getelementptr i64, i64* %bstack, i64 9999

  %bsp.001 = call i64* @pushI(i64 %arg, i64* %bsp.000)

  %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)

  %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:
  %bsp.200 = call i64* @pop_b1(i64* %bsp.103)
  %bsp.201 = call i64* @pushI(i64 1, i64* %bsp.200)

  %r = call i64 @peek_b(i64* %bsp.201)
  %bsp.202 = call i64* @pop_b1(i64* %bsp.201)
  ret i64 %r

else.1:
  %bsp.300 = call i64* @pushI(i64 2, 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** %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)
  %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** %globasp, i64 %arg.1)
  %bsp.307 = call i64* @pushI(i64 %r.1, i64* %bsp.306.0)

  %bsp.308 = call i64* @addI(i64* %bsp.307)
  %bsp.309 = call i64* @pushI(i64 1, i64* %bsp.308)
  %bsp.310 = call i64* @push_b(i64 1, i64* %bsp.309)
  %bsp.311 = call i64* @update_b(i64 1, i64 2, i64* %bsp.310)
  %bsp.312 = call i64* @update_b(i64 0, i64 1, i64* %bsp.311)
  %bsp.313 = call i64* @pop_b1(i64* %bsp.312)
  %bsp.314 = call i64* @update_b(i64 1, i64 2, i64* %bsp.313)
  %bsp.315 = call i64* @updatepop_b01(i64* %bsp.314)
  %bsp.316 = call i64* @addI(i64* %bsp.315)

  %relse = call i64 @peek_b(i64* %bsp.316)
  %bsp.317 = call i64* @pop_b1(i64* %bsp.316)
  ret i64 %relse
}

define private i64 @s2(i64** %globasp, i64 %arg) {
  %ret = tail call i64 @s1(i64** %globasp, i64 %arg)
  ret i64 %ret
}

define i64 @main() {
  %heap = call i64* @_alloc_heap(i64 1000)
  %astack = call i64** @_alloc_a_stack(i64 1000)

  %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)

  ret i64 0
}