brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 2bfa072 Raw
134 lines · plain
1; RUN: opt -mtriple=x86_64-pc-windows-msvc -S -win-eh-prepare -disable-demotion -disable-cleanups < %s | FileCheck %s2; RUN: opt -mtriple=x86_64-pc-windows-msvc -S -passes=win-eh-prepare -disable-demotion -disable-cleanups < %s | FileCheck %s3; RUN: %if aarch64-registered-target %{ opt -mtriple=aarch64-pc-windows-msvc -S -win-eh-prepare -disable-demotion -disable-cleanups < %s | FileCheck %s %}4; RUN: %if aarch64-registered-target %{ opt -mtriple=aarch64-pc-windows-msvc -S -passes=win-eh-prepare -disable-demotion -disable-cleanups < %s | FileCheck %s %}5 6declare i32 @__CxxFrameHandler3(...)7 8declare i32 @__C_specific_handler(...)9 10declare void @f()11 12declare i32 @g()13 14declare void @h(i32)15 16; CHECK-LABEL: @test1(17define void @test1(i1 %bool) personality ptr @__C_specific_handler {18entry:19  invoke void @f()20          to label %invoke.cont unwind label %left21 22invoke.cont:23  invoke void @f()24          to label %exit unwind label %inner25 26left:27  %0 = cleanuppad within none []28  br i1 %bool, label %shared, label %cleanupret29 30cleanupret:31  cleanupret from %0 unwind label %right32 33right:34  %1 = cleanuppad within none []35  br label %shared36 37shared:38  %x = call i32 @g()39  invoke void @f()40          to label %shared.cont unwind label %inner41 42shared.cont:43  unreachable44 45inner:46  %phi = phi i32 [ %x, %shared ], [ 0, %invoke.cont ]47  %i = cleanuppad within none []48  call void @h(i32 %phi)49  unreachable50 51; CHECK: %phi = phi i32 [ %x, %shared ], [ 0, %invoke.cont ], [ %x.for.left, %shared.for.left ]52; CHECK: %i = cleanuppad within none []53; CHECK: call void @h(i32 %phi)54 55exit:56  unreachable57}58 59; CHECK-LABEL: @test2(60define void @test2(i1 %bool) personality ptr @__C_specific_handler {61entry:62  invoke void @f()63          to label %shared.cont unwind label %left64 65left:66  %0 = cleanuppad within none []67  br i1 %bool, label %shared, label %cleanupret68 69cleanupret:70  cleanupret from %0 unwind label %right71 72right:73  %1 = cleanuppad within none []74  br label %shared75 76shared:77  %x = call i32 @g()78  invoke void @f()79          to label %shared.cont unwind label %inner80 81shared.cont:82  unreachable83 84inner:85  %i = cleanuppad within none []86  call void @h(i32 %x)87  unreachable88 89; CHECK: %x1 = phi i32 [ %x.for.left, %shared.for.left ], [ %x, %shared ]90; CHECK: %i = cleanuppad within none []91; CHECK: call void @h(i32 %x1)92 93exit:94  unreachable95}96 97; CHECK-LABEL: @test4(98define void @test4(i1 %x) personality ptr @__CxxFrameHandler3 {99entry:100  invoke void @f()101          to label %invoke.cont1 unwind label %left102 103invoke.cont1:104  invoke void @f()105          to label %exit unwind label %right106 107left:108  %0 = cleanuppad within none []109  br label %shared110 111right:112  %1 = cleanuppad within none []113  br i1 %x, label %shared, label %right.other114 115right.other:116  br label %shared117 118shared:119  %phi = phi i32 [ 1, %left ], [ 0, %right ], [ -1, %right.other ]120  call void @h(i32 %phi)121  unreachable122 123; CHECK: %phi = phi i32 [ 0, %right ], [ -1, %right.other ]124; CHECK: call void @h(i32 %phi)125 126; CHECK: %phi.for.left = phi i32 [ 1, %left ]127; CHECK: call void @h(i32 %phi.for.left)128 129exit:130  unreachable131}132 133declare void @__std_terminate()134