summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/WinEH/wineh-cloning.ll
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2015-11-19 23:23:33 +0000
committerReid Kleckner <rnk@google.com>2015-11-19 23:23:33 +0000
commitcc2f6c35a357aa7e6ec682d7882be4df09cecca8 (patch)
tree182f7422a6b3aeae28cca2175fb79cce16668128 /llvm/test/CodeGen/WinEH/wineh-cloning.ll
parent9d47212194cc93fb8ca5229afbbf05ba2bc4d261 (diff)
downloadbcm5719-llvm-cc2f6c35a357aa7e6ec682d7882be4df09cecca8.tar.gz
bcm5719-llvm-cc2f6c35a357aa7e6ec682d7882be4df09cecca8.zip
[WinEH] Disable most forms of demotion
Now that the register allocator knows about the barriers on funclet entry and exit, testing has shown that this is unnecessary. We still demote PHIs on unsplittable blocks due to the differences between the IR CFG and the Machine CFG. llvm-svn: 253619
Diffstat (limited to 'llvm/test/CodeGen/WinEH/wineh-cloning.ll')
-rw-r--r--llvm/test/CodeGen/WinEH/wineh-cloning.ll18
1 files changed, 8 insertions, 10 deletions
diff --git a/llvm/test/CodeGen/WinEH/wineh-cloning.ll b/llvm/test/CodeGen/WinEH/wineh-cloning.ll
index 58bf71e62b6..7d6529d6009 100644
--- a/llvm/test/CodeGen/WinEH/wineh-cloning.ll
+++ b/llvm/test/CodeGen/WinEH/wineh-cloning.ll
@@ -29,18 +29,16 @@ endcatch:
; for the use in entry's copy.
; CHECK-LABEL: define void @test1(
; CHECK: entry:
-; CHECK: store i32 %x, i32* [[Slot:%[^ ]+]]
+; CHECK: %x = call i32 @g()
; CHECK: invoke void @f()
; CHECK: to label %[[EntryCopy:[^ ]+]] unwind label %catch
; CHECK: catch:
; CHECK: catchpad []
; CHECK-NEXT: to label %[[CatchCopy:[^ ]+]] unwind
; CHECK: [[CatchCopy]]:
-; CHECK: [[LoadX2:%[^ ]+]] = load i32, i32* [[Slot]]
-; CHECK: call void @h(i32 [[LoadX2]]
+; CHECK: call void @h(i32 %x)
; CHECK: [[EntryCopy]]:
-; CHECK: [[LoadX1:%[^ ]+]] = load i32, i32* [[Slot]]
-; CHECK: call void @h(i32 [[LoadX1]]
+; CHECK: call void @h(i32 %x)
define void @test2() personality i32 (...)* @__CxxFrameHandler3 {
@@ -281,12 +279,14 @@ exit:
; then calls @h, and that the call to @h doesn't return.
; CHECK-LABEL: define void @test6(
; CHECK: left:
+; CHECK: %x.for.left = call i32 @g()
+; CHECK: invoke void @f()
; CHECK: to label %[[SHARED_CONT_LEFT:.+]] unwind label %[[INNER_LEFT:.+]]
; CHECK: right:
+; CHECK: catchpad
; CHECK: to label %right.catch unwind label %right.end
; CHECK: right.catch:
; CHECK: %x = call i32 @g()
-; CHECK: store i32 %x, i32* %x.wineh.spillslot
; CHECK: to label %shared.cont unwind label %[[INNER_RIGHT:.+]]
; CHECK: right.end:
; CHECK: catchendpad unwind to caller
@@ -296,13 +296,11 @@ exit:
; CHECK: unreachable
; CHECK: [[INNER_RIGHT]]:
; CHECK: [[I_R:\%.+]] = cleanuppad []
-; CHECK: [[X_RELOAD_R:\%.+]] = load i32, i32* %x.wineh.spillslot
-; CHECK: call void @h(i32 [[X_RELOAD_R]])
+; CHECK: call void @h(i32 %x)
; CHECK: cleanupret [[I_R]] unwind label %right.end
; CHECK: [[INNER_LEFT]]:
; CHECK: [[I_L:\%.+]] = cleanuppad []
-; CHECK: [[X_RELOAD_L:\%.+]] = load i32, i32* %x.wineh.spillslot
-; CHECK: call void @h(i32 [[X_RELOAD_L]])
+; CHECK: call void @h(i32 %x.for.left)
; CHECK: unreachable
OpenPOWER on IntegriCloud