-; CHECK-LABEL: @test3(
-define void @test3(i1 %B) personality i32 (...)* @__CxxFrameHandler3 {
-entry:
- ; need to spill parameter %B and def %x since they're used in a funclet
- ; CHECK: entry:
- ; CHECK-DAG: store i1 %B, i1* [[SlotB:%[^ ]+]]
- ; CHECK-DAG: store i32 %x, i32* [[SlotX:%[^ ]+]]
- ; CHECK: invoke void @f
- %x = call i32 @g()
- invoke void @f()
- to label %exit unwind label %catchpad
-
-catchpad:
- %cp = catchpad [] to label %catch unwind label %catchend
-
-catch:
- ; Need to reload %B here
- ; CHECK: catch:
- ; CHECK: [[ReloadB:%[^ ]+]] = load i1, i1* [[SlotB]]
- ; CHECK: br i1 [[ReloadB]]
- br i1 %B, label %left, label %right
-left:
- ; Use of %x is in a phi, so need reload here in pred
- ; CHECK: left:
- ; CHECK: [[ReloadX:%[^ ]+]] = load i32, i32* [[SlotX]]
- ; CHECK: br label %merge
- br label %merge
-right:
- br label %merge
-merge:
- ; CHECK: merge:
- ; CHECK: %phi = phi i32 [ [[ReloadX]], %left ]
- %phi = phi i32 [ %x, %left ], [ 42, %right ]
- call void @h(i32 %phi)
- catchret %cp to label %exit
-
-catchend:
- catchendpad unwind to caller
-
-exit:
- ret void
-}
-