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 ; CHECK: %phi = phi i32 [ %x, %right ], [ 0, %invoke.cont2 ], [ %x.for.left, %left ]
43 %phi = phi i32 [ %x, %shared ], [ 0, %invoke.cont2 ]
45 call void @h(i32 %phi)
52 ; CHECK-LABEL: @test2(
53 define void @test2() personality i32 (...)* @__CxxFrameHandler3 {
56 to label %invoke.cont unwind label %left
60 to label %exit unwind label %right
73 to label %shared.cont unwind label %inner
79 ; CHECK: %x1 = phi i32 [ %x.for.left, %left ], [ %x, %right ]
80 ; CHECK: call void @h(i32 %x1)
89 ; CHECK-LABEL: @test3(
90 define void @test3() personality i32 (...)* @__CxxFrameHandler3 {
93 to label %invoke.cont unwind label %terminate
99 ; CHECK: cleanuppad []
100 ; CHECK: call void @__std_terminate()
102 terminatepad [void ()* @__std_terminate] unwind to caller
105 declare void @__std_terminate()