1 ; RUN: opt -mtriple=x86_x64-pc-windows-msvc -S -winehprepare -disable-demotion < %s | FileCheck %s
3 declare i32 @__CxxFrameHandler3(...)
11 ; CHECK-LABEL: @test1(
12 define void @test1() personality i32 (...)* @__CxxFrameHandler3 {
15 to label %invoke.cont1 unwind label %left
19 to label %invoke.cont2 unwind label %right
23 to label %exit unwind label %inner
36 to label %shared.cont unwind label %inner
42 %phi = phi i32 [ %x, %shared ], [ 0, %invoke.cont2 ]
44 call void @h(i32 %phi)
47 ; CHECK [[INNER_INVOKE_CONT2:inner.*]]:
48 ; CHECK: call void @h(i32 0)
50 ; CHECK [[INNER_RIGHT:inner.*]]:
51 ; CHECK: call void @h(i32 %x)
53 ; CHECK [[INNER_LEFT:inner.*]]:
54 ; CHECK: call void @h(i32 %x.for.left)
60 ; CHECK-LABEL: @test2(
61 define void @test2() personality i32 (...)* @__CxxFrameHandler3 {
64 to label %invoke.cont unwind label %left
68 to label %exit unwind label %right
81 to label %shared.cont unwind label %inner
91 ; CHECK [[INNER_RIGHT:inner.*]]:
92 ; CHECK: call void @h(i32 %x)
94 ; CHECK [[INNER_LEFT:inner.*]]:
95 ; CHECK: call void @h(i32 %x.for.left)
101 ; CHECK-LABEL: @test3(
102 define void @test3() personality i32 (...)* @__CxxFrameHandler3 {
105 to label %invoke.cont unwind label %terminate
111 ; CHECK: cleanuppad []
112 ; CHECK: call void @__std_terminate()
114 terminatepad [void ()* @__std_terminate] unwind to caller
117 declare void @__std_terminate()