Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / VE / Scalar / br_jt.ll
blob5674376a615dd08c8805579bf0b3406a2e0162ae
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2 ; RUN: llc < %s -mtriple=ve | FileCheck %s
3 ; RUN: llc < %s -mtriple=ve -relocation-model=pic \
4 ; RUN:     | FileCheck %s -check-prefix=PIC
6 @switch.table.br_jt4 = private unnamed_addr constant [4 x i32] [i32 3, i32 0, i32 4, i32 7], align 4
7 @switch.table.br_jt7 = private unnamed_addr constant [9 x i32] [i32 3, i32 0, i32 4, i32 7, i32 3, i32 3, i32 5, i32 11, i32 10], align 4
8 @switch.table.br_jt8 = private unnamed_addr constant [9 x i32] [i32 3, i32 0, i32 4, i32 7, i32 3, i32 1, i32 5, i32 11, i32 10], align 4
10 ; Function Attrs: norecurse nounwind readnone
11 define signext i32 @br_jt3(i32 signext %0) {
12 ; CHECK-LABEL: br_jt3:
13 ; CHECK:       # %bb.0:
14 ; CHECK-NEXT:    and %s0, %s0, (32)0
15 ; CHECK-NEXT:    breq.w 1, %s0, .LBB0_1
16 ; CHECK-NEXT:  # %bb.2:
17 ; CHECK-NEXT:    breq.w 4, %s0, .LBB0_5
18 ; CHECK-NEXT:  # %bb.3:
19 ; CHECK-NEXT:    brne.w 2, %s0, .LBB0_6
20 ; CHECK-NEXT:  # %bb.4:
21 ; CHECK-NEXT:    or %s0, 0, (0)1
22 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
23 ; CHECK-NEXT:    b.l.t (, %s10)
24 ; CHECK-NEXT:  .LBB0_5:
25 ; CHECK-NEXT:    or %s0, 7, (0)1
26 ; CHECK-NEXT:  .LBB0_6:
27 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
28 ; CHECK-NEXT:    b.l.t (, %s10)
29 ; CHECK-NEXT:  .LBB0_1:
30 ; CHECK-NEXT:    or %s0, 3, (0)1
31 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
32 ; CHECK-NEXT:    b.l.t (, %s10)
34 ; PIC-LABEL: br_jt3:
35 ; PIC:       # %bb.0:
36 ; PIC-NEXT:    and %s0, %s0, (32)0
37 ; PIC-NEXT:    breq.w 1, %s0, .LBB0_1
38 ; PIC-NEXT:  # %bb.2:
39 ; PIC-NEXT:    breq.w 4, %s0, .LBB0_5
40 ; PIC-NEXT:  # %bb.3:
41 ; PIC-NEXT:    brne.w 2, %s0, .LBB0_6
42 ; PIC-NEXT:  # %bb.4:
43 ; PIC-NEXT:    or %s0, 0, (0)1
44 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
45 ; PIC-NEXT:    b.l.t (, %s10)
46 ; PIC-NEXT:  .LBB0_5:
47 ; PIC-NEXT:    or %s0, 7, (0)1
48 ; PIC-NEXT:  .LBB0_6:
49 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
50 ; PIC-NEXT:    b.l.t (, %s10)
51 ; PIC-NEXT:  .LBB0_1:
52 ; PIC-NEXT:    or %s0, 3, (0)1
53 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
54 ; PIC-NEXT:    b.l.t (, %s10)
55   switch i32 %0, label %4 [
56     i32 1, label %5
57     i32 2, label %2
58     i32 4, label %3
59   ]
61 2:                                                ; preds = %1
62   br label %5
64 3:                                                ; preds = %1
65   br label %5
67 4:                                                ; preds = %1
68   br label %5
70 5:                                                ; preds = %1, %4, %3, %2
71   %6 = phi i32 [ %0, %4 ], [ 7, %3 ], [ 0, %2 ], [ 3, %1 ]
72   ret i32 %6
75 ; Function Attrs: norecurse nounwind readnone
76 define signext i32 @br_jt4(i32 signext %0) {
77 ; CHECK-LABEL: br_jt4:
78 ; CHECK:       # %bb.0:
79 ; CHECK-NEXT:    and %s0, %s0, (32)0
80 ; CHECK-NEXT:    adds.w.sx %s1, -1, %s0
81 ; CHECK-NEXT:    cmpu.w %s2, 3, %s1
82 ; CHECK-NEXT:    brgt.w 0, %s2, .LBB1_2
83 ; CHECK-NEXT:  # %bb.1:
84 ; CHECK-NEXT:    adds.w.sx %s0, %s1, (0)1
85 ; CHECK-NEXT:    sll %s0, %s0, 2
86 ; CHECK-NEXT:    lea %s1, .Lswitch.table.br_jt4@lo
87 ; CHECK-NEXT:    and %s1, %s1, (32)0
88 ; CHECK-NEXT:    lea.sl %s1, .Lswitch.table.br_jt4@hi(, %s1)
89 ; CHECK-NEXT:    ldl.sx %s0, (%s0, %s1)
90 ; CHECK-NEXT:    b.l.t (, %s10)
91 ; CHECK-NEXT:  .LBB1_2:
92 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
93 ; CHECK-NEXT:    b.l.t (, %s10)
95 ; PIC-LABEL: br_jt4:
96 ; PIC:       # %bb.0:
97 ; PIC-NEXT:    st %s15, 24(, %s11)
98 ; PIC-NEXT:    st %s16, 32(, %s11)
99 ; PIC-NEXT:    and %s0, %s0, (32)0
100 ; PIC-NEXT:    adds.w.sx %s1, -1, %s0
101 ; PIC-NEXT:    cmpu.w %s2, 3, %s1
102 ; PIC-NEXT:    lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
103 ; PIC-NEXT:    and %s15, %s15, (32)0
104 ; PIC-NEXT:    sic %s16
105 ; PIC-NEXT:    lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
106 ; PIC-NEXT:    brgt.w 0, %s2, .LBB1_2
107 ; PIC-NEXT:  # %bb.1:
108 ; PIC-NEXT:    adds.w.sx %s0, %s1, (0)1
109 ; PIC-NEXT:    sll %s0, %s0, 2
110 ; PIC-NEXT:    lea %s1, .Lswitch.table.br_jt4@gotoff_lo
111 ; PIC-NEXT:    and %s1, %s1, (32)0
112 ; PIC-NEXT:    lea.sl %s1, .Lswitch.table.br_jt4@gotoff_hi(%s1, %s15)
113 ; PIC-NEXT:    ldl.sx %s0, (%s0, %s1)
114 ; PIC-NEXT:    br.l.t .LBB1_3
115 ; PIC-NEXT:  .LBB1_2:
116 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
117 ; PIC-NEXT:  .LBB1_3:
118 ; PIC-NEXT:    ld %s16, 32(, %s11)
119 ; PIC-NEXT:    ld %s15, 24(, %s11)
120 ; PIC-NEXT:    b.l.t (, %s10)
121   %2 = add i32 %0, -1
122   %3 = icmp ult i32 %2, 4
123   br i1 %3, label %4, label %8
125 4:                                                ; preds = %1
126   %5 = sext i32 %2 to i64
127   %6 = getelementptr inbounds [4 x i32], ptr @switch.table.br_jt4, i64 0, i64 %5
128   %7 = load i32, ptr %6, align 4
129   ret i32 %7
131 8:                                                ; preds = %1
132   ret i32 %0
135 ; Function Attrs: norecurse nounwind readnone
136 define signext i32 @br_jt7(i32 signext %0) {
137 ; CHECK-LABEL: br_jt7:
138 ; CHECK:       # %bb.0:
139 ; CHECK-NEXT:    and %s0, %s0, (32)0
140 ; CHECK-NEXT:    adds.w.sx %s1, -1, %s0
141 ; CHECK-NEXT:    cmpu.w %s2, 8, %s1
142 ; CHECK-NEXT:    brgt.w 0, %s2, .LBB2_3
143 ; CHECK-NEXT:  # %bb.1:
144 ; CHECK-NEXT:    and %s2, %s1, (48)0
145 ; CHECK-NEXT:    lea %s3, 463
146 ; CHECK-NEXT:    and %s3, %s3, (32)0
147 ; CHECK-NEXT:    srl %s2, %s3, %s2
148 ; CHECK-NEXT:    and %s2, 1, %s2
149 ; CHECK-NEXT:    brne.w 0, %s2, .LBB2_2
150 ; CHECK-NEXT:  .LBB2_3:
151 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
152 ; CHECK-NEXT:    b.l.t (, %s10)
153 ; CHECK-NEXT:  .LBB2_2:
154 ; CHECK-NEXT:    adds.w.sx %s0, %s1, (0)1
155 ; CHECK-NEXT:    sll %s0, %s0, 2
156 ; CHECK-NEXT:    lea %s1, .Lswitch.table.br_jt7@lo
157 ; CHECK-NEXT:    and %s1, %s1, (32)0
158 ; CHECK-NEXT:    lea.sl %s1, .Lswitch.table.br_jt7@hi(, %s1)
159 ; CHECK-NEXT:    ldl.sx %s0, (%s0, %s1)
160 ; CHECK-NEXT:    b.l.t (, %s10)
162 ; PIC-LABEL: br_jt7:
163 ; PIC:       # %bb.0:
164 ; PIC-NEXT:    st %s15, 24(, %s11)
165 ; PIC-NEXT:    st %s16, 32(, %s11)
166 ; PIC-NEXT:    and %s0, %s0, (32)0
167 ; PIC-NEXT:    adds.w.sx %s1, -1, %s0
168 ; PIC-NEXT:    cmpu.w %s2, 8, %s1
169 ; PIC-NEXT:    lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
170 ; PIC-NEXT:    and %s15, %s15, (32)0
171 ; PIC-NEXT:    sic %s16
172 ; PIC-NEXT:    lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
173 ; PIC-NEXT:    brgt.w 0, %s2, .LBB2_3
174 ; PIC-NEXT:  # %bb.1:
175 ; PIC-NEXT:    and %s2, %s1, (48)0
176 ; PIC-NEXT:    lea %s3, 463
177 ; PIC-NEXT:    and %s3, %s3, (32)0
178 ; PIC-NEXT:    srl %s2, %s3, %s2
179 ; PIC-NEXT:    and %s2, 1, %s2
180 ; PIC-NEXT:    brne.w 0, %s2, .LBB2_2
181 ; PIC-NEXT:  .LBB2_3:
182 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
183 ; PIC-NEXT:    br.l.t .LBB2_4
184 ; PIC-NEXT:  .LBB2_2:
185 ; PIC-NEXT:    adds.w.sx %s0, %s1, (0)1
186 ; PIC-NEXT:    sll %s0, %s0, 2
187 ; PIC-NEXT:    lea %s1, .Lswitch.table.br_jt7@gotoff_lo
188 ; PIC-NEXT:    and %s1, %s1, (32)0
189 ; PIC-NEXT:    lea.sl %s1, .Lswitch.table.br_jt7@gotoff_hi(%s1, %s15)
190 ; PIC-NEXT:    ldl.sx %s0, (%s0, %s1)
191 ; PIC-NEXT:  .LBB2_4:
192 ; PIC-NEXT:    ld %s16, 32(, %s11)
193 ; PIC-NEXT:    ld %s15, 24(, %s11)
194 ; PIC-NEXT:    b.l.t (, %s10)
195   %2 = add i32 %0, -1
196   %3 = icmp ult i32 %2, 9
197   br i1 %3, label %4, label %13
199 4:                                                ; preds = %1
200   %5 = trunc i32 %2 to i16
201   %6 = lshr i16 463, %5
202   %7 = and i16 %6, 1
203   %8 = icmp eq i16 %7, 0
204   br i1 %8, label %13, label %9
206 9:                                                ; preds = %4
207   %10 = sext i32 %2 to i64
208   %11 = getelementptr inbounds [9 x i32], ptr @switch.table.br_jt7, i64 0, i64 %10
209   %12 = load i32, ptr %11, align 4
210   ret i32 %12
212 13:                                               ; preds = %1, %4
213   ret i32 %0
216 ; Function Attrs: norecurse nounwind readnone
217 define signext i32 @br_jt8(i32 signext %0) {
218 ; CHECK-LABEL: br_jt8:
219 ; CHECK:       # %bb.0:
220 ; CHECK-NEXT:    and %s0, %s0, (32)0
221 ; CHECK-NEXT:    adds.w.sx %s1, -1, %s0
222 ; CHECK-NEXT:    cmpu.w %s2, 8, %s1
223 ; CHECK-NEXT:    brgt.w 0, %s2, .LBB3_3
224 ; CHECK-NEXT:  # %bb.1:
225 ; CHECK-NEXT:    and %s2, %s1, (48)0
226 ; CHECK-NEXT:    lea %s3, 495
227 ; CHECK-NEXT:    and %s3, %s3, (32)0
228 ; CHECK-NEXT:    srl %s2, %s3, %s2
229 ; CHECK-NEXT:    and %s2, 1, %s2
230 ; CHECK-NEXT:    brne.w 0, %s2, .LBB3_2
231 ; CHECK-NEXT:  .LBB3_3:
232 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
233 ; CHECK-NEXT:    b.l.t (, %s10)
234 ; CHECK-NEXT:  .LBB3_2:
235 ; CHECK-NEXT:    adds.w.sx %s0, %s1, (0)1
236 ; CHECK-NEXT:    sll %s0, %s0, 2
237 ; CHECK-NEXT:    lea %s1, .Lswitch.table.br_jt8@lo
238 ; CHECK-NEXT:    and %s1, %s1, (32)0
239 ; CHECK-NEXT:    lea.sl %s1, .Lswitch.table.br_jt8@hi(, %s1)
240 ; CHECK-NEXT:    ldl.sx %s0, (%s0, %s1)
241 ; CHECK-NEXT:    b.l.t (, %s10)
243 ; PIC-LABEL: br_jt8:
244 ; PIC:       # %bb.0:
245 ; PIC-NEXT:    st %s15, 24(, %s11)
246 ; PIC-NEXT:    st %s16, 32(, %s11)
247 ; PIC-NEXT:    and %s0, %s0, (32)0
248 ; PIC-NEXT:    adds.w.sx %s1, -1, %s0
249 ; PIC-NEXT:    cmpu.w %s2, 8, %s1
250 ; PIC-NEXT:    lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
251 ; PIC-NEXT:    and %s15, %s15, (32)0
252 ; PIC-NEXT:    sic %s16
253 ; PIC-NEXT:    lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
254 ; PIC-NEXT:    brgt.w 0, %s2, .LBB3_3
255 ; PIC-NEXT:  # %bb.1:
256 ; PIC-NEXT:    and %s2, %s1, (48)0
257 ; PIC-NEXT:    lea %s3, 495
258 ; PIC-NEXT:    and %s3, %s3, (32)0
259 ; PIC-NEXT:    srl %s2, %s3, %s2
260 ; PIC-NEXT:    and %s2, 1, %s2
261 ; PIC-NEXT:    brne.w 0, %s2, .LBB3_2
262 ; PIC-NEXT:  .LBB3_3:
263 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
264 ; PIC-NEXT:    br.l.t .LBB3_4
265 ; PIC-NEXT:  .LBB3_2:
266 ; PIC-NEXT:    adds.w.sx %s0, %s1, (0)1
267 ; PIC-NEXT:    sll %s0, %s0, 2
268 ; PIC-NEXT:    lea %s1, .Lswitch.table.br_jt8@gotoff_lo
269 ; PIC-NEXT:    and %s1, %s1, (32)0
270 ; PIC-NEXT:    lea.sl %s1, .Lswitch.table.br_jt8@gotoff_hi(%s1, %s15)
271 ; PIC-NEXT:    ldl.sx %s0, (%s0, %s1)
272 ; PIC-NEXT:  .LBB3_4:
273 ; PIC-NEXT:    ld %s16, 32(, %s11)
274 ; PIC-NEXT:    ld %s15, 24(, %s11)
275 ; PIC-NEXT:    b.l.t (, %s10)
276   %2 = add i32 %0, -1
277   %3 = icmp ult i32 %2, 9
278   br i1 %3, label %4, label %13
280 4:                                                ; preds = %1
281   %5 = trunc i32 %2 to i16
282   %6 = lshr i16 495, %5
283   %7 = and i16 %6, 1
284   %8 = icmp eq i16 %7, 0
285   br i1 %8, label %13, label %9
287 9:                                                ; preds = %4
288   %10 = sext i32 %2 to i64
289   %11 = getelementptr inbounds [9 x i32], ptr @switch.table.br_jt8, i64 0, i64 %10
290   %12 = load i32, ptr %11, align 4
291   ret i32 %12
293 13:                                               ; preds = %1, %4
294   ret i32 %0
297 ; Function Attrs: norecurse nounwind readnone
298 define signext i32 @br_jt3_m(i32 signext %0, i32 signext %1) {
299 ; CHECK-LABEL: br_jt3_m:
300 ; CHECK:       # %bb.0:
301 ; CHECK-NEXT:    and %s0, %s0, (32)0
302 ; CHECK-NEXT:    breq.w 1, %s0, .LBB4_1
303 ; CHECK-NEXT:  # %bb.2:
304 ; CHECK-NEXT:    breq.w 4, %s0, .LBB4_5
305 ; CHECK-NEXT:  # %bb.3:
306 ; CHECK-NEXT:    brne.w 2, %s0, .LBB4_6
307 ; CHECK-NEXT:  # %bb.4:
308 ; CHECK-NEXT:    or %s0, 0, (0)1
309 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
310 ; CHECK-NEXT:    b.l.t (, %s10)
311 ; CHECK-NEXT:  .LBB4_5:
312 ; CHECK-NEXT:    and %s0, %s1, (32)0
313 ; CHECK-NEXT:    adds.w.sx %s0, 3, %s0
314 ; CHECK-NEXT:  .LBB4_6:
315 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
316 ; CHECK-NEXT:    b.l.t (, %s10)
317 ; CHECK-NEXT:  .LBB4_1:
318 ; CHECK-NEXT:    or %s0, 3, (0)1
319 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
320 ; CHECK-NEXT:    b.l.t (, %s10)
322 ; PIC-LABEL: br_jt3_m:
323 ; PIC:       # %bb.0:
324 ; PIC-NEXT:    and %s0, %s0, (32)0
325 ; PIC-NEXT:    breq.w 1, %s0, .LBB4_1
326 ; PIC-NEXT:  # %bb.2:
327 ; PIC-NEXT:    breq.w 4, %s0, .LBB4_5
328 ; PIC-NEXT:  # %bb.3:
329 ; PIC-NEXT:    brne.w 2, %s0, .LBB4_6
330 ; PIC-NEXT:  # %bb.4:
331 ; PIC-NEXT:    or %s0, 0, (0)1
332 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
333 ; PIC-NEXT:    b.l.t (, %s10)
334 ; PIC-NEXT:  .LBB4_5:
335 ; PIC-NEXT:    and %s0, %s1, (32)0
336 ; PIC-NEXT:    adds.w.sx %s0, 3, %s0
337 ; PIC-NEXT:  .LBB4_6:
338 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
339 ; PIC-NEXT:    b.l.t (, %s10)
340 ; PIC-NEXT:  .LBB4_1:
341 ; PIC-NEXT:    or %s0, 3, (0)1
342 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
343 ; PIC-NEXT:    b.l.t (, %s10)
344   switch i32 %0, label %6 [
345     i32 1, label %7
346     i32 2, label %3
347     i32 4, label %4
348   ]
350 3:                                                ; preds = %2
351   br label %7
353 4:                                                ; preds = %2
354   %5 = add nsw i32 %1, 3
355   br label %7
357 6:                                                ; preds = %2
358   br label %7
360 7:                                                ; preds = %2, %6, %4, %3
361   %8 = phi i32 [ %0, %6 ], [ %5, %4 ], [ 0, %3 ], [ 3, %2 ]
362   ret i32 %8
365 ; Function Attrs: norecurse nounwind readnone
366 define signext i32 @br_jt4_m(i32 signext %0, i32 signext %1) {
367 ; CHECK-LABEL: br_jt4_m:
368 ; CHECK:       # %bb.0:
369 ; CHECK-NEXT:    and %s0, %s0, (32)0
370 ; CHECK-NEXT:    adds.w.sx %s2, -1, %s0
371 ; CHECK-NEXT:    cmpu.w %s3, 3, %s2
372 ; CHECK-NEXT:    brgt.w 0, %s3, .LBB5_5
373 ; CHECK-NEXT:  # %bb.1:
374 ; CHECK-NEXT:    adds.w.zx %s0, %s2, (0)1
375 ; CHECK-NEXT:    sll %s0, %s0, 3
376 ; CHECK-NEXT:    lea %s2, .LJTI5_0@lo
377 ; CHECK-NEXT:    and %s2, %s2, (32)0
378 ; CHECK-NEXT:    lea.sl %s2, .LJTI5_0@hi(, %s2)
379 ; CHECK-NEXT:    ld %s2, (%s2, %s0)
380 ; CHECK-NEXT:    or %s0, 3, (0)1
381 ; CHECK-NEXT:    b.l.t (, %s2)
382 ; CHECK-NEXT:  .LBB5_2:
383 ; CHECK-NEXT:    or %s0, 0, (0)1
384 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
385 ; CHECK-NEXT:    b.l.t (, %s10)
386 ; CHECK-NEXT:  .LBB5_3:
387 ; CHECK-NEXT:    or %s0, 4, (0)1
388 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
389 ; CHECK-NEXT:    b.l.t (, %s10)
390 ; CHECK-NEXT:  .LBB5_4:
391 ; CHECK-NEXT:    and %s0, %s1, (32)0
392 ; CHECK-NEXT:    adds.w.sx %s0, 3, %s0
393 ; CHECK-NEXT:  .LBB5_5:
394 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
395 ; CHECK-NEXT:    b.l.t (, %s10)
397 ; PIC-LABEL: br_jt4_m:
398 ; PIC:       # %bb.0:
399 ; PIC-NEXT:    and %s0, %s0, (32)0
400 ; PIC-NEXT:    brlt.w 2, %s0, .LBB5_4
401 ; PIC-NEXT:  # %bb.1:
402 ; PIC-NEXT:    breq.w 1, %s0, .LBB5_8
403 ; PIC-NEXT:  # %bb.2:
404 ; PIC-NEXT:    brne.w 2, %s0, .LBB5_7
405 ; PIC-NEXT:  # %bb.3:
406 ; PIC-NEXT:    or %s0, 0, (0)1
407 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
408 ; PIC-NEXT:    b.l.t (, %s10)
409 ; PIC-NEXT:  .LBB5_4:
410 ; PIC-NEXT:    breq.w 3, %s0, .LBB5_9
411 ; PIC-NEXT:  # %bb.5:
412 ; PIC-NEXT:    brne.w 4, %s0, .LBB5_7
413 ; PIC-NEXT:  # %bb.6:
414 ; PIC-NEXT:    and %s0, %s1, (32)0
415 ; PIC-NEXT:    adds.w.sx %s0, 3, %s0
416 ; PIC-NEXT:  .LBB5_7:
417 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
418 ; PIC-NEXT:    b.l.t (, %s10)
419 ; PIC-NEXT:  .LBB5_8:
420 ; PIC-NEXT:    or %s0, 3, (0)1
421 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
422 ; PIC-NEXT:    b.l.t (, %s10)
423 ; PIC-NEXT:  .LBB5_9:
424 ; PIC-NEXT:    or %s0, 4, (0)1
425 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
426 ; PIC-NEXT:    b.l.t (, %s10)
427   switch i32 %0, label %7 [
428     i32 1, label %8
429     i32 2, label %3
430     i32 3, label %4
431     i32 4, label %5
432   ]
434 3:                                                ; preds = %2
435   br label %8
437 4:                                                ; preds = %2
438   br label %8
440 5:                                                ; preds = %2
441   %6 = add nsw i32 %1, 3
442   br label %8
444 7:                                                ; preds = %2
445   br label %8
447 8:                                                ; preds = %2, %7, %5, %4, %3
448   %9 = phi i32 [ %0, %7 ], [ %6, %5 ], [ 4, %4 ], [ 0, %3 ], [ 3, %2 ]
449   ret i32 %9
452 ; Function Attrs: norecurse nounwind readnone
453 define signext i32 @br_jt7_m(i32 signext %0, i32 signext %1) {
454 ; CHECK-LABEL: br_jt7_m:
455 ; CHECK:       # %bb.0:
456 ; CHECK-NEXT:    and %s2, %s0, (32)0
457 ; CHECK-NEXT:    adds.w.sx %s0, -1, %s2
458 ; CHECK-NEXT:    cmpu.w %s3, 8, %s0
459 ; CHECK-NEXT:    brgt.w 0, %s3, .LBB6_8
460 ; CHECK-NEXT:  # %bb.1:
461 ; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1
462 ; CHECK-NEXT:    sll %s0, %s0, 3
463 ; CHECK-NEXT:    lea %s3, .LJTI6_0@lo
464 ; CHECK-NEXT:    and %s3, %s3, (32)0
465 ; CHECK-NEXT:    lea.sl %s3, .LJTI6_0@hi(, %s3)
466 ; CHECK-NEXT:    ld %s3, (%s3, %s0)
467 ; CHECK-NEXT:    and %s1, %s1, (32)0
468 ; CHECK-NEXT:    or %s0, 3, (0)1
469 ; CHECK-NEXT:    b.l.t (, %s3)
470 ; CHECK-NEXT:  .LBB6_2:
471 ; CHECK-NEXT:    or %s0, 0, (0)1
472 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
473 ; CHECK-NEXT:    b.l.t (, %s10)
474 ; CHECK-NEXT:  .LBB6_8:
475 ; CHECK-NEXT:    or %s0, 0, %s2
476 ; CHECK-NEXT:  .LBB6_9:
477 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
478 ; CHECK-NEXT:    b.l.t (, %s10)
479 ; CHECK-NEXT:  .LBB6_7:
480 ; CHECK-NEXT:    or %s0, 11, (0)1
481 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
482 ; CHECK-NEXT:    b.l.t (, %s10)
483 ; CHECK-NEXT:  .LBB6_6:
484 ; CHECK-NEXT:    or %s0, 10, (0)1
485 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
486 ; CHECK-NEXT:    b.l.t (, %s10)
487 ; CHECK-NEXT:  .LBB6_3:
488 ; CHECK-NEXT:    or %s0, 4, (0)1
489 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
490 ; CHECK-NEXT:    b.l.t (, %s10)
491 ; CHECK-NEXT:  .LBB6_4:
492 ; CHECK-NEXT:    adds.w.sx %s0, 3, %s1
493 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
494 ; CHECK-NEXT:    b.l.t (, %s10)
495 ; CHECK-NEXT:  .LBB6_5:
496 ; CHECK-NEXT:    adds.w.sx %s0, -2, %s1
497 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
498 ; CHECK-NEXT:    b.l.t (, %s10)
500 ; PIC-LABEL: br_jt7_m:
501 ; PIC:       # %bb.0:
502 ; PIC-NEXT:    and %s0, %s0, (32)0
503 ; PIC-NEXT:    brge.w 3, %s0, .LBB6_1
504 ; PIC-NEXT:  # %bb.6:
505 ; PIC-NEXT:    brlt.w 7, %s0, .LBB6_10
506 ; PIC-NEXT:  # %bb.7:
507 ; PIC-NEXT:    and %s1, %s1, (32)0
508 ; PIC-NEXT:    breq.w 4, %s0, .LBB6_14
509 ; PIC-NEXT:  # %bb.8:
510 ; PIC-NEXT:    brne.w 7, %s0, .LBB6_16
511 ; PIC-NEXT:  # %bb.9:
512 ; PIC-NEXT:    adds.w.sx %s0, -2, %s1
513 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
514 ; PIC-NEXT:    b.l.t (, %s10)
515 ; PIC-NEXT:  .LBB6_1:
516 ; PIC-NEXT:    breq.w 1, %s0, .LBB6_2
517 ; PIC-NEXT:  # %bb.3:
518 ; PIC-NEXT:    breq.w 2, %s0, .LBB6_13
519 ; PIC-NEXT:  # %bb.4:
520 ; PIC-NEXT:    brne.w 3, %s0, .LBB6_16
521 ; PIC-NEXT:  # %bb.5:
522 ; PIC-NEXT:    or %s0, 4, (0)1
523 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
524 ; PIC-NEXT:    b.l.t (, %s10)
525 ; PIC-NEXT:  .LBB6_10:
526 ; PIC-NEXT:    breq.w 8, %s0, .LBB6_15
527 ; PIC-NEXT:  # %bb.11:
528 ; PIC-NEXT:    brne.w 9, %s0, .LBB6_16
529 ; PIC-NEXT:  # %bb.12:
530 ; PIC-NEXT:    or %s0, 10, (0)1
531 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
532 ; PIC-NEXT:    b.l.t (, %s10)
533 ; PIC-NEXT:  .LBB6_2:
534 ; PIC-NEXT:    or %s0, 3, (0)1
535 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
536 ; PIC-NEXT:    b.l.t (, %s10)
537 ; PIC-NEXT:  .LBB6_14:
538 ; PIC-NEXT:    adds.w.sx %s0, 3, %s1
539 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
540 ; PIC-NEXT:    b.l.t (, %s10)
541 ; PIC-NEXT:  .LBB6_15:
542 ; PIC-NEXT:    or %s0, 11, (0)1
543 ; PIC-NEXT:  .LBB6_16:
544 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
545 ; PIC-NEXT:    b.l.t (, %s10)
546 ; PIC-NEXT:  .LBB6_13:
547 ; PIC-NEXT:    or %s0, 0, (0)1
548 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
549 ; PIC-NEXT:    b.l.t (, %s10)
550   switch i32 %0, label %11 [
551     i32 1, label %12
552     i32 2, label %3
553     i32 3, label %4
554     i32 4, label %5
555     i32 7, label %7
556     i32 9, label %9
557     i32 8, label %10
558   ]
560 3:                                                ; preds = %2
561   br label %12
563 4:                                                ; preds = %2
564   br label %12
566 5:                                                ; preds = %2
567   %6 = add nsw i32 %1, 3
568   br label %12
570 7:                                                ; preds = %2
571   %8 = add nsw i32 %1, -2
572   br label %12
574 9:                                                ; preds = %2
575   br label %12
577 10:                                               ; preds = %2
578   br label %12
580 11:                                               ; preds = %2
581   br label %12
583 12:                                               ; preds = %2, %11, %10, %9, %7, %5, %4, %3
584   %13 = phi i32 [ %0, %11 ], [ 11, %10 ], [ 10, %9 ], [ %8, %7 ], [ %6, %5 ], [ 4, %4 ], [ 0, %3 ], [ 3, %2 ]
585   ret i32 %13
588 ; Function Attrs: norecurse nounwind readnone
589 define signext i32 @br_jt8_m(i32 signext %0, i32 signext %1) {
590 ; CHECK-LABEL: br_jt8_m:
591 ; CHECK:       # %bb.0:
592 ; CHECK-NEXT:    and %s2, %s0, (32)0
593 ; CHECK-NEXT:    adds.w.sx %s0, -1, %s2
594 ; CHECK-NEXT:    cmpu.w %s3, 8, %s0
595 ; CHECK-NEXT:    brgt.w 0, %s3, .LBB7_9
596 ; CHECK-NEXT:  # %bb.1:
597 ; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1
598 ; CHECK-NEXT:    sll %s0, %s0, 3
599 ; CHECK-NEXT:    lea %s3, .LJTI7_0@lo
600 ; CHECK-NEXT:    and %s3, %s3, (32)0
601 ; CHECK-NEXT:    lea.sl %s3, .LJTI7_0@hi(, %s3)
602 ; CHECK-NEXT:    ld %s3, (%s3, %s0)
603 ; CHECK-NEXT:    and %s1, %s1, (32)0
604 ; CHECK-NEXT:    or %s0, 3, (0)1
605 ; CHECK-NEXT:    b.l.t (, %s3)
606 ; CHECK-NEXT:  .LBB7_2:
607 ; CHECK-NEXT:    or %s0, 0, (0)1
608 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
609 ; CHECK-NEXT:    b.l.t (, %s10)
610 ; CHECK-NEXT:  .LBB7_9:
611 ; CHECK-NEXT:    or %s0, 0, %s2
612 ; CHECK-NEXT:  .LBB7_10:
613 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
614 ; CHECK-NEXT:    b.l.t (, %s10)
615 ; CHECK-NEXT:  .LBB7_6:
616 ; CHECK-NEXT:    adds.w.sx %s0, -2, %s1
617 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
618 ; CHECK-NEXT:    b.l.t (, %s10)
619 ; CHECK-NEXT:  .LBB7_8:
620 ; CHECK-NEXT:    or %s0, 11, (0)1
621 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
622 ; CHECK-NEXT:    b.l.t (, %s10)
623 ; CHECK-NEXT:  .LBB7_7:
624 ; CHECK-NEXT:    or %s0, 10, (0)1
625 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
626 ; CHECK-NEXT:    b.l.t (, %s10)
627 ; CHECK-NEXT:  .LBB7_3:
628 ; CHECK-NEXT:    or %s0, 4, (0)1
629 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
630 ; CHECK-NEXT:    b.l.t (, %s10)
631 ; CHECK-NEXT:  .LBB7_4:
632 ; CHECK-NEXT:    adds.w.sx %s0, 3, %s1
633 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
634 ; CHECK-NEXT:    b.l.t (, %s10)
635 ; CHECK-NEXT:  .LBB7_5:
636 ; CHECK-NEXT:    adds.w.sx %s0, -5, %s1
637 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
638 ; CHECK-NEXT:    b.l.t (, %s10)
640 ; PIC-LABEL: br_jt8_m:
641 ; PIC:       # %bb.0:
642 ; PIC-NEXT:    st %s15, 24(, %s11)
643 ; PIC-NEXT:    st %s16, 32(, %s11)
644 ; PIC-NEXT:    and %s2, %s0, (32)0
645 ; PIC-NEXT:    adds.w.sx %s0, -1, %s2
646 ; PIC-NEXT:    cmpu.w %s3, 8, %s0
647 ; PIC-NEXT:    lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
648 ; PIC-NEXT:    and %s15, %s15, (32)0
649 ; PIC-NEXT:    sic %s16
650 ; PIC-NEXT:    lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
651 ; PIC-NEXT:    brgt.w 0, %s3, .LBB7_9
652 ; PIC-NEXT:  # %bb.1:
653 ; PIC-NEXT:    and %s1, %s1, (32)0
654 ; PIC-NEXT:    adds.w.zx %s0, %s0, (0)1
655 ; PIC-NEXT:    sll %s0, %s0, 2
656 ; PIC-NEXT:    lea %s3, .LJTI7_0@gotoff_lo
657 ; PIC-NEXT:    and %s3, %s3, (32)0
658 ; PIC-NEXT:    lea.sl %s3, .LJTI7_0@gotoff_hi(%s3, %s15)
659 ; PIC-NEXT:    ldl.sx %s0, (%s3, %s0)
660 ; PIC-NEXT:    lea %s3, br_jt8_m@gotoff_lo
661 ; PIC-NEXT:    and %s3, %s3, (32)0
662 ; PIC-NEXT:    lea.sl %s3, br_jt8_m@gotoff_hi(%s3, %s15)
663 ; PIC-NEXT:    adds.l %s3, %s0, %s3
664 ; PIC-NEXT:    or %s0, 3, (0)1
665 ; PIC-NEXT:    b.l.t (, %s3)
666 ; PIC-NEXT:  .LBB7_2:
667 ; PIC-NEXT:    or %s0, 0, (0)1
668 ; PIC-NEXT:    br.l.t .LBB7_10
669 ; PIC-NEXT:  .LBB7_9:
670 ; PIC-NEXT:    or %s0, 0, %s2
671 ; PIC-NEXT:    br.l.t .LBB7_10
672 ; PIC-NEXT:  .LBB7_6:
673 ; PIC-NEXT:    adds.w.sx %s0, -2, %s1
674 ; PIC-NEXT:    br.l.t .LBB7_10
675 ; PIC-NEXT:  .LBB7_8:
676 ; PIC-NEXT:    or %s0, 11, (0)1
677 ; PIC-NEXT:    br.l.t .LBB7_10
678 ; PIC-NEXT:  .LBB7_7:
679 ; PIC-NEXT:    or %s0, 10, (0)1
680 ; PIC-NEXT:    br.l.t .LBB7_10
681 ; PIC-NEXT:  .LBB7_3:
682 ; PIC-NEXT:    or %s0, 4, (0)1
683 ; PIC-NEXT:    br.l.t .LBB7_10
684 ; PIC-NEXT:  .LBB7_4:
685 ; PIC-NEXT:    adds.w.sx %s0, 3, %s1
686 ; PIC-NEXT:    br.l.t .LBB7_10
687 ; PIC-NEXT:  .LBB7_5:
688 ; PIC-NEXT:    adds.w.sx %s0, -5, %s1
689 ; PIC-NEXT:  .LBB7_10:
690 ; PIC-NEXT:    adds.w.sx %s0, %s0, (0)1
691 ; PIC-NEXT:    ld %s16, 32(, %s11)
692 ; PIC-NEXT:    ld %s15, 24(, %s11)
693 ; PIC-NEXT:    b.l.t (, %s10)
694   switch i32 %0, label %13 [
695     i32 1, label %14
696     i32 2, label %3
697     i32 3, label %4
698     i32 4, label %5
699     i32 6, label %7
700     i32 7, label %9
701     i32 9, label %11
702     i32 8, label %12
703   ]
705 3:                                                ; preds = %2
706   br label %14
708 4:                                                ; preds = %2
709   br label %14
711 5:                                                ; preds = %2
712   %6 = add nsw i32 %1, 3
713   br label %14
715 7:                                                ; preds = %2
716   %8 = add nsw i32 %1, -5
717   br label %14
719 9:                                                ; preds = %2
720   %10 = add nsw i32 %1, -2
721   br label %14
723 11:                                               ; preds = %2
724   br label %14
726 12:                                               ; preds = %2
727   br label %14
729 13:                                               ; preds = %2
730   br label %14
732 14:                                               ; preds = %2, %13, %12, %11, %9, %7, %5, %4, %3
733   %15 = phi i32 [ %0, %13 ], [ 11, %12 ], [ 10, %11 ], [ %10, %9 ], [ %8, %7 ], [ %6, %5 ], [ 4, %4 ], [ 0, %3 ], [ 3, %2 ]
734   ret i32 %15