diff options
author | Arnold Schwaighofer <arnold.schwaighofer@gmail.com> | 2007-10-11 19:40:01 +0000 |
---|---|---|
committer | Arnold Schwaighofer <arnold.schwaighofer@gmail.com> | 2007-10-11 19:40:01 +0000 |
commit | e2d6bbb00da7530c4f8846774bfeddeef56f66ed (patch) | |
tree | e6e745a81699085d757db166e645f8a6639cde7a /test | |
parent | e702a31df3fd7c0076ffdc51d69753712c7b08af (diff) | |
download | external_llvm-e2d6bbb00da7530c4f8846774bfeddeef56f66ed.zip external_llvm-e2d6bbb00da7530c4f8846774bfeddeef56f66ed.tar.gz external_llvm-e2d6bbb00da7530c4f8846774bfeddeef56f66ed.tar.bz2 |
Added tail call optimization to the x86 back end. It can be
enabled by passing -tailcallopt to llc. The optimization is
performed if the following conditions are satisfied:
* caller/callee are fastcc
* elf/pic is disabled OR
elf/pic enabled + callee is in module + callee has
visibility protected or hidden
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42870 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGen/X86/tailcall1.ll | 11 | ||||
-rw-r--r-- | test/CodeGen/X86/tailcallpic1.ll | 12 | ||||
-rw-r--r-- | test/CodeGen/X86/tailcallpic2.ll | 12 |
3 files changed, 35 insertions, 0 deletions
diff --git a/test/CodeGen/X86/tailcall1.ll b/test/CodeGen/X86/tailcall1.ll new file mode 100644 index 0000000..74687f5 --- /dev/null +++ b/test/CodeGen/X86/tailcall1.ll @@ -0,0 +1,11 @@ +; RUN: llvm-as < %s | llc -tailcallopt | grep TAILCALL +define fastcc i32 @tailcallee(i32 %a1, i32 %a2, i32 %a3, i32 %a4) { +entry: + ret i32 %a3 +} + +define fastcc i32 @tailcaller(i32 %in1, i32 %in2) { +entry: + %tmp11 = tail call fastcc i32 @tailcallee( i32 %in1, i32 %in2, i32 %in1, i32 %in2 ) ; <i32> [#uses=1] + ret i32 %tmp11 +} diff --git a/test/CodeGen/X86/tailcallpic1.ll b/test/CodeGen/X86/tailcallpic1.ll new file mode 100644 index 0000000..54074eb --- /dev/null +++ b/test/CodeGen/X86/tailcallpic1.ll @@ -0,0 +1,12 @@ +; RUN: llvm-as < %s | llc -tailcallopt -mtriple=i686-pc-linux-gnu -relocation-model=pic | grep TAILCALL + +define protected fastcc i32 @tailcallee(i32 %a1, i32 %a2, i32 %a3, i32 %a4) { +entry: + ret i32 %a3 +} + +define fastcc i32 @tailcaller(i32 %in1, i32 %in2) { +entry: + %tmp11 = tail call fastcc i32 @tailcallee( i32 %in1, i32 %in2, i32 %in1, i32 %in2 ) ; <i32> [#uses=1] + ret i32 %tmp11 +} diff --git a/test/CodeGen/X86/tailcallpic2.ll b/test/CodeGen/X86/tailcallpic2.ll new file mode 100644 index 0000000..60818e4 --- /dev/null +++ b/test/CodeGen/X86/tailcallpic2.ll @@ -0,0 +1,12 @@ +; RUN: llvm-as < %s | llc -tailcallopt -mtriple=i686-pc-linux-gnu -relocation-model=pic | grep -v TAILCALL + +define fastcc i32 @tailcallee(i32 %a1, i32 %a2, i32 %a3, i32 %a4) { +entry: + ret i32 %a3 +} + +define fastcc i32 @tailcaller(i32 %in1, i32 %in2) { +entry: + %tmp11 = tail call fastcc i32 @tailcallee( i32 %in1, i32 %in2, i32 %in1, i32 %in2 ) ; <i32> [#uses=1] + ret i32 %tmp11 +} |