67cff4e754f0a632c757b1b0ab83b9ca182e78d4
[oota-llvm.git] / test / Integer / indirectcall_bt.ll
1 ; RUN: llvm-as %s -o - | llvm-dis > %t1.ll
2 ; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
3 ; RUN: diff %t1.ll %t2.ll
4
5 implementation
6
7 declare i32 @"atoi"(i8 *)
8
9 define i63 @"fib"(i63 %n)
10 begin
11   icmp ult i63 %n, 2       ; {i1}:1
12   br i1 %1, label %BaseCase, label %RecurseCase
13
14 BaseCase:
15   ret i63 1
16
17 RecurseCase:
18   %n2 = sub i63 %n, 2
19   %n1 = sub i63 %n, 1
20   %f2 = call i63(i63) * @fib(i63 %n2)
21   %f1 = call i63(i63) * @fib(i63 %n1)
22   %result = add i63 %f2, %f1
23   ret i63 %result
24 end
25
26 define i63 @"realmain"(i32 %argc, i8 ** %argv)
27 begin
28   icmp eq i32 %argc, 2      ; {i1}:1
29   br i1 %1, label %HasArg, label %Continue
30 HasArg:
31   ; %n1 = atoi(argv[1])
32   %n1 = add i32 1, 1
33   br label %Continue
34
35 Continue:
36   %n = phi i32 [%n1, %HasArg], [1, %0]
37   %N = sext i32 %n to i63
38   %F = call i63(i63) *@fib(i63 %N)
39   ret i63 %F
40 end
41
42 define i63 @"trampoline"(i63 %n, i63(i63)* %fibfunc)
43 begin
44   %F = call i63(i63) *%fibfunc(i63 %n)
45   ret i63 %F
46 end
47
48 define i32 @"main"()
49 begin
50   %Result = call i63 @trampoline(i63 10, i63(i63) *@fib)
51   %Result2 = trunc i63 %Result to i32
52   ret i32 %Result2
53 end