xref: /llvm-project/llvm/test/Transforms/SLPVectorizer/RISCV/small-tree-not-schedulable-bv-node.ll (revision 9c0a0659d40f613e873e416833d2293365b48e06)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2; RUN: opt -S -mtriple=riscv64-unknown-linux-gnu -slp-threshold=-100 -mattr=+v < %s | FileCheck %s
3
4define void @test1() personality ptr null {
5; CHECK-LABEL: define void @test1(
6; CHECK-SAME: ) #[[ATTR0:[0-9]+]] personality ptr null {
7; CHECK-NEXT:  entry:
8; CHECK-NEXT:    [[CALL33:%.*]] = invoke ptr null(i64 0, ptr null)
9; CHECK-NEXT:            to label [[INVOKE_CONT32:%.*]] unwind label [[LPAD31_LOOPEXIT:%.*]]
10; CHECK:       invoke.cont32:
11; CHECK-NEXT:    invoke void null(ptr null, ptr null)
12; CHECK-NEXT:            to label [[INVOKE_CONT37:%.*]] unwind label [[LPAD34_LOOPEXIT:%.*]]
13; CHECK:       invoke.cont37:
14; CHECK-NEXT:    unreachable
15; CHECK:       lpad31.loopexit:
16; CHECK-NEXT:    [[LPAD_LOOPEXIT:%.*]] = landingpad { ptr, i32 }
17; CHECK-NEXT:            cleanup
18; CHECK-NEXT:    br label [[EHCLEANUP47:%.*]]
19; CHECK:       lpad34.loopexit:
20; CHECK-NEXT:    [[DOTLCSSA101:%.*]] = phi ptr [ null, [[INVOKE_CONT32]] ]
21; CHECK-NEXT:    [[CALL33_LCSSA96:%.*]] = phi ptr [ [[CALL33]], [[INVOKE_CONT32]] ]
22; CHECK-NEXT:    [[LPAD_LOOPEXIT56:%.*]] = landingpad { ptr, i32 }
23; CHECK-NEXT:            cleanup
24; CHECK-NEXT:    br label [[LPAD34_BODY:%.*]]
25; CHECK:       lpad34.loopexit.split-lp:
26; CHECK-NEXT:    [[LPAD_LOOPEXIT_SPLIT_LP57:%.*]] = landingpad { ptr, i32 }
27; CHECK-NEXT:            cleanup
28; CHECK-NEXT:    br label [[LPAD34_BODY]]
29; CHECK:       lpad34.body:
30; CHECK-NEXT:    [[TMP0:%.*]] = phi ptr [ [[DOTLCSSA101]], [[LPAD34_LOOPEXIT]] ], [ null, [[LPAD34_LOOPEXIT_SPLIT_LP:%.*]] ]
31; CHECK-NEXT:    [[CALL3399:%.*]] = phi ptr [ [[CALL33_LCSSA96]], [[LPAD34_LOOPEXIT]] ], [ null, [[LPAD34_LOOPEXIT_SPLIT_LP]] ]
32; CHECK-NEXT:    br label [[EHCLEANUP47]]
33; CHECK:       ehcleanup47:
34; CHECK-NEXT:    resume { ptr, i32 } zeroinitializer
35;
36entry:
37  %call33 = invoke ptr null(i64 0, ptr null)
38  to label %invoke.cont32 unwind label %lpad31.loopexit
39
40invoke.cont32:
41  invoke void null(ptr null, ptr null)
42  to label %invoke.cont37 unwind label %lpad34.loopexit
43
44invoke.cont37:
45  unreachable
46
47lpad31.loopexit:
48  %lpad.loopexit = landingpad { ptr, i32 }
49  cleanup
50  br label %ehcleanup47
51
52lpad34.loopexit:
53  %.lcssa101 = phi ptr [ null, %invoke.cont32 ]
54  %call33.lcssa96 = phi ptr [ %call33, %invoke.cont32 ]
55  %lpad.loopexit56 = landingpad { ptr, i32 }
56  cleanup
57  br label %lpad34.body
58
59lpad34.loopexit.split-lp:
60  %lpad.loopexit.split-lp57 = landingpad { ptr, i32 }
61  cleanup
62  br label %lpad34.body
63
64lpad34.body:
65  %0 = phi ptr [ %.lcssa101, %lpad34.loopexit ], [ null, %lpad34.loopexit.split-lp ]
66  %call3399 = phi ptr [ %call33.lcssa96, %lpad34.loopexit ], [ null, %lpad34.loopexit.split-lp ]
67  br label %ehcleanup47
68
69ehcleanup47:
70  resume { ptr, i32 } zeroinitializer
71}
72
73define i32 @test2(i64 %idx.ext.i48.pre-phi) {
74; CHECK-LABEL: define i32 @test2(
75; CHECK-SAME: i64 [[IDX_EXT_I48_PRE_PHI:%.*]]) #[[ATTR0]] {
76; CHECK-NEXT:  entry:
77; CHECK-NEXT:    br label [[DO_ACTION:%.*]]
78; CHECK:       do_action:
79; CHECK-NEXT:    switch i32 0, label [[SW_DEFAULT:%.*]] [
80; CHECK-NEXT:      i32 1, label [[CLEANUP185:%.*]]
81; CHECK-NEXT:      i32 2, label [[CLEANUP185]]
82; CHECK-NEXT:      i32 0, label [[CLEANUP185]]
83; CHECK-NEXT:      i32 4, label [[CLEANUP185]]
84; CHECK-NEXT:      i32 5, label [[CLEANUP185]]
85; CHECK-NEXT:      i32 6, label [[CLEANUP185]]
86; CHECK-NEXT:      i32 7, label [[CLEANUP185]]
87; CHECK-NEXT:      i32 8, label [[CLEANUP185]]
88; CHECK-NEXT:      i32 9, label [[CLEANUP185]]
89; CHECK-NEXT:      i32 10, label [[CLEANUP185]]
90; CHECK-NEXT:      i32 11, label [[CLEANUP185]]
91; CHECK-NEXT:      i32 12, label [[CLEANUP185]]
92; CHECK-NEXT:      i32 13, label [[CLEANUP185]]
93; CHECK-NEXT:      i32 14, label [[CLEANUP185]]
94; CHECK-NEXT:      i32 15, label [[CLEANUP185]]
95; CHECK-NEXT:      i32 16, label [[CLEANUP185]]
96; CHECK-NEXT:      i32 17, label [[CLEANUP185]]
97; CHECK-NEXT:      i32 18, label [[CLEANUP185]]
98; CHECK-NEXT:      i32 19, label [[CLEANUP185]]
99; CHECK-NEXT:      i32 20, label [[CLEANUP185]]
100; CHECK-NEXT:      i32 21, label [[CLEANUP185]]
101; CHECK-NEXT:      i32 22, label [[CLEANUP185]]
102; CHECK-NEXT:      i32 23, label [[CLEANUP185]]
103; CHECK-NEXT:      i32 24, label [[CLEANUP185]]
104; CHECK-NEXT:      i32 25, label [[CLEANUP185]]
105; CHECK-NEXT:      i32 26, label [[CLEANUP185]]
106; CHECK-NEXT:      i32 27, label [[CLEANUP185]]
107; CHECK-NEXT:      i32 28, label [[CLEANUP185]]
108; CHECK-NEXT:      i32 29, label [[CLEANUP185]]
109; CHECK-NEXT:      i32 30, label [[CLEANUP185]]
110; CHECK-NEXT:      i32 31, label [[CLEANUP185]]
111; CHECK-NEXT:      i32 32, label [[CLEANUP185]]
112; CHECK-NEXT:      i32 33, label [[CLEANUP185]]
113; CHECK-NEXT:      i32 34, label [[CLEANUP185]]
114; CHECK-NEXT:      i32 35, label [[CLEANUP185]]
115; CHECK-NEXT:      i32 36, label [[CLEANUP185]]
116; CHECK-NEXT:      i32 37, label [[CLEANUP185]]
117; CHECK-NEXT:      i32 38, label [[CLEANUP185]]
118; CHECK-NEXT:      i32 39, label [[CLEANUP185]]
119; CHECK-NEXT:      i32 40, label [[CLEANUP185]]
120; CHECK-NEXT:      i32 41, label [[CLEANUP185]]
121; CHECK-NEXT:      i32 42, label [[CLEANUP185]]
122; CHECK-NEXT:      i32 43, label [[CLEANUP185]]
123; CHECK-NEXT:      i32 44, label [[CLEANUP185]]
124; CHECK-NEXT:      i32 45, label [[CLEANUP185]]
125; CHECK-NEXT:      i32 46, label [[CLEANUP185]]
126; CHECK-NEXT:      i32 47, label [[CLEANUP185]]
127; CHECK-NEXT:      i32 48, label [[CLEANUP185]]
128; CHECK-NEXT:      i32 49, label [[CLEANUP185]]
129; CHECK-NEXT:      i32 50, label [[CLEANUP185]]
130; CHECK-NEXT:      i32 51, label [[CLEANUP185]]
131; CHECK-NEXT:      i32 52, label [[CLEANUP185]]
132; CHECK-NEXT:      i32 53, label [[CLEANUP185]]
133; CHECK-NEXT:      i32 54, label [[CLEANUP185]]
134; CHECK-NEXT:      i32 55, label [[CLEANUP185]]
135; CHECK-NEXT:      i32 56, label [[CLEANUP185]]
136; CHECK-NEXT:      i32 57, label [[DO_ACTION]]
137; CHECK-NEXT:      i32 58, label [[CLEANUP185]]
138; CHECK-NEXT:      i32 59, label [[CLEANUP185]]
139; CHECK-NEXT:      i32 60, label [[DO_ACTION]]
140; CHECK-NEXT:      i32 61, label [[DO_ACTION]]
141; CHECK-NEXT:      i32 62, label [[CLEANUP185]]
142; CHECK-NEXT:      i32 70, label [[SW_BB175:%.*]]
143; CHECK-NEXT:      i32 64, label [[CLEANUP185]]
144; CHECK-NEXT:      i32 65, label [[DO_ACTION]]
145; CHECK-NEXT:      i32 66, label [[DO_ACTION]]
146; CHECK-NEXT:      i32 67, label [[CLEANUP185]]
147; CHECK-NEXT:      i32 72, label [[CLEANUP185]]
148; CHECK-NEXT:      i32 69, label [[DO_ACTION]]
149; CHECK-NEXT:      i32 71, label [[CLEANUP185]]
150; CHECK-NEXT:    ]
151; CHECK:       yy_get_previous_state.exit.loopexit:
152; CHECK-NEXT:    br label [[YY_FIND_ACTION_BACKEDGE:%.*]]
153; CHECK:       yy_find_action.backedge:
154; CHECK-NEXT:    [[YY_BP_1_BE:%.*]] = phi ptr [ [[ADD_PTR_I49:%.*]], [[SW_BB175]] ], [ null, [[YY_GET_PREVIOUS_STATE_EXIT_LOOPEXIT:%.*]] ]
155; CHECK-NEXT:    [[YY_CP_2_BE:%.*]] = phi ptr [ [[ARRAYIDX178:%.*]], [[SW_BB175]] ], [ null, [[YY_GET_PREVIOUS_STATE_EXIT_LOOPEXIT]] ]
156; CHECK-NEXT:    br label [[DO_ACTION]]
157; CHECK:       sw.bb175:
158; CHECK-NEXT:    [[ARRAYIDX178]] = getelementptr i8, ptr null, i64 0
159; CHECK-NEXT:    [[ADD_PTR_I49]] = getelementptr i8, ptr null, i64 [[IDX_EXT_I48_PRE_PHI]]
160; CHECK-NEXT:    [[CMP5_I50:%.*]] = icmp ult ptr [[ADD_PTR_I49]], [[ARRAYIDX178]]
161; CHECK-NEXT:    br label [[YY_FIND_ACTION_BACKEDGE]]
162; CHECK:       sw.default:
163; CHECK-NEXT:    unreachable
164; CHECK:       cleanup185:
165; CHECK-NEXT:    ret i32 0
166;
167entry:
168  br label %do_action
169
170do_action:
171  switch i32 0, label %sw.default [
172  i32 1, label %cleanup185
173  i32 2, label %cleanup185
174  i32 0, label %cleanup185
175  i32 4, label %cleanup185
176  i32 5, label %cleanup185
177  i32 6, label %cleanup185
178  i32 7, label %cleanup185
179  i32 8, label %cleanup185
180  i32 9, label %cleanup185
181  i32 10, label %cleanup185
182  i32 11, label %cleanup185
183  i32 12, label %cleanup185
184  i32 13, label %cleanup185
185  i32 14, label %cleanup185
186  i32 15, label %cleanup185
187  i32 16, label %cleanup185
188  i32 17, label %cleanup185
189  i32 18, label %cleanup185
190  i32 19, label %cleanup185
191  i32 20, label %cleanup185
192  i32 21, label %cleanup185
193  i32 22, label %cleanup185
194  i32 23, label %cleanup185
195  i32 24, label %cleanup185
196  i32 25, label %cleanup185
197  i32 26, label %cleanup185
198  i32 27, label %cleanup185
199  i32 28, label %cleanup185
200  i32 29, label %cleanup185
201  i32 30, label %cleanup185
202  i32 31, label %cleanup185
203  i32 32, label %cleanup185
204  i32 33, label %cleanup185
205  i32 34, label %cleanup185
206  i32 35, label %cleanup185
207  i32 36, label %cleanup185
208  i32 37, label %cleanup185
209  i32 38, label %cleanup185
210  i32 39, label %cleanup185
211  i32 40, label %cleanup185
212  i32 41, label %cleanup185
213  i32 42, label %cleanup185
214  i32 43, label %cleanup185
215  i32 44, label %cleanup185
216  i32 45, label %cleanup185
217  i32 46, label %cleanup185
218  i32 47, label %cleanup185
219  i32 48, label %cleanup185
220  i32 49, label %cleanup185
221  i32 50, label %cleanup185
222  i32 51, label %cleanup185
223  i32 52, label %cleanup185
224  i32 53, label %cleanup185
225  i32 54, label %cleanup185
226  i32 55, label %cleanup185
227  i32 56, label %cleanup185
228  i32 57, label %do_action
229  i32 58, label %cleanup185
230  i32 59, label %cleanup185
231  i32 60, label %do_action
232  i32 61, label %do_action
233  i32 62, label %cleanup185
234  i32 70, label %sw.bb175
235  i32 64, label %cleanup185
236  i32 65, label %do_action
237  i32 66, label %do_action
238  i32 67, label %cleanup185
239  i32 72, label %cleanup185
240  i32 69, label %do_action
241  i32 71, label %cleanup185
242  ]
243
244yy_get_previous_state.exit.loopexit:
245  br label %yy_find_action.backedge
246
247yy_find_action.backedge:
248  %yy_bp.1.be = phi ptr [ %add.ptr.i49, %sw.bb175 ], [ null, %yy_get_previous_state.exit.loopexit ]
249  %yy_cp.2.be = phi ptr [ %arrayidx178, %sw.bb175 ], [ null, %yy_get_previous_state.exit.loopexit ]
250  br label %do_action
251
252sw.bb175:
253  %arrayidx178 = getelementptr i8, ptr null, i64 0
254  %add.ptr.i49 = getelementptr i8, ptr null, i64 %idx.ext.i48.pre-phi
255  %cmp5.i50 = icmp ult ptr %add.ptr.i49, %arrayidx178
256  br label %yy_find_action.backedge
257
258sw.default:
259  unreachable
260
261cleanup185:
262  ret i32 0
263}
264