zpu: managed to compile program that writes constant to global variable
[llvm/zpu.git] / test / Integer / indirectcall_bt.ll
blobd586fca821f2e83e884e7fab2d1f723652d55504
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
6 declare i32 @"atoi"(i8 *)
8 define i63 @"fib"(i63 %n)
9 begin
10   icmp ult i63 %n, 2       ; {i1}:1
11   br i1 %1, label %BaseCase, label %RecurseCase
13 BaseCase:
14   ret i63 1
16 RecurseCase:
17   %n2 = sub i63 %n, 2
18   %n1 = sub i63 %n, 1
19   %f2 = call i63(i63) * @fib(i63 %n2)
20   %f1 = call i63(i63) * @fib(i63 %n1)
21   %result = add i63 %f2, %f1
22   ret i63 %result
23 end
25 define i63 @"realmain"(i32 %argc, i8 ** %argv)
26 begin
27   icmp eq i32 %argc, 2      ; {i1}:1
28   br i1 %1, label %HasArg, label %Continue
29 HasArg:
30   ; %n1 = atoi(argv[1])
31   %n1 = add i32 1, 1
32   br label %Continue
34 Continue:
35   %n = phi i32 [%n1, %HasArg], [1, %0]
36   %N = sext i32 %n to i63
37   %F = call i63(i63) *@fib(i63 %N)
38   ret i63 %F
39 end
41 define i63 @"trampoline"(i63 %n, i63(i63)* %fibfunc)
42 begin
43   %F = call i63(i63) *%fibfunc(i63 %n)
44   ret i63 %F
45 end
47 define i32 @"main"()
48 begin
49   %Result = call i63 @trampoline(i63 10, i63(i63) *@fib)
50   %Result2 = trunc i63 %Result to i32
51   ret i32 %Result2
52 end