xref: /aosp_15_r20/external/llvm/test/CodeGen/WinEH/wineh-statenumbering-cleanups.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: sed -e s/.Cxx:// %s | opt -mtriple=x86-pc-windows-msvc -S -x86-winehstate | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: sed -e s/.SEH:// %s | opt -mtriple=x86-pc-windows-msvc -S -x86-winehstate | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdeclare i32 @__CxxFrameHandler3(...)
5*9880d681SAndroid Build Coastguard Workerdeclare i32 @_except_handler3(...)
6*9880d681SAndroid Build Coastguard Workerdeclare void @dummy_filter()
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdeclare void @f(i32)
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: define void @test2(
11*9880d681SAndroid Build Coastguard Worker;Cxx: define void @test2(i1 %b) personality i32 (...)* @__CxxFrameHandler3 {
12*9880d681SAndroid Build Coastguard Worker;SEH: define void @test2(i1 %b) personality i32 (...)* @_except_handler3 {
13*9880d681SAndroid Build Coastguard Workerentry:
14*9880d681SAndroid Build Coastguard Worker  ; CHECK: entry:
15*9880d681SAndroid Build Coastguard Worker  ; CHECK:   store i32 1
16*9880d681SAndroid Build Coastguard Worker  ; CHECK:   invoke void @f(i32 1)
17*9880d681SAndroid Build Coastguard Worker  invoke void @f(i32 1)
18*9880d681SAndroid Build Coastguard Worker    to label %exit unwind label %cleanup.pad
19*9880d681SAndroid Build Coastguard Workercleanup.pad:
20*9880d681SAndroid Build Coastguard Worker  %cleanup = cleanuppad within none []
21*9880d681SAndroid Build Coastguard Worker  br i1 %b, label %left, label %right
22*9880d681SAndroid Build Coastguard Workerleft:
23*9880d681SAndroid Build Coastguard Worker  cleanupret from %cleanup unwind label %catch.pad
24*9880d681SAndroid Build Coastguard Workerright:
25*9880d681SAndroid Build Coastguard Worker  cleanupret from %cleanup unwind label %catch.pad
26*9880d681SAndroid Build Coastguard Workercatch.pad:
27*9880d681SAndroid Build Coastguard Worker  %cs1 = catchswitch within none [label %catch.body] unwind to caller
28*9880d681SAndroid Build Coastguard Workercatch.body:
29*9880d681SAndroid Build Coastguard Worker;Cxx: %catch = catchpad within %cs1 [i8* null, i32 u0x40, i8* null]
30*9880d681SAndroid Build Coastguard Worker;SEH: %catch = catchpad within %cs1 [void ()* @dummy_filter]
31*9880d681SAndroid Build Coastguard Worker  catchret from %catch to label %exit
32*9880d681SAndroid Build Coastguard Workerexit:
33*9880d681SAndroid Build Coastguard Worker  ret void
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: define void @test3(
37*9880d681SAndroid Build Coastguard Worker;Cxx: define void @test3() personality i32 (...)* @__CxxFrameHandler3 {
38*9880d681SAndroid Build Coastguard Worker;SEH: define void @test3() personality i32 (...)* @_except_handler3 {
39*9880d681SAndroid Build Coastguard Workerentry:
40*9880d681SAndroid Build Coastguard Worker  ; CHECK: entry:
41*9880d681SAndroid Build Coastguard Worker  ; CHECK:   store i32 0
42*9880d681SAndroid Build Coastguard Worker  ; CHECK:   invoke void @f(i32 1)
43*9880d681SAndroid Build Coastguard Worker  invoke void @f(i32 1)
44*9880d681SAndroid Build Coastguard Worker    to label %exit unwind label %cleanup.pad
45*9880d681SAndroid Build Coastguard Workercleanup.pad:
46*9880d681SAndroid Build Coastguard Worker  ; CHECK: cleanup.pad:
47*9880d681SAndroid Build Coastguard Worker  ; CHECK:   invoke void @f(i32 0)
48*9880d681SAndroid Build Coastguard Worker  %cleanup = cleanuppad within none []
49*9880d681SAndroid Build Coastguard Worker  invoke void @f(i32 0)
50*9880d681SAndroid Build Coastguard Worker    to label %unreachable unwind label %catch.pad
51*9880d681SAndroid Build Coastguard Workerunreachable:
52*9880d681SAndroid Build Coastguard Worker  unreachable
53*9880d681SAndroid Build Coastguard Workercatch.pad:
54*9880d681SAndroid Build Coastguard Worker  %cs1 = catchswitch within none [label %catch.body] unwind to caller
55*9880d681SAndroid Build Coastguard Workercatch.body:
56*9880d681SAndroid Build Coastguard Worker;Cxx: %catch = catchpad within %cs1 [i8* null, i32 u0x40, i8* null]
57*9880d681SAndroid Build Coastguard Worker;SEH: %catch = catchpad within %cs1 [void ()* @dummy_filter]
58*9880d681SAndroid Build Coastguard Worker  catchret from %catch to label %exit
59*9880d681SAndroid Build Coastguard Workerexit:
60*9880d681SAndroid Build Coastguard Worker  ret void
61*9880d681SAndroid Build Coastguard Worker}
62