summaryrefslogtreecommitdiff
path: root/test/Transforms/Inline
diff options
context:
space:
mode:
authorManman Ren <manman.ren@gmail.com>2013-10-31 21:56:03 +0000
committerManman Ren <manman.ren@gmail.com>2013-10-31 21:56:03 +0000
commitef34496b3fc197fe03da6fd86214d5e9b37d4368 (patch)
tree0419c5fa3cc764590626843f489298fa24737f43 /test/Transforms/Inline
parentfe0ae1db3afa3ae85d2b8ea8a18e74f21a958764 (diff)
downloadllvm-ef34496b3fc197fe03da6fd86214d5e9b37d4368.tar.gz
llvm-ef34496b3fc197fe03da6fd86214d5e9b37d4368.tar.bz2
llvm-ef34496b3fc197fe03da6fd86214d5e9b37d4368.tar.xz
Do not convert "call asm" to "invoke asm" in Inliner.
Given that backend does not handle "invoke asm" correctly ("invoke asm" will be handled by SelectionDAGBuilder::visitInlineAsm, which does not have the right setup for LPadToCallSiteMap) and we already made the assumption that inline asm does not throw in InstCombiner::visitCallSite, we are going to make the same assumption in Inliner to make sure we don't convert "call asm" to "invoke asm". If it becomes necessary to add support for "invoke asm" later on, we will need to modify the backend as well as remove the assumptions that inline asm does not throw. Fix rdar://15317907 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193808 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/Inline')
-rw-r--r--test/Transforms/Inline/inline_invoke_with_asm_call.ll30
1 files changed, 30 insertions, 0 deletions
diff --git a/test/Transforms/Inline/inline_invoke_with_asm_call.ll b/test/Transforms/Inline/inline_invoke_with_asm_call.ll
new file mode 100644
index 0000000000..c1fb57d26b
--- /dev/null
+++ b/test/Transforms/Inline/inline_invoke_with_asm_call.ll
@@ -0,0 +1,30 @@
+; RUN: opt < %s -inline -S | FileCheck %s
+target triple = "x86_64-apple-darwin"
+
+; rdar://15317907
+; CHECK-LABEL: @caller
+; Make sure we are generating "call asm" instead of "invoke asm".
+; CHECK: call void asm
+; CHECK-LABEL: @callee_with_asm
+define void @caller() {
+ br i1 undef, label %1, label %4
+
+; <label>:1
+ invoke void @callee_with_asm()
+ to label %4 unwind label %2
+
+; <label>:2
+ %3 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__objc_personality_v0 to i8*)
+ cleanup
+ resume { i8*, i32 } undef
+
+; <label>:4
+ ret void
+}
+
+define void @callee_with_asm() {
+ call void asm sideeffect "mov\09r7, r7\09\09@ marker for objc_retainAutoreleaseReturnValue", ""()
+ ret void
+}
+
+declare i32 @__objc_personality_v0(...)