1 ; RUN: llc < %s -mtriple=ve | FileCheck %s
2 ; RUN: llc < %s -mtriple=ve -relocation-model=pic \
3 ; RUN: | FileCheck %s -check-prefix=PIC
5 @switch.table.br_jt4 = private unnamed_addr constant [4 x i32] [i32 3, i32 0, i32 4, i32 7], align 4
6 @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
7 @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
9 ; Function Attrs: norecurse nounwind readnone
10 define signext i32 @br_jt3(i32 signext %0) {
11 ; CHECK-LABEL: br_jt3:
13 ; CHECK-NEXT: and %s0, %s0, (32)0
14 ; CHECK-NEXT: breq.w 1, %s0, .LBB{{[0-9]+}}_1
15 ; CHECK-NEXT: # %bb.2:
16 ; CHECK-NEXT: breq.w 4, %s0, .LBB{{[0-9]+}}_5
17 ; CHECK-NEXT: # %bb.3:
18 ; CHECK-NEXT: brne.w 2, %s0, .LBB{{[0-9]+}}_6
19 ; CHECK-NEXT: # %bb.4:
20 ; CHECK-NEXT: or %s0, 0, (0)1
21 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
22 ; CHECK-NEXT: b.l.t (, %s10)
23 ; CHECK-NEXT: .LBB{{[0-9]+}}_1:
24 ; CHECK-NEXT: or %s0, 3, (0)1
25 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
26 ; CHECK-NEXT: b.l.t (, %s10)
27 ; CHECK-NEXT: .LBB{{[0-9]+}}_5:
28 ; CHECK-NEXT: or %s0, 7, (0)1
29 ; CHECK-NEXT: .LBB{{[0-9]+}}_6:
30 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
31 ; CHECK-NEXT: b.l.t (, %s10)
35 ; PIC-NEXT: and %s0, %s0, (32)0
36 ; PIC-NEXT: breq.w 1, %s0, .LBB0_1
38 ; PIC-NEXT: breq.w 4, %s0, .LBB0_5
40 ; PIC-NEXT: brne.w 2, %s0, .LBB0_6
42 ; PIC-NEXT: or %s0, 0, (0)1
43 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
44 ; PIC-NEXT: b.l.t (, %s10)
46 ; PIC-NEXT: or %s0, 3, (0)1
47 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
48 ; PIC-NEXT: b.l.t (, %s10)
50 ; PIC-NEXT: or %s0, 7, (0)1
52 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
53 ; PIC-NEXT: b.l.t (, %s10)
54 switch i32 %0, label %4 [
69 5: ; preds = %1, %4, %3, %2
70 %6 = phi i32 [ %0, %4 ], [ 7, %3 ], [ 0, %2 ], [ 3, %1 ]
74 ; Function Attrs: norecurse nounwind readnone
75 define signext i32 @br_jt4(i32 signext %0) {
76 ; CHECK-LABEL: br_jt4:
78 ; CHECK-NEXT: and %s0, %s0, (32)0
79 ; CHECK-NEXT: adds.w.sx %s1, -1, %s0
80 ; CHECK-NEXT: cmpu.w %s2, 3, %s1
81 ; CHECK-NEXT: brgt.w 0, %s2, .LBB{{[0-9]+}}_2
82 ; CHECK-NEXT: # %bb.1:
83 ; CHECK-NEXT: adds.w.sx %s0, %s1, (0)1
84 ; CHECK-NEXT: sll %s0, %s0, 2
85 ; CHECK-NEXT: lea %s1, .Lswitch.table.br_jt4@lo
86 ; CHECK-NEXT: and %s1, %s1, (32)0
87 ; CHECK-NEXT: lea.sl %s1, .Lswitch.table.br_jt4@hi(, %s1)
88 ; CHECK-NEXT: ldl.sx %s0, (%s0, %s1)
89 ; CHECK-NEXT: b.l.t (, %s10)
90 ; CHECK-NEXT: .LBB{{[0-9]+}}_2:
91 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
92 ; CHECK-NEXT: b.l.t (, %s10)
96 ; PIC-NEXT: st %s15, 24(, %s11)
97 ; PIC-NEXT: st %s16, 32(, %s11)
98 ; PIC-NEXT: and %s0, %s0, (32)0
99 ; PIC-NEXT: adds.w.sx %s1, -1, %s0
100 ; PIC-NEXT: cmpu.w %s2, 3, %s1
101 ; PIC-NEXT: lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
102 ; PIC-NEXT: and %s15, %s15, (32)0
104 ; PIC-NEXT: lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
105 ; PIC-NEXT: brgt.w 0, %s2, .LBB1_2
107 ; PIC-NEXT: adds.w.sx %s0, %s1, (0)1
108 ; PIC-NEXT: sll %s0, %s0, 2
109 ; PIC-NEXT: lea %s1, .Lswitch.table.br_jt4@gotoff_lo
110 ; PIC-NEXT: and %s1, %s1, (32)0
111 ; PIC-NEXT: lea.sl %s1, .Lswitch.table.br_jt4@gotoff_hi(%s1, %s15)
112 ; PIC-NEXT: ldl.sx %s0, (%s0, %s1)
113 ; PIC-NEXT: br.l.t .LBB1_3
115 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
117 ; PIC-NEXT: ld %s16, 32(, %s11)
118 ; PIC-NEXT: ld %s15, 24(, %s11)
119 ; PIC-NEXT: b.l.t (, %s10)
121 %3 = icmp ult i32 %2, 4
122 br i1 %3, label %4, label %8
125 %5 = sext i32 %2 to i64
126 %6 = getelementptr inbounds [4 x i32], [4 x i32]* @switch.table.br_jt4, i64 0, i64 %5
127 %7 = load i32, i32* %6, align 4
134 ; Function Attrs: norecurse nounwind readnone
135 define signext i32 @br_jt7(i32 signext %0) {
136 ; CHECK-LABEL: br_jt7:
138 ; CHECK-NEXT: and %s0, %s0, (32)0
139 ; CHECK-NEXT: adds.w.sx %s1, -1, %s0
140 ; CHECK-NEXT: cmpu.w %s2, 8, %s1
141 ; CHECK-NEXT: brgt.w 0, %s2, .LBB{{[0-9]+}}_3
142 ; CHECK-NEXT: # %bb.1:
143 ; CHECK-NEXT: and %s2, %s1, (48)0
144 ; CHECK-NEXT: lea %s3, 463
145 ; CHECK-NEXT: and %s3, %s3, (32)0
146 ; CHECK-NEXT: srl %s2, %s3, %s2
147 ; CHECK-NEXT: and %s2, 1, %s2
148 ; CHECK-NEXT: brne.w 0, %s2, .LBB{{[0-9]+}}_2
149 ; CHECK-NEXT: .LBB{{[0-9]+}}_3:
150 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
151 ; CHECK-NEXT: b.l.t (, %s10)
152 ; CHECK-NEXT: .LBB{{[0-9]+}}_2:
153 ; CHECK-NEXT: adds.w.sx %s0, %s1, (0)1
154 ; CHECK-NEXT: sll %s0, %s0, 2
155 ; CHECK-NEXT: lea %s1, .Lswitch.table.br_jt7@lo
156 ; CHECK-NEXT: and %s1, %s1, (32)0
157 ; CHECK-NEXT: lea.sl %s1, .Lswitch.table.br_jt7@hi(, %s1)
158 ; CHECK-NEXT: ldl.sx %s0, (%s0, %s1)
159 ; CHECK-NEXT: b.l.t (, %s10)
163 ; PIC-NEXT: st %s15, 24(, %s11)
164 ; PIC-NEXT: st %s16, 32(, %s11)
165 ; PIC-NEXT: and %s0, %s0, (32)0
166 ; PIC-NEXT: adds.w.sx %s1, -1, %s0
167 ; PIC-NEXT: cmpu.w %s2, 8, %s1
168 ; PIC-NEXT: lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
169 ; PIC-NEXT: and %s15, %s15, (32)0
171 ; PIC-NEXT: lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
172 ; PIC-NEXT: brgt.w 0, %s2, .LBB2_3
174 ; PIC-NEXT: and %s2, %s1, (48)0
175 ; PIC-NEXT: lea %s3, 463
176 ; PIC-NEXT: and %s3, %s3, (32)0
177 ; PIC-NEXT: srl %s2, %s3, %s2
178 ; PIC-NEXT: and %s2, 1, %s2
179 ; PIC-NEXT: brne.w 0, %s2, .LBB2_2
181 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
182 ; PIC-NEXT: br.l.t .LBB2_4
184 ; PIC-NEXT: adds.w.sx %s0, %s1, (0)1
185 ; PIC-NEXT: sll %s0, %s0, 2
186 ; PIC-NEXT: lea %s1, .Lswitch.table.br_jt7@gotoff_lo
187 ; PIC-NEXT: and %s1, %s1, (32)0
188 ; PIC-NEXT: lea.sl %s1, .Lswitch.table.br_jt7@gotoff_hi(%s1, %s15)
189 ; PIC-NEXT: ldl.sx %s0, (%s0, %s1)
191 ; PIC-NEXT: ld %s16, 32(, %s11)
192 ; PIC-NEXT: ld %s15, 24(, %s11)
193 ; PIC-NEXT: b.l.t (, %s10)
195 %3 = icmp ult i32 %2, 9
196 br i1 %3, label %4, label %13
199 %5 = trunc i32 %2 to i16
200 %6 = lshr i16 463, %5
202 %8 = icmp eq i16 %7, 0
203 br i1 %8, label %13, label %9
206 %10 = sext i32 %2 to i64
207 %11 = getelementptr inbounds [9 x i32], [9 x i32]* @switch.table.br_jt7, i64 0, i64 %10
208 %12 = load i32, i32* %11, align 4
215 ; Function Attrs: norecurse nounwind readnone
216 define signext i32 @br_jt8(i32 signext %0) {
217 ; CHECK-LABEL: br_jt8:
219 ; CHECK-NEXT: and %s0, %s0, (32)0
220 ; CHECK-NEXT: adds.w.sx %s1, -1, %s0
221 ; CHECK-NEXT: cmpu.w %s2, 8, %s1
222 ; CHECK-NEXT: brgt.w 0, %s2, .LBB{{[0-9]+}}_3
223 ; CHECK-NEXT: # %bb.1:
224 ; CHECK-NEXT: and %s2, %s1, (48)0
225 ; CHECK-NEXT: lea %s3, 495
226 ; CHECK-NEXT: and %s3, %s3, (32)0
227 ; CHECK-NEXT: srl %s2, %s3, %s2
228 ; CHECK-NEXT: and %s2, 1, %s2
229 ; CHECK-NEXT: brne.w 0, %s2, .LBB{{[0-9]+}}_2
230 ; CHECK-NEXT: .LBB{{[0-9]+}}_3:
231 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
232 ; CHECK-NEXT: b.l.t (, %s10)
233 ; CHECK-NEXT: .LBB{{[0-9]+}}_2:
234 ; CHECK-NEXT: adds.w.sx %s0, %s1, (0)1
235 ; CHECK-NEXT: sll %s0, %s0, 2
236 ; CHECK-NEXT: lea %s1, .Lswitch.table.br_jt8@lo
237 ; CHECK-NEXT: and %s1, %s1, (32)0
238 ; CHECK-NEXT: lea.sl %s1, .Lswitch.table.br_jt8@hi(, %s1)
239 ; CHECK-NEXT: ldl.sx %s0, (%s0, %s1)
240 ; CHECK-NEXT: b.l.t (, %s10)
244 ; PIC-NEXT: st %s15, 24(, %s11)
245 ; PIC-NEXT: st %s16, 32(, %s11)
246 ; PIC-NEXT: and %s0, %s0, (32)0
247 ; PIC-NEXT: adds.w.sx %s1, -1, %s0
248 ; PIC-NEXT: cmpu.w %s2, 8, %s1
249 ; PIC-NEXT: lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
250 ; PIC-NEXT: and %s15, %s15, (32)0
252 ; PIC-NEXT: lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
253 ; PIC-NEXT: brgt.w 0, %s2, .LBB3_3
255 ; PIC-NEXT: and %s2, %s1, (48)0
256 ; PIC-NEXT: lea %s3, 495
257 ; PIC-NEXT: and %s3, %s3, (32)0
258 ; PIC-NEXT: srl %s2, %s3, %s2
259 ; PIC-NEXT: and %s2, 1, %s2
260 ; PIC-NEXT: brne.w 0, %s2, .LBB3_2
262 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
263 ; PIC-NEXT: br.l.t .LBB3_4
265 ; PIC-NEXT: adds.w.sx %s0, %s1, (0)1
266 ; PIC-NEXT: sll %s0, %s0, 2
267 ; PIC-NEXT: lea %s1, .Lswitch.table.br_jt8@gotoff_lo
268 ; PIC-NEXT: and %s1, %s1, (32)0
269 ; PIC-NEXT: lea.sl %s1, .Lswitch.table.br_jt8@gotoff_hi(%s1, %s15)
270 ; PIC-NEXT: ldl.sx %s0, (%s0, %s1)
272 ; PIC-NEXT: ld %s16, 32(, %s11)
273 ; PIC-NEXT: ld %s15, 24(, %s11)
274 ; PIC-NEXT: b.l.t (, %s10)
276 %3 = icmp ult i32 %2, 9
277 br i1 %3, label %4, label %13
280 %5 = trunc i32 %2 to i16
281 %6 = lshr i16 495, %5
283 %8 = icmp eq i16 %7, 0
284 br i1 %8, label %13, label %9
287 %10 = sext i32 %2 to i64
288 %11 = getelementptr inbounds [9 x i32], [9 x i32]* @switch.table.br_jt8, i64 0, i64 %10
289 %12 = load i32, i32* %11, align 4
296 ; Function Attrs: norecurse nounwind readnone
297 define signext i32 @br_jt3_m(i32 signext %0, i32 signext %1) {
298 ; CHECK-LABEL: br_jt3_m:
300 ; CHECK-NEXT: and %s0, %s0, (32)0
301 ; CHECK-NEXT: breq.w 1, %s0, .LBB{{[0-9]+}}_1
302 ; CHECK-NEXT: # %bb.2:
303 ; CHECK-NEXT: breq.w 4, %s0, .LBB{{[0-9]+}}_5
304 ; CHECK-NEXT: # %bb.3:
305 ; CHECK-NEXT: brne.w 2, %s0, .LBB{{[0-9]+}}_6
306 ; CHECK-NEXT: # %bb.4:
307 ; CHECK-NEXT: or %s0, 0, (0)1
308 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
309 ; CHECK-NEXT: b.l.t (, %s10)
310 ; CHECK-NEXT: .LBB{{[0-9]+}}_1:
311 ; CHECK-NEXT: or %s0, 3, (0)1
312 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
313 ; CHECK-NEXT: b.l.t (, %s10)
314 ; CHECK-NEXT: .LBB{{[0-9]+}}_5:
315 ; CHECK-NEXT: and %s0, %s1, (32)0
316 ; CHECK-NEXT: adds.w.sx %s0, 3, %s0
317 ; CHECK-NEXT: .LBB{{[0-9]+}}_6:
318 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
319 ; CHECK-NEXT: b.l.t (, %s10)
321 ; PIC-LABEL: br_jt3_m:
323 ; PIC-NEXT: and %s0, %s0, (32)0
324 ; PIC-NEXT: breq.w 1, %s0, .LBB4_1
326 ; PIC-NEXT: breq.w 4, %s0, .LBB4_5
328 ; PIC-NEXT: brne.w 2, %s0, .LBB4_6
330 ; PIC-NEXT: or %s0, 0, (0)1
331 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
332 ; PIC-NEXT: b.l.t (, %s10)
334 ; PIC-NEXT: or %s0, 3, (0)1
335 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
336 ; PIC-NEXT: b.l.t (, %s10)
338 ; PIC-NEXT: and %s0, %s1, (32)0
339 ; PIC-NEXT: adds.w.sx %s0, 3, %s0
341 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
342 ; PIC-NEXT: b.l.t (, %s10)
343 switch i32 %0, label %6 [
353 %5 = add nsw i32 %1, 3
359 7: ; preds = %2, %6, %4, %3
360 %8 = phi i32 [ %0, %6 ], [ %5, %4 ], [ 0, %3 ], [ 3, %2 ]
364 ; Function Attrs: norecurse nounwind readnone
365 define signext i32 @br_jt4_m(i32 signext %0, i32 signext %1) {
366 ; CHECK-LABEL: br_jt4_m:
368 ; CHECK-NEXT: and %s0, %s0, (32)0
369 ; CHECK-NEXT: adds.w.sx %s2, -1, %s0
370 ; CHECK-NEXT: cmpu.w %s3, 3, %s2
371 ; CHECK-NEXT: brgt.w 0, %s3, .LBB{{[0-9]+}}_5
372 ; CHECK-NEXT: # %bb.1:
373 ; CHECK-NEXT: adds.w.zx %s0, %s2, (0)1
374 ; CHECK-NEXT: sll %s0, %s0, 3
375 ; CHECK-NEXT: lea %s2, .LJTI5_0@lo
376 ; CHECK-NEXT: and %s2, %s2, (32)0
377 ; CHECK-NEXT: lea.sl %s2, .LJTI5_0@hi(, %s2)
378 ; CHECK-NEXT: ld %s2, (%s2, %s0)
379 ; CHECK-NEXT: or %s0, 3, (0)1
380 ; CHECK-NEXT: b.l.t (, %s2)
381 ; CHECK-NEXT: .LBB{{[0-9]+}}_2:
382 ; CHECK-NEXT: or %s0, 0, (0)1
383 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
384 ; CHECK-NEXT: b.l.t (, %s10)
385 ; CHECK-NEXT: .LBB{{[0-9]+}}_3:
386 ; CHECK-NEXT: or %s0, 4, (0)1
387 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
388 ; CHECK-NEXT: b.l.t (, %s10)
389 ; CHECK-NEXT: .LBB{{[0-9]+}}_4:
390 ; CHECK-NEXT: and %s0, %s1, (32)0
391 ; CHECK-NEXT: adds.w.sx %s0, 3, %s0
392 ; CHECK-NEXT: .LBB{{[0-9]+}}_5:
393 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
394 ; CHECK-NEXT: b.l.t (, %s10)
396 ; PIC-LABEL: br_jt4_m:
398 ; PIC-NEXT: and %s0, %s0, (32)0
399 ; PIC-NEXT: brlt.w 2, %s0, .LBB5_4
401 ; PIC-NEXT: breq.w 1, %s0, .LBB5_8
403 ; PIC-NEXT: brne.w 2, %s0, .LBB5_7
405 ; PIC-NEXT: or %s0, 0, (0)1
406 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
407 ; PIC-NEXT: b.l.t (, %s10)
409 ; PIC-NEXT: breq.w 3, %s0, .LBB5_9
411 ; PIC-NEXT: brne.w 4, %s0, .LBB5_7
413 ; PIC-NEXT: and %s0, %s1, (32)0
414 ; PIC-NEXT: adds.w.sx %s0, 3, %s0
416 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
417 ; PIC-NEXT: b.l.t (, %s10)
419 ; PIC-NEXT: or %s0, 3, (0)1
420 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
421 ; PIC-NEXT: b.l.t (, %s10)
423 ; PIC-NEXT: or %s0, 4, (0)1
424 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
425 ; PIC-NEXT: b.l.t (, %s10)
426 switch i32 %0, label %7 [
440 %6 = add nsw i32 %1, 3
446 8: ; preds = %2, %7, %5, %4, %3
447 %9 = phi i32 [ %0, %7 ], [ %6, %5 ], [ 4, %4 ], [ 0, %3 ], [ 3, %2 ]
451 ; Function Attrs: norecurse nounwind readnone
452 define signext i32 @br_jt7_m(i32 signext %0, i32 signext %1) {
453 ; CHECK-LABEL: br_jt7_m:
455 ; CHECK-NEXT: and %s2, %s0, (32)0
456 ; CHECK-NEXT: adds.w.sx %s0, -1, %s2
457 ; CHECK-NEXT: cmpu.w %s3, 8, %s0
458 ; CHECK-NEXT: brgt.w 0, %s3, .LBB{{[0-9]+}}_8
459 ; CHECK-NEXT: # %bb.1:
460 ; CHECK-NEXT: adds.w.zx %s0, %s0, (0)1
461 ; CHECK-NEXT: sll %s0, %s0, 3
462 ; CHECK-NEXT: lea %s3, .LJTI6_0@lo
463 ; CHECK-NEXT: and %s3, %s3, (32)0
464 ; CHECK-NEXT: lea.sl %s3, .LJTI6_0@hi(, %s3)
465 ; CHECK-NEXT: ld %s3, (%s3, %s0)
466 ; CHECK-NEXT: and %s1, %s1, (32)0
467 ; CHECK-NEXT: or %s0, 3, (0)1
468 ; CHECK-NEXT: b.l.t (, %s3)
469 ; CHECK-NEXT: .LBB{{[0-9]+}}_2:
470 ; CHECK-NEXT: or %s0, 0, (0)1
471 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
472 ; CHECK-NEXT: b.l.t (, %s10)
473 ; CHECK-NEXT: .LBB{{[0-9]+}}_3:
474 ; CHECK-NEXT: or %s0, 4, (0)1
475 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
476 ; CHECK-NEXT: b.l.t (, %s10)
477 ; CHECK-NEXT: .LBB{{[0-9]+}}_4:
478 ; CHECK-NEXT: adds.w.sx %s0, 3, %s1
479 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
480 ; CHECK-NEXT: b.l.t (, %s10)
481 ; CHECK-NEXT: .LBB{{[0-9]+}}_8:
482 ; CHECK-NEXT: or %s0, 0, %s2
483 ; CHECK-NEXT: .LBB{{[0-9]+}}_9:
484 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
485 ; CHECK-NEXT: b.l.t (, %s10)
486 ; CHECK-NEXT: .LBB{{[0-9]+}}_7:
487 ; CHECK-NEXT: or %s0, 11, (0)1
488 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
489 ; CHECK-NEXT: b.l.t (, %s10)
490 ; CHECK-NEXT: .LBB{{[0-9]+}}_6:
491 ; CHECK-NEXT: or %s0, 10, (0)1
492 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
493 ; CHECK-NEXT: b.l.t (, %s10)
494 ; CHECK-NEXT: .LBB{{[0-9]+}}_5:
495 ; CHECK-NEXT: adds.w.sx %s0, -2, %s1
496 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
497 ; CHECK-NEXT: b.l.t (, %s10)
499 ; PIC-LABEL: br_jt7_m:
501 ; PIC-NEXT: and %s0, %s0, (32)0
502 ; PIC-NEXT: brge.w 3, %s0, .LBB6_1
504 ; PIC-NEXT: brlt.w 7, %s0, .LBB6_10
506 ; PIC-NEXT: and %s1, %s1, (32)0
507 ; PIC-NEXT: breq.w 4, %s0, .LBB6_14
509 ; PIC-NEXT: brne.w 7, %s0, .LBB6_16
511 ; PIC-NEXT: adds.w.sx %s0, -2, %s1
512 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
513 ; PIC-NEXT: b.l.t (, %s10)
515 ; PIC-NEXT: breq.w 1, %s0, .LBB6_2
517 ; PIC-NEXT: breq.w 2, %s0, .LBB6_13
519 ; PIC-NEXT: brne.w 3, %s0, .LBB6_16
521 ; PIC-NEXT: or %s0, 4, (0)1
522 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
523 ; PIC-NEXT: b.l.t (, %s10)
524 ; PIC-NEXT: .LBB6_10:
525 ; PIC-NEXT: breq.w 8, %s0, .LBB6_15
526 ; PIC-NEXT: # %bb.11:
527 ; PIC-NEXT: brne.w 9, %s0, .LBB6_16
528 ; PIC-NEXT: # %bb.12:
529 ; PIC-NEXT: or %s0, 10, (0)1
530 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
531 ; PIC-NEXT: b.l.t (, %s10)
532 ; PIC-NEXT: .LBB6_14:
533 ; PIC-NEXT: adds.w.sx %s0, 3, %s1
534 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
535 ; PIC-NEXT: b.l.t (, %s10)
537 ; PIC-NEXT: or %s0, 3, (0)1
538 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
539 ; PIC-NEXT: b.l.t (, %s10)
540 ; PIC-NEXT: .LBB6_15:
541 ; PIC-NEXT: or %s0, 11, (0)1
542 ; PIC-NEXT: .LBB6_16:
543 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
544 ; PIC-NEXT: b.l.t (, %s10)
545 ; PIC-NEXT: .LBB6_13:
546 ; PIC-NEXT: or %s0, 0, (0)1
547 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
548 ; PIC-NEXT: b.l.t (, %s10)
549 switch i32 %0, label %11 [
566 %6 = add nsw i32 %1, 3
570 %8 = add nsw i32 %1, -2
582 12: ; preds = %2, %11, %10, %9, %7, %5, %4, %3
583 %13 = phi i32 [ %0, %11 ], [ 11, %10 ], [ 10, %9 ], [ %8, %7 ], [ %6, %5 ], [ 4, %4 ], [ 0, %3 ], [ 3, %2 ]
587 ; Function Attrs: norecurse nounwind readnone
588 define signext i32 @br_jt8_m(i32 signext %0, i32 signext %1) {
589 ; CHECK-LABEL: br_jt8_m:
591 ; CHECK-NEXT: and %s2, %s0, (32)0
592 ; CHECK-NEXT: adds.w.sx %s0, -1, %s2
593 ; CHECK-NEXT: cmpu.w %s3, 8, %s0
594 ; CHECK-NEXT: brgt.w 0, %s3, .LBB{{[0-9]+}}_9
595 ; CHECK-NEXT: # %bb.1:
596 ; CHECK-NEXT: adds.w.zx %s0, %s0, (0)1
597 ; CHECK-NEXT: sll %s0, %s0, 3
598 ; CHECK-NEXT: lea %s3, .LJTI7_0@lo
599 ; CHECK-NEXT: and %s3, %s3, (32)0
600 ; CHECK-NEXT: lea.sl %s3, .LJTI7_0@hi(, %s3)
601 ; CHECK-NEXT: ld %s3, (%s3, %s0)
602 ; CHECK-NEXT: and %s1, %s1, (32)0
603 ; CHECK-NEXT: or %s0, 3, (0)1
604 ; CHECK-NEXT: b.l.t (, %s3)
605 ; CHECK-NEXT: .LBB{{[0-9]+}}_2:
606 ; CHECK-NEXT: or %s0, 0, (0)1
607 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
608 ; CHECK-NEXT: b.l.t (, %s10)
609 ; CHECK-NEXT: .LBB{{[0-9]+}}_3:
610 ; CHECK-NEXT: or %s0, 4, (0)1
611 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
612 ; CHECK-NEXT: b.l.t (, %s10)
613 ; CHECK-NEXT: .LBB{{[0-9]+}}_4:
614 ; CHECK-NEXT: adds.w.sx %s0, 3, %s1
615 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
616 ; CHECK-NEXT: b.l.t (, %s10)
617 ; CHECK-NEXT: .LBB{{[0-9]+}}_9:
618 ; CHECK-NEXT: or %s0, 0, %s2
619 ; CHECK-NEXT: .LBB{{[0-9]+}}_10:
620 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
621 ; CHECK-NEXT: b.l.t (, %s10)
622 ; CHECK-NEXT: .LBB{{[0-9]+}}_5:
623 ; CHECK-NEXT: adds.w.sx %s0, -5, %s1
624 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
625 ; CHECK-NEXT: b.l.t (, %s10)
626 ; CHECK-NEXT: .LBB{{[0-9]+}}_6:
627 ; CHECK-NEXT: adds.w.sx %s0, -2, %s1
628 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
629 ; CHECK-NEXT: b.l.t (, %s10)
630 ; CHECK-NEXT: .LBB{{[0-9]+}}_8:
631 ; CHECK-NEXT: or %s0, 11, (0)1
632 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
633 ; CHECK-NEXT: b.l.t (, %s10)
634 ; CHECK-NEXT: .LBB{{[0-9]+}}_7:
635 ; CHECK-NEXT: or %s0, 10, (0)1
636 ; CHECK-NEXT: adds.w.sx %s0, %s0, (0)1
637 ; CHECK-NEXT: b.l.t (, %s10)
639 ; PIC-LABEL: br_jt8_m:
641 ; PIC-NEXT: st %s15, 24(, %s11)
642 ; PIC-NEXT: st %s16, 32(, %s11)
643 ; PIC-NEXT: and %s2, %s0, (32)0
644 ; PIC-NEXT: adds.w.sx %s0, -1, %s2
645 ; PIC-NEXT: cmpu.w %s3, 8, %s0
646 ; PIC-NEXT: lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
647 ; PIC-NEXT: and %s15, %s15, (32)0
649 ; PIC-NEXT: lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
650 ; PIC-NEXT: brgt.w 0, %s3, .LBB7_9
652 ; PIC-NEXT: and %s1, %s1, (32)0
653 ; PIC-NEXT: adds.w.zx %s0, %s0, (0)1
654 ; PIC-NEXT: sll %s0, %s0, 2
655 ; PIC-NEXT: lea %s3, .LJTI7_0@gotoff_lo
656 ; PIC-NEXT: and %s3, %s3, (32)0
657 ; PIC-NEXT: lea.sl %s3, .LJTI7_0@gotoff_hi(%s3, %s15)
658 ; PIC-NEXT: ldl.sx %s0, (%s3, %s0)
659 ; PIC-NEXT: lea %s3, br_jt8_m@gotoff_lo
660 ; PIC-NEXT: and %s3, %s3, (32)0
661 ; PIC-NEXT: lea.sl %s3, br_jt8_m@gotoff_hi(%s3, %s15)
662 ; PIC-NEXT: adds.l %s3, %s0, %s3
663 ; PIC-NEXT: or %s0, 3, (0)1
664 ; PIC-NEXT: b.l.t (, %s3)
666 ; PIC-NEXT: or %s0, 0, (0)1
667 ; PIC-NEXT: br.l.t .LBB7_10
669 ; PIC-NEXT: or %s0, 4, (0)1
670 ; PIC-NEXT: br.l.t .LBB7_10
672 ; PIC-NEXT: adds.w.sx %s0, 3, %s1
673 ; PIC-NEXT: br.l.t .LBB7_10
675 ; PIC-NEXT: or %s0, 0, %s2
676 ; PIC-NEXT: br.l.t .LBB7_10
678 ; PIC-NEXT: adds.w.sx %s0, -5, %s1
679 ; PIC-NEXT: br.l.t .LBB7_10
681 ; PIC-NEXT: adds.w.sx %s0, -2, %s1
682 ; PIC-NEXT: br.l.t .LBB7_10
684 ; PIC-NEXT: or %s0, 11, (0)1
685 ; PIC-NEXT: br.l.t .LBB7_10
687 ; PIC-NEXT: or %s0, 10, (0)1
688 ; PIC-NEXT: .LBB7_10:
689 ; PIC-NEXT: adds.w.sx %s0, %s0, (0)1
690 ; PIC-NEXT: ld %s16, 32(, %s11)
691 ; PIC-NEXT: ld %s15, 24(, %s11)
692 ; PIC-NEXT: b.l.t (, %s10)
693 switch i32 %0, label %13 [
711 %6 = add nsw i32 %1, 3
715 %8 = add nsw i32 %1, -5
719 %10 = add nsw i32 %1, -2
731 14: ; preds = %2, %13, %12, %11, %9, %7, %5, %4, %3
732 %15 = phi i32 [ %0, %13 ], [ 11, %12 ], [ 10, %11 ], [ %10, %9 ], [ %8, %7 ], [ %6, %5 ], [ 4, %4 ], [ 0, %3 ], [ 3, %2 ]