diff options
author | Evan Cheng <evan.cheng@apple.com> | 2010-02-03 03:28:02 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2010-02-03 03:28:02 +0000 |
commit | 40905b43024caf6781fdc20a458a5a862cc9897b (patch) | |
tree | 4bab76dc759fd55c6bffd82c848d5143d7a47acf /llvm/test | |
parent | c434394d183a00235f8773de831b447d35e1963c (diff) | |
download | bcm5719-llvm-40905b43024caf6781fdc20a458a5a862cc9897b.tar.gz bcm5719-llvm-40905b43024caf6781fdc20a458a5a862cc9897b.zip |
Allow all types of callee's to be tail called. But avoid automatic tailcall if the callee is a result of bitcast to avoid losing necessary zext / sext etc.
llvm-svn: 95195
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/X86/tailcall2.ll | 25 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/tailcallfp2.ll | 6 |
2 files changed, 28 insertions, 3 deletions
diff --git a/llvm/test/CodeGen/X86/tailcall2.ll b/llvm/test/CodeGen/X86/tailcall2.ll index e41e3da4f80..81419dc387e 100644 --- a/llvm/test/CodeGen/X86/tailcall2.ll +++ b/llvm/test/CodeGen/X86/tailcall2.ll @@ -102,3 +102,28 @@ entry: } declare i32 @bar2(i32, i32, i32) + +define signext i16 @t8() nounwind ssp { +entry: +; 32: t8: +; 32: jmp {{_?}}bar3 + +; 64: t8: +; 64: jmp {{_?}}bar3 + %0 = tail call signext i16 @bar3() nounwind ; <i16> [#uses=1] + ret i16 %0 +} + +declare signext i16 @bar3() + +define signext i16 @t9(i32 (i32)* nocapture %x) nounwind ssp { +entry: +; 32: t9: +; 32: call * + +; 64: t9: +; 64: callq * + %0 = bitcast i32 (i32)* %x to i16 (i32)* + %1 = tail call signext i16 %0(i32 0) nounwind + ret i16 %1 +} diff --git a/llvm/test/CodeGen/X86/tailcallfp2.ll b/llvm/test/CodeGen/X86/tailcallfp2.ll index be4f96cfb5e..3841f518976 100644 --- a/llvm/test/CodeGen/X86/tailcallfp2.ll +++ b/llvm/test/CodeGen/X86/tailcallfp2.ll @@ -2,7 +2,7 @@ declare i32 @putchar(i32) -define fastcc i32 @checktail(i32 %x, i32* %f, i32 %g) { +define fastcc i32 @checktail(i32 %x, i32* %f, i32 %g) nounwind { %tmp1 = icmp sgt i32 %x, 0 br i1 %tmp1, label %if-then, label %if-else @@ -18,8 +18,8 @@ if-else: } -define i32 @main() { +define i32 @main() nounwind { %f = bitcast i32 (i32, i32*, i32)* @checktail to i32* %res = tail call fastcc i32 @checktail( i32 10, i32* %f,i32 10) ret i32 %res -}
\ No newline at end of file +} |