summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold Schwaighofer <aschwaighofer@apple.com>2016-09-22 20:06:25 +0000
committerArnold Schwaighofer <aschwaighofer@apple.com>2016-09-22 20:06:25 +0000
commit0fd32c005b3d082a0f593d7753ef652c8d265224 (patch)
tree713b443f5028fe7ce5fa1e162f22cd9fdafba773
parentc4b1d20ba2952e1699ec5c44dd532fa8e9bf042c (diff)
downloadbcm5719-llvm-0fd32c005b3d082a0f593d7753ef652c8d265224.tar.gz
bcm5719-llvm-0fd32c005b3d082a0f593d7753ef652c8d265224.zip
i386 does not support optimized swifterror handling
rdar://28432565 llvm-svn: 282186
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp4
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.h4
-rw-r--r--llvm/test/CodeGen/X86/swifterror.ll17
3 files changed, 22 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 9477f4db400..3cd80394f5b 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -32573,3 +32573,7 @@ void X86TargetLowering::insertCopiesSplitCSR(
.addReg(NewVR);
}
}
+
+bool X86TargetLowering::supportSwiftError() const {
+ return Subtarget.is64Bit();
+}
diff --git a/llvm/lib/Target/X86/X86ISelLowering.h b/llvm/lib/Target/X86/X86ISelLowering.h
index ab32487fc41..6366ef48118 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.h
+++ b/llvm/lib/Target/X86/X86ISelLowering.h
@@ -1022,9 +1022,7 @@ namespace llvm {
bool isIntDivCheap(EVT VT, AttributeSet Attr) const override;
- bool supportSwiftError() const override {
- return true;
- }
+ bool supportSwiftError() const override;
protected:
std::pair<const TargetRegisterClass *, uint8_t>
diff --git a/llvm/test/CodeGen/X86/swifterror.ll b/llvm/test/CodeGen/X86/swifterror.ll
index b7226eb2b4e..b88907eaa3a 100644
--- a/llvm/test/CodeGen/X86/swifterror.ll
+++ b/llvm/test/CodeGen/X86/swifterror.ll
@@ -1,5 +1,6 @@
; RUN: llc -verify-machineinstrs < %s -mtriple=x86_64-apple-darwin | FileCheck --check-prefix=CHECK-APPLE %s
; RUN: llc -verify-machineinstrs -O0 < %s -mtriple=x86_64-apple-darwin | FileCheck --check-prefix=CHECK-O0 %s
+; RUN: llc -verify-machineinstrs < %s -mtriple=i386-apple-darwin | FileCheck --check-prefix=CHECK-i386 %s
declare i8* @malloc(i64)
declare void @free(i8*)
@@ -478,3 +479,19 @@ entry:
%0 = tail call swiftcc float @tailcallswifterror_swiftcc(%swift_error** swifterror %error_ptr_ref)
ret float %0
}
+
+; Check that we can handle an empty function with swifterror argument.
+; CHECK-i386-LABEL: empty_swiftcc:
+; CHECK-i386: movl 4(%esp), %eax
+; CHECK-i386: movl 8(%esp), %edx
+; CHECK-i386: movl 12(%esp), %ecx
+; CHECK-i386: retl
+; CHECK-APPLE-LABEL: empty_swiftcc:
+; CHECK-APPLE: movl %edx, %ecx
+; CHECK-APPLE: movl %edi, %eax
+; CHECK-APPLE: movl %esi, %edx
+; CHECK-APPLE: retq
+define swiftcc {i32, i32, i32} @empty_swiftcc({i32, i32, i32} , %swift_error** swifterror %error_ptr_ref) {
+entry:
+ ret {i32, i32, i32} %0
+}
OpenPOWER on IntegriCloud