Mercurial > hg > Members > tobaru > cbc > CbC_llvm
diff test/Feature/indirectcall.ll @ 3:9ad51c7bc036
1st commit. remove git dir and add all files.
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 15 May 2013 06:43:32 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/Feature/indirectcall.ll Wed May 15 06:43:32 2013 +0900 @@ -0,0 +1,49 @@ +; RUN: llvm-as < %s | llvm-dis > %t1.ll +; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll +; RUN: diff %t1.ll %t2.ll + +declare i32 @atoi(i8*) + +define i64 @fib(i64 %n) { + icmp ult i64 %n, 2 ; <i1>:1 [#uses=1] + br i1 %1, label %BaseCase, label %RecurseCase + +BaseCase: ; preds = %0 + ret i64 1 + +RecurseCase: ; preds = %0 + %n2 = sub i64 %n, 2 ; <i64> [#uses=1] + %n1 = sub i64 %n, 1 ; <i64> [#uses=1] + %f2 = call i64 @fib( i64 %n2 ) ; <i64> [#uses=1] + %f1 = call i64 @fib( i64 %n1 ) ; <i64> [#uses=1] + %result = add i64 %f2, %f1 ; <i64> [#uses=1] + ret i64 %result +} + +define i64 @realmain(i32 %argc, i8** %argv) { +; <label>:0 + icmp eq i32 %argc, 2 ; <i1>:1 [#uses=1] + br i1 %1, label %HasArg, label %Continue + +HasArg: ; preds = %0 + %n1 = add i32 1, 1 ; <i32> [#uses=1] + br label %Continue + +Continue: ; preds = %HasArg, %0 + %n = phi i32 [ %n1, %HasArg ], [ 1, %0 ] ; <i32> [#uses=1] + %N = sext i32 %n to i64 ; <i64> [#uses=1] + %F = call i64 @fib( i64 %N ) ; <i64> [#uses=1] + ret i64 %F +} + +define i64 @trampoline(i64 %n, i64 (i64)* %fibfunc) { + %F = call i64 %fibfunc( i64 %n ) ; <i64> [#uses=1] + ret i64 %F +} + +define i32 @main() { + %Result = call i64 @trampoline( i64 10, i64 (i64)* @fib ) ; <i64> [#uses=1] + %Result.upgrd.1 = trunc i64 %Result to i32 ; <i32> [#uses=1] + ret i32 %Result.upgrd.1 +} +