summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2012-01-19 00:34:10 +0000
committerNick Lewycky <nicholas@mxc.ca>2012-01-19 00:34:10 +0000
commit22de16dc7582dac43429ce0dcb374604020c01f5 (patch)
treecdf90f822164c39bf7a6c99518381a49b0cbf7b7 /test
parent9b159710ebe8a37cba38ca0c5b465e362bd68af7 (diff)
downloadllvm-22de16dc7582dac43429ce0dcb374604020c01f5.tar.gz
llvm-22de16dc7582dac43429ce0dcb374604020c01f5.tar.bz2
llvm-22de16dc7582dac43429ce0dcb374604020c01f5.tar.xz
Add a TargetOption for disabling tail calls.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148442 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/CodeGen/X86/tailcall-disable.ll40
1 files changed, 40 insertions, 0 deletions
diff --git a/test/CodeGen/X86/tailcall-disable.ll b/test/CodeGen/X86/tailcall-disable.ll
new file mode 100644
index 0000000000..a561b74609
--- /dev/null
+++ b/test/CodeGen/X86/tailcall-disable.ll
@@ -0,0 +1,40 @@
+; RUN: llc -disable-tail-calls < %s | FileCheck --check-prefix=CALL %s
+; RUN: llc < %s | FileCheck --check-prefix=JMP %s
+
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define i32 @helper() nounwind {
+entry:
+ ret i32 7
+}
+
+define i32 @test1() nounwind {
+entry:
+ %call = tail call i32 @helper()
+ ret i32 %call
+}
+
+;CALL: test1:
+;CALL-NOT: ret
+;CALL: callq helper
+;CALL: ret
+
+;JMP: test1:
+;JMP-NOT: ret
+;JMP: jmp helper # TAILCALL
+
+define i32 @test2() nounwind {
+entry:
+ %call = tail call i32 @test2()
+ ret i32 %call
+}
+
+;CALL: test2:
+;CALL-NOT: ret
+;CALL: callq test2
+;CALL: ret
+
+;JMP: test2:
+;JMP-NOT: ret
+;JMP: jmp test2 # TAILCALL