xref: /llvm-project/llvm/test/Transforms/SLPVectorizer/X86/landing_pad.ll (revision b8703369daf777706196ff914c0376c27adde3cf)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=slp-vectorizer,verify -slp-threshold=-99999 -S | FileCheck %s
3
4target triple = "x86_64-unknown-linux-gnu"
5
6define void @foo() personality ptr @bar {
7; CHECK-LABEL: @foo(
8; CHECK-NEXT:  bb1:
9; CHECK-NEXT:    br label [[BB3:%.*]]
10; CHECK:       bb2.loopexit:
11; CHECK-NEXT:    br label [[BB2:%.*]]
12; CHECK:       bb2:
13; CHECK-NEXT:    [[TMP0:%.*]] = phi <4 x i32> [ [[TMP7:%.*]], [[BB9:%.*]] ], [ poison, [[BB2_LOOPEXIT:%.*]] ]
14; CHECK-NEXT:    ret void
15; CHECK:       bb3:
16; CHECK-NEXT:    [[TMP1:%.*]] = phi <2 x i32> [ [[TMP3:%.*]], [[BB6:%.*]] ], [ poison, [[BB1:%.*]] ]
17; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <2 x i32> [[TMP1]], i32 0
18; CHECK-NEXT:    [[TMP10:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1
19; CHECK-NEXT:    [[TMP2:%.*]] = invoke i32 poison(ptr addrspace(1) nonnull poison, i32 0, i32 0, i32 poison) [ "deopt"() ]
20; CHECK-NEXT:            to label [[BB4:%.*]] unwind label [[BB10:%.*]]
21; CHECK:       bb4:
22; CHECK-NEXT:    br i1 poison, label [[BB11:%.*]], label [[BB5:%.*]]
23; CHECK:       bb5:
24; CHECK-NEXT:    br label [[BB7:%.*]]
25; CHECK:       bb6:
26; CHECK-NEXT:    [[TMP3]] = phi <2 x i32> [ <i32 0, i32 poison>, [[BB8:%.*]] ]
27; CHECK-NEXT:    br label [[BB3]]
28; CHECK:       bb7:
29; CHECK-NEXT:    [[LOCAL_5_84111:%.*]] = phi i32 [ poison, [[BB8]] ], [ poison, [[BB5]] ]
30; CHECK-NEXT:    [[TMP5:%.*]] = invoke i32 poison(ptr addrspace(1) nonnull poison, i32 poison, i32 poison, i32 poison) [ "deopt"() ]
31; CHECK-NEXT:            to label [[BB8]] unwind label [[BB12:%.*]]
32; CHECK:       bb8:
33; CHECK-NEXT:    br i1 poison, label [[BB7]], label [[BB6]]
34; CHECK:       bb9:
35; CHECK-NEXT:    [[INDVARS_IV528799:%.*]] = phi i64 [ poison, [[BB10]] ], [ poison, [[BB12]] ]
36; CHECK-NEXT:    [[TMP7]] = phi <4 x i32> [ [[TMP9:%.*]], [[BB10]] ], [ [[TMP11:%.*]], [[BB12]] ]
37; CHECK-NEXT:    br label [[BB2]]
38; CHECK:       bb10:
39; CHECK-NEXT:    [[LOCAL_10_38123_LCSSA:%.*]] = phi i32 [ [[TMP10]], [[BB3]] ]
40; CHECK-NEXT:    [[LOCAL_5_33118_LCSSA:%.*]] = phi i32 [ [[TMP4]], [[BB3]] ]
41; CHECK-NEXT:    [[LANDING_PAD68:%.*]] = landingpad { ptr, i32 }
42; CHECK-NEXT:            cleanup
43; CHECK-NEXT:    [[TMP8:%.*]] = insertelement <4 x i32> poison, i32 [[LOCAL_10_38123_LCSSA]], i32 2
44; CHECK-NEXT:    [[TMP9]] = insertelement <4 x i32> [[TMP8]], i32 [[LOCAL_5_33118_LCSSA]], i32 3
45; CHECK-NEXT:    br label [[BB9]]
46; CHECK:       bb11:
47; CHECK-NEXT:    ret void
48; CHECK:       bb12:
49; CHECK-NEXT:    [[LOCAL_10_89113_LCSSA:%.*]] = phi i32 [ poison, [[BB7]] ]
50; CHECK-NEXT:    [[LOCAL_5_84111_LCSSA:%.*]] = phi i32 [ [[LOCAL_5_84111]], [[BB7]] ]
51; CHECK-NEXT:    [[LANDING_PAD149:%.*]] = landingpad { ptr, i32 }
52; CHECK-NEXT:            cleanup
53; CHECK-NEXT:    [[TMP12:%.*]] = insertelement <4 x i32> poison, i32 [[LOCAL_10_89113_LCSSA]], i32 2
54; CHECK-NEXT:    [[TMP11]] = insertelement <4 x i32> [[TMP12]], i32 [[LOCAL_5_84111_LCSSA]], i32 3
55; CHECK-NEXT:    br label [[BB9]]
56;
57bb1:
58  br label %bb3
59
60bb2.loopexit:
61  br label %bb2
62
63bb2:
64  %local_8_3681 = phi i32 [ poison, %bb9 ], [ 1, %bb2.loopexit ]
65  %local_2_44 = phi i32 [ poison, %bb9 ], [ poison, %bb2.loopexit ]
66  %local_5_47 = phi i32 [ %local_5_19, %bb9 ], [ poison, %bb2.loopexit ]
67  %local_10_52 = phi i32 [ %local_10_24, %bb9 ], [ poison, %bb2.loopexit ]
68  ret void
69
70bb3:
71  %local_10_38123 = phi i32 [ %.lcssa773, %bb6 ], [ poison, %bb1 ]
72  %local_5_33118 = phi i32 [ poison, %bb6 ], [ poison, %bb1 ]
73  %0 = invoke i32 poison(ptr addrspace(1) nonnull poison, i32 0, i32 0, i32 poison) [ "deopt"() ]
74  to label %bb4 unwind label %bb10
75
76bb4:
77  br i1 poison, label %bb11, label %bb5
78
79bb5:
80  br label %bb7
81
82bb6:
83  %.lcssa773 = phi i32 [ poison, %bb8 ]
84  %.lcssa770 = phi i32 [ 0, %bb8 ]
85  br label %bb3
86
87bb7:
88  %local_5_84111 = phi i32 [ poison, %bb8 ], [ poison, %bb5 ]
89  %1 = invoke i32 poison(ptr addrspace(1) nonnull poison, i32 poison, i32 poison, i32 poison) [ "deopt"() ]
90  to label %bb8 unwind label %bb12
91
92bb8:
93  br i1 poison, label %bb7, label %bb6
94
95bb9:
96  %indvars.iv528799 = phi i64 [ poison, %bb10 ], [ poison, %bb12 ]
97  %local_5_19 = phi i32 [ %local_5_33118.lcssa, %bb10 ], [ %local_5_84111.lcssa, %bb12 ]
98  %local_10_24 = phi i32 [ %local_10_38123.lcssa, %bb10 ], [ %local_10_89113.lcssa, %bb12 ]
99  br label %bb2
100
101bb10:
102  %local_10_38123.lcssa = phi i32 [ %local_10_38123, %bb3 ]
103  %local_5_33118.lcssa = phi i32 [ %local_5_33118, %bb3 ]
104  %landing_pad68 = landingpad { ptr, i32 }
105  cleanup
106  br label %bb9
107
108bb11:
109  ret void
110
111bb12:
112  %local_10_89113.lcssa = phi i32 [ poison, %bb7 ]
113  %local_5_84111.lcssa = phi i32 [ %local_5_84111, %bb7 ]
114  %landing_pad149 = landingpad { ptr, i32 }
115  cleanup
116  br label %bb9
117}
118
119declare ptr @bar()
120
121
122