summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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