summaryrefslogtreecommitdiff
path: root/test/Transforms/DeadArgElim/funclet.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/Transforms/DeadArgElim/funclet.ll')
-rw-r--r--test/Transforms/DeadArgElim/funclet.ll29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/Transforms/DeadArgElim/funclet.ll b/test/Transforms/DeadArgElim/funclet.ll
new file mode 100644
index 0000000000000..36b0d3aa626d6
--- /dev/null
+++ b/test/Transforms/DeadArgElim/funclet.ll
@@ -0,0 +1,29 @@
+; RUN: opt -S -deadargelim < %s | FileCheck %s
+target triple = "x86_64-pc-windows-msvc"
+
+define internal void @callee(i8*) {
+entry:
+ call void @thunk()
+ ret void
+}
+
+define void @test1() personality i32 (...)* @__CxxFrameHandler3 {
+entry:
+ invoke void @thunk()
+ to label %good1 unwind label %bad1
+
+good1: ; preds = %entry-block
+ ret void
+
+bad1: ; preds = %entry-block
+ %pad1 = cleanuppad within none []
+ call void @callee(i8* null) [ "funclet"(token %pad1) ]
+ cleanupret from %pad1 unwind to caller
+}
+; CHECK-LABEL: define void @test1(
+; CHECK: %[[pad:.*]] = cleanuppad within none []
+; CHECK-NEXT: call void @callee() [ "funclet"(token %[[pad]]) ]
+
+declare void @thunk()
+
+declare i32 @__CxxFrameHandler3(...)