diff options
author | Arnold Schwaighofer <aschwaighofer@apple.com> | 2016-09-22 20:06:25 +0000 |
---|---|---|
committer | Arnold Schwaighofer <aschwaighofer@apple.com> | 2016-09-22 20:06:25 +0000 |
commit | 0fd32c005b3d082a0f593d7753ef652c8d265224 (patch) | |
tree | 713b443f5028fe7ce5fa1e162f22cd9fdafba773 | |
parent | c4b1d20ba2952e1699ec5c44dd532fa8e9bf042c (diff) | |
download | bcm5719-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.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.h | 4 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/swifterror.ll | 17 |
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 +} |