xref: /llvm-project/llvm/test/Transforms/MoveAutoInit/catchswitch.ll (revision 26d3cd1d07ae3fc8312feb2ab3a3a86414f28c70)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2; RUN: opt < %s -S -passes='move-auto-init' -verify-memoryssa | FileCheck %s
3
4declare void @dummy()
5declare void @dummy1()
6
7define void @test() personality ptr @dummy {
8; CHECK-LABEL: define void @test() personality ptr @dummy {
9; CHECK-NEXT:  entry:
10; CHECK-NEXT:    [[P:%.*]] = alloca [2 x i16], i32 0, align 2
11; CHECK-NEXT:    br label [[MIDDLE:%.*]]
12; CHECK:       middle:
13; CHECK-NEXT:    store i32 0, ptr [[P]], align 2, !annotation [[META0:![0-9]+]]
14; CHECK-NEXT:    [[CALL:%.*]] = invoke ptr @dummy()
15; CHECK-NEXT:            to label [[CLEAN:%.*]] unwind label [[CATCHBB:%.*]]
16; CHECK:       clean:
17; CHECK-NEXT:    ret void
18; CHECK:       catchbb:
19; CHECK-NEXT:    [[CS:%.*]] = catchswitch within none [label [[PAD:%.*]], label %pad1] unwind to caller
20; CHECK:       pad:
21; CHECK-NEXT:    [[C:%.*]] = catchpad within [[CS]] [i32 0]
22; CHECK-NEXT:    call void @dummy1()
23; CHECK-NEXT:    ret void
24; CHECK:       pad1:
25; CHECK-NEXT:    [[C1:%.*]] = catchpad within [[CS]] [i32 0]
26; CHECK-NEXT:    call void @dummy1()
27; CHECK-NEXT:    ret void
28;
29entry:
30  %p = alloca [2 x i16], i32 0, align 2
31  store i32 0, ptr %p, align 2, !annotation !0
32  br label %middle
33
34middle:
35  %call = invoke ptr @dummy() to label %clean unwind label %catchbb
36
37clean:
38  ret void
39
40catchbb:
41  %cs = catchswitch within none [label %pad, label %pad1] unwind to caller
42
43pad:
44  %c = catchpad within %cs [i32 0]
45  call void @dummy1()
46  ret void
47
48pad1:
49  %c1 = catchpad within %cs [i32 0]
50  call void @dummy1()
51  ret void
52}
53
54!0 = !{!"auto-init"}
55;.
56; CHECK: [[META0]] = !{!"auto-init"}
57;.
58