summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancis Visoiu Mistrih <francisvm@yahoo.com>2019-04-05 20:18:25 +0000
committerFrancis Visoiu Mistrih <francisvm@yahoo.com>2019-04-05 20:18:25 +0000
commit9d9d1b6b2ba079c83bad5a00c8189b86ef14ae03 (patch)
tree8b2f16f32fbbca72c7bbd7c05eb4fc5ec59173a3
parentab051a378c9c84314c3b613cc37d9c424036d481 (diff)
downloadbcm5719-llvm-9d9d1b6b2ba079c83bad5a00c8189b86ef14ae03.tar.gz
bcm5719-llvm-9d9d1b6b2ba079c83bad5a00c8189b86ef14ae03.zip
[X86] Enable tail calls for CallingConv::Swift
It's currently only enabled on AArch64 (enabled in r281376). llvm-svn: 357809
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp2
-rw-r--r--llvm/test/CodeGen/X86/swiftcc.ll18
2 files changed, 16 insertions, 4 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 6ad615a94e9..0e0d07b349f 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -2941,6 +2941,8 @@ static bool mayTailCallThisCC(CallingConv::ID CC) {
case CallingConv::X86_StdCall:
case CallingConv::X86_VectorCall:
case CallingConv::X86_FastCall:
+ // Swift:
+ case CallingConv::Swift:
return true;
default:
return canGuaranteeTCO(CC);
diff --git a/llvm/test/CodeGen/X86/swiftcc.ll b/llvm/test/CodeGen/X86/swiftcc.ll
index dc36ee247f1..2e71307fe76 100644
--- a/llvm/test/CodeGen/X86/swiftcc.ll
+++ b/llvm/test/CodeGen/X86/swiftcc.ll
@@ -1,11 +1,21 @@
-; RUN: llc -mtriple x86_64-unknown-windows-msvc -filetype asm -o - %s | FileCheck %s
+; RUN: llc -mtriple x86_64-- -filetype asm -o - %s | FileCheck %s
+; RUN: llc -mtriple x86_64-unknown-windows-msvc -filetype asm -o - %s | FileCheck %s --check-prefix=MSVC
define swiftcc void @f() {
%1 = alloca i8
ret void
}
-; CHECK-LABEL: f
-; CHECK: .seh_stackalloc 8
-; CHECK: .seh_endprologue
+; MSVC-LABEL: f
+; MSVC: .seh_stackalloc 8
+; MSVC: .seh_endprologue
+declare swiftcc i64 @myFunc()
+define swiftcc i64 @myFunc2() nounwind {
+ %r = tail call swiftcc i64 @myFunc()
+ ret i64 %r
+}
+
+; CHECK-LABEL: myFunc2
+; CHECK: jmp myFunc
+; CHECK-NOT: call
OpenPOWER on IntegriCloud