summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/SimplifyCFG/merge-cleanuppads.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms/SimplifyCFG/merge-cleanuppads.ll')
-rw-r--r--llvm/test/Transforms/SimplifyCFG/merge-cleanuppads.ll39
1 files changed, 39 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SimplifyCFG/merge-cleanuppads.ll b/llvm/test/Transforms/SimplifyCFG/merge-cleanuppads.ll
new file mode 100644
index 00000000000..23bbbca7234
--- /dev/null
+++ b/llvm/test/Transforms/SimplifyCFG/merge-cleanuppads.ll
@@ -0,0 +1,39 @@
+; RUN: opt -S -simplifycfg < %s | FileCheck %s
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc18.0.0"
+
+; Function Attrs: uwtable
+define void @test1() #0 personality i32 (...)* @__CxxFrameHandler3 {
+entry:
+ invoke void @may_throw(i32 3)
+ to label %invoke.cont unwind label %ehcleanup
+
+invoke.cont: ; preds = %entry
+ tail call void @may_throw(i32 2) #2
+ tail call void @may_throw(i32 1) #2
+ ret void
+
+ehcleanup: ; preds = %entry
+ %cp = cleanuppad within none []
+ tail call void @may_throw(i32 2) #2 [ "funclet"(token %cp) ]
+ cleanupret from %cp unwind label %ehcleanup2
+
+ehcleanup2:
+ %cp2 = cleanuppad within none []
+ tail call void @may_throw(i32 1) #2 [ "funclet"(token %cp2) ]
+ cleanupret from %cp2 unwind to caller
+}
+
+; CHECK-LABEL: define void @test1(
+; CHECK: %[[cp:.*]] = cleanuppad within none []
+; CHECK: tail call void @may_throw(i32 2) #2 [ "funclet"(token %[[cp]]) ]
+; CHECK: tail call void @may_throw(i32 1) #2 [ "funclet"(token %[[cp]]) ]
+; CHECK: cleanupret from %[[cp]] unwind to caller
+
+declare void @may_throw(i32) #1
+
+declare i32 @__CxxFrameHandler3(...)
+
+attributes #0 = { uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #2 = { nounwind }
OpenPOWER on IntegriCloud