[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / ARM / GlobalISel / arm-legalize-binops.mir
blobdfbbdce4fb4837f3c031030eddcde6967c5860d7
1 # RUN: llc -mtriple arm-- -run-pass=legalizer %s -o - | FileCheck %s
2 # RUN: llc -mtriple thumb-- -mattr=+v6t2 -run-pass=legalizer %s -o - | FileCheck %s
3 --- |
4   define void @test_add_s8() { ret void }
5   define void @test_add_s16() { ret void }
6   define void @test_add_s32() { ret void }
8   define void @test_sub_s8() { ret void }
9   define void @test_sub_s16() { ret void }
10   define void @test_sub_s32() { ret void }
12   define void @test_mul_s8() { ret void }
13   define void @test_mul_s16() { ret void }
14   define void @test_mul_s32() { ret void }
16   define void @test_and_s8() { ret void }
17   define void @test_and_s16() { ret void }
18   define void @test_and_s32() { ret void }
20   define void @test_or_s8() { ret void }
21   define void @test_or_s16() { ret void }
22   define void @test_or_s32() { ret void }
24   define void @test_xor_s8() { ret void }
25   define void @test_xor_s16() { ret void }
26   define void @test_xor_s32() { ret void }
28   define void @test_lshr_s32() { ret void }
29   define void @test_ashr_s32() { ret void }
30   define void @test_shl_s32() { ret void }
32   define void @test_shift_s8() { ret void }
33   define void @test_shift_s16() { ret void }
34   define void @test_shift_amount_s8() { ret void }
35   define void @test_shift_amount_s16() { ret void }
36 ...
37 ---
38 name:            test_add_s8
39 # CHECK-LABEL: name: test_add_s8
40 legalized:       false
41 # CHECK: legalized: true
42 regBankSelected: false
43 selected:        false
44 tracksRegLiveness: true
45 registers:
46   - { id: 0, class: _ }
47   - { id: 1, class: _ }
48   - { id: 2, class: _ }
49   - { id: 3, class: _ }
50   - { id: 4, class: _ }
51   - { id: 5, class: _ }
52 body:             |
53   bb.0:
54     liveins: $r0, $r1
56     %0(p0) = COPY $r0
57     %1(s8) = G_LOAD %0 :: (load 1)
58     %2(p0) = COPY $r0
59     %3(s8) = G_LOAD %2 :: (load 1)
60     %4(s8) = G_ADD %1, %3
61     ; G_ADD with s8 should widen
62     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_ADD {{%[0-9]+, %[0-9]+}}
63     ; CHECK: {{%[0-9]+}}:_(s32) = G_ADD {{%[0-9]+, %[0-9]+}}
64     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_ADD {{%[0-9]+, %[0-9]+}}
65     %5(s32) = G_SEXT %4(s8)
66     $r0 = COPY %5(s32)
67     BX_RET 14, $noreg, implicit $r0
68 ...
69 ---
70 name:            test_add_s16
71 # CHECK-LABEL: name: test_add_s16
72 legalized:       false
73 # CHECK: legalized: true
74 regBankSelected: false
75 selected:        false
76 tracksRegLiveness: true
77 registers:
78   - { id: 0, class: _ }
79   - { id: 1, class: _ }
80   - { id: 2, class: _ }
81   - { id: 3, class: _ }
82   - { id: 4, class: _ }
83   - { id: 5, class: _ }
84 body:             |
85   bb.0:
86     liveins: $r0, $r1
88     %0(p0) = COPY $r0
89     %1(s16) = G_LOAD %0 :: (load 2)
90     %2(p0) = COPY $r0
91     %3(s16) = G_LOAD %2 :: (load 2)
92     %4(s16) = G_ADD %1, %3
93     ; G_ADD with s16 should widen
94     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_ADD {{%[0-9]+, %[0-9]+}}
95     ; CHECK: {{%[0-9]+}}:_(s32) = G_ADD {{%[0-9]+, %[0-9]+}}
96     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_ADD {{%[0-9]+, %[0-9]+}}
97     %5(s32) = G_SEXT %4(s16)
98     $r0 = COPY %5(s32)
99     BX_RET 14, $noreg, implicit $r0
102 name:            test_add_s32
103 # CHECK-LABEL: name: test_add_s32
104 legalized:       false
105 # CHECK: legalized: true
106 regBankSelected: false
107 selected:        false
108 tracksRegLiveness: true
109 registers:
110   - { id: 0, class: _ }
111   - { id: 1, class: _ }
112   - { id: 2, class: _ }
113 body:             |
114   bb.0:
115     liveins: $r0, $r1
117     %0(s32) = COPY $r0
118     %1(s32) = COPY $r1
119     %2(s32) = G_ADD %0, %1
120     ; G_ADD with s32 is legal, so we should find it unchanged in the output
121     ; CHECK: {{%[0-9]+}}:_(s32) = G_ADD {{%[0-9]+, %[0-9]+}}
122     $r0 = COPY %2(s32)
123     BX_RET 14, $noreg, implicit $r0
127 name:            test_sub_s8
128 # CHECK-LABEL: name: test_sub_s8
129 legalized:       false
130 # CHECK: legalized: true
131 regBankSelected: false
132 selected:        false
133 tracksRegLiveness: true
134 registers:
135   - { id: 0, class: _ }
136   - { id: 1, class: _ }
137   - { id: 2, class: _ }
138   - { id: 3, class: _ }
139   - { id: 4, class: _ }
140   - { id: 5, class: _ }
141 body:             |
142   bb.0:
143     liveins: $r0, $r1
145     %0(p0) = COPY $r0
146     %1(s8) = G_LOAD %0 :: (load 1)
147     %2(p0) = COPY $r0
148     %3(s8) = G_LOAD %2 :: (load 1)
149     %4(s8) = G_SUB %1, %3
150     ; G_SUB with s8 should widen
151     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_SUB {{%[0-9]+, %[0-9]+}}
152     ; CHECK: {{%[0-9]+}}:_(s32) = G_SUB {{%[0-9]+, %[0-9]+}}
153     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_SUB {{%[0-9]+, %[0-9]+}}
154     %5(s32) = G_SEXT %4(s8)
155     $r0 = COPY %5(s32)
156     BX_RET 14, $noreg, implicit $r0
159 name:            test_sub_s16
160 # CHECK-LABEL: name: test_sub_s16
161 legalized:       false
162 # CHECK: legalized: true
163 regBankSelected: false
164 selected:        false
165 tracksRegLiveness: true
166 registers:
167   - { id: 0, class: _ }
168   - { id: 1, class: _ }
169   - { id: 2, class: _ }
170   - { id: 3, class: _ }
171   - { id: 4, class: _ }
172   - { id: 5, class: _ }
173 body:             |
174   bb.0:
175     liveins: $r0, $r1
177     %0(p0) = COPY $r0
178     %1(s16) = G_LOAD %0 :: (load 2)
179     %2(p0) = COPY $r0
180     %3(s16) = G_LOAD %2 :: (load 2)
181     %4(s16) = G_SUB %1, %3
182     ; G_SUB with s16 should widen
183     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_SUB {{%[0-9]+, %[0-9]+}}
184     ; CHECK: {{%[0-9]+}}:_(s32) = G_SUB {{%[0-9]+, %[0-9]+}}
185     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_SUB {{%[0-9]+, %[0-9]+}}
186     %5(s32) = G_SEXT %4(s16)
187     $r0 = COPY %5(s32)
188     BX_RET 14, $noreg, implicit $r0
191 name:            test_sub_s32
192 # CHECK-LABEL: name: test_sub_s32
193 legalized:       false
194 # CHECK: legalized: true
195 regBankSelected: false
196 selected:        false
197 tracksRegLiveness: true
198 registers:
199   - { id: 0, class: _ }
200   - { id: 1, class: _ }
201   - { id: 2, class: _ }
202 body:             |
203   bb.0:
204     liveins: $r0, $r1
206     %0(s32) = COPY $r0
207     %1(s32) = COPY $r1
208     %2(s32) = G_SUB %0, %1
209     ; G_SUB with s32 is legal, so we should find it unchanged in the output
210     ; CHECK: {{%[0-9]+}}:_(s32) = G_SUB {{%[0-9]+, %[0-9]+}}
211     $r0 = COPY %2(s32)
212     BX_RET 14, $noreg, implicit $r0
216 name:            test_mul_s8
217 # CHECK-LABEL: name: test_mul_s8
218 legalized:       false
219 # CHECK: legalized: true
220 regBankSelected: false
221 selected:        false
222 tracksRegLiveness: true
223 registers:
224   - { id: 0, class: _ }
225   - { id: 1, class: _ }
226   - { id: 2, class: _ }
227   - { id: 3, class: _ }
228   - { id: 4, class: _ }
229   - { id: 5, class: _ }
230 body:             |
231   bb.0:
232     liveins: $r0, $r1
234     %0(p0) = COPY $r0
235     %1(s8) = G_LOAD %0 :: (load 1)
236     %2(p0) = COPY $r0
237     %3(s8) = G_LOAD %2 :: (load 1)
238     %4(s8) = G_MUL %1, %3
239     ; G_MUL with s8 should widen
240     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_MUL {{%[0-9]+, %[0-9]+}}
241     ; CHECK: {{%[0-9]+}}:_(s32) = G_MUL {{%[0-9]+, %[0-9]+}}
242     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_MUL {{%[0-9]+, %[0-9]+}}
243     %5(s32) = G_SEXT %4(s8)
244     $r0 = COPY %5(s32)
245     BX_RET 14, $noreg, implicit $r0
248 name:            test_mul_s16
249 # CHECK-LABEL: name: test_mul_s16
250 legalized:       false
251 # CHECK: legalized: true
252 regBankSelected: false
253 selected:        false
254 tracksRegLiveness: true
255 registers:
256   - { id: 0, class: _ }
257   - { id: 1, class: _ }
258   - { id: 2, class: _ }
259   - { id: 3, class: _ }
260   - { id: 4, class: _ }
261   - { id: 5, class: _ }
262 body:             |
263   bb.0:
264     liveins: $r0, $r1
266     %0(p0) = COPY $r0
267     %1(s16) = G_LOAD %0 :: (load 2)
268     %2(p0) = COPY $r0
269     %3(s16) = G_LOAD %2 :: (load 2)
270     %4(s16) = G_MUL %1, %3
271     ; G_MUL with s16 should widen
272     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_MUL {{%[0-9]+, %[0-9]+}}
273     ; CHECK: {{%[0-9]+}}:_(s32) = G_MUL {{%[0-9]+, %[0-9]+}}
274     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_MUL {{%[0-9]+, %[0-9]+}}
275     %5(s32) = G_SEXT %4(s16)
276     $r0 = COPY %5(s32)
277     BX_RET 14, $noreg, implicit $r0
280 name:            test_mul_s32
281 # CHECK-LABEL: name: test_mul_s32
282 legalized:       false
283 # CHECK: legalized: true
284 regBankSelected: false
285 selected:        false
286 tracksRegLiveness: true
287 registers:
288   - { id: 0, class: _ }
289   - { id: 1, class: _ }
290   - { id: 2, class: _ }
291 body:             |
292   bb.0:
293     liveins: $r0, $r1
295     %0(s32) = COPY $r0
296     %1(s32) = COPY $r1
297     %2(s32) = G_MUL %0, %1
298     ; G_MUL with s32 is legal, so we should find it unchanged in the output
299     ; CHECK: {{%[0-9]+}}:_(s32) = G_MUL {{%[0-9]+, %[0-9]+}}
300     $r0 = COPY %2(s32)
301     BX_RET 14, $noreg, implicit $r0
305 name:            test_and_s8
306 # CHECK-LABEL: name: test_and_s8
307 legalized:       false
308 # CHECK: legalized: true
309 regBankSelected: false
310 selected:        false
311 tracksRegLiveness: true
312 registers:
313   - { id: 0, class: _ }
314   - { id: 1, class: _ }
315   - { id: 2, class: _ }
316   - { id: 3, class: _ }
317   - { id: 4, class: _ }
318   - { id: 5, class: _ }
319 body:             |
320   bb.0:
321     liveins: $r0, $r1
323     %0(p0) = COPY $r0
324     %1(s8) = G_LOAD %0 :: (load 1)
325     %2(p0) = COPY $r0
326     %3(s8) = G_LOAD %2 :: (load 1)
327     %4(s8) = G_AND %1, %3
328     ; G_AND with s8 should widen
329     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_AND {{%[0-9]+, %[0-9]+}}
330     ; CHECK: {{%[0-9]+}}:_(s32) = G_AND {{%[0-9]+, %[0-9]+}}
331     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_AND {{%[0-9]+, %[0-9]+}}
332     %5(s32) = G_SEXT %4(s8)
333     $r0 = COPY %5(s32)
334     BX_RET 14, $noreg, implicit $r0
337 name:            test_and_s16
338 # CHECK-LABEL: name: test_and_s16
339 legalized:       false
340 # CHECK: legalized: true
341 regBankSelected: false
342 selected:        false
343 tracksRegLiveness: true
344 registers:
345   - { id: 0, class: _ }
346   - { id: 1, class: _ }
347   - { id: 2, class: _ }
348   - { id: 3, class: _ }
349   - { id: 4, class: _ }
350   - { id: 5, class: _ }
351 body:             |
352   bb.0:
353     liveins: $r0, $r1
355     %0(p0) = COPY $r0
356     %1(s16) = G_LOAD %0 :: (load 2)
357     %2(p0) = COPY $r0
358     %3(s16) = G_LOAD %2 :: (load 2)
359     %4(s16) = G_AND %1, %3
360     ; G_AND with s16 should widen
361     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_AND {{%[0-9]+, %[0-9]+}}
362     ; CHECK: {{%[0-9]+}}:_(s32) = G_AND {{%[0-9]+, %[0-9]+}}
363     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_AND {{%[0-9]+, %[0-9]+}}
364     %5(s32) = G_SEXT %4(s16)
365     $r0 = COPY %5(s32)
366     BX_RET 14, $noreg, implicit $r0
369 name:            test_and_s32
370 # CHECK-LABEL: name: test_and_s32
371 legalized:       false
372 # CHECK: legalized: true
373 regBankSelected: false
374 selected:        false
375 tracksRegLiveness: true
376 registers:
377   - { id: 0, class: _ }
378   - { id: 1, class: _ }
379   - { id: 2, class: _ }
380 body:             |
381   bb.0:
382     liveins: $r0, $r1
384     %0(s32) = COPY $r0
385     %1(s32) = COPY $r1
386     %2(s32) = G_AND %0, %1
387     ; G_AND with s32 is legal, so we should find it unchanged in the output
388     ; CHECK: {{%[0-9]+}}:_(s32) = G_AND {{%[0-9]+, %[0-9]+}}
389     $r0 = COPY %2(s32)
390     BX_RET 14, $noreg, implicit $r0
394 name:            test_or_s8
395 # CHECK-LABEL: name: test_or_s8
396 legalized:       false
397 # CHECK: legalized: true
398 regBankSelected: false
399 selected:        false
400 tracksRegLiveness: true
401 registers:
402   - { id: 0, class: _ }
403   - { id: 1, class: _ }
404   - { id: 2, class: _ }
405   - { id: 3, class: _ }
406   - { id: 4, class: _ }
407   - { id: 5, class: _ }
408 body:             |
409   bb.0:
410     liveins: $r0, $r1
412     %0(p0) = COPY $r0
413     %1(s8) = G_LOAD %0 :: (load 1)
414     %2(p0) = COPY $r0
415     %3(s8) = G_LOAD %2 :: (load 1)
416     %4(s8) = G_OR %1, %3
417     ; G_OR with s8 should widen
418     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_OR {{%[0-9]+, %[0-9]+}}
419     ; CHECK: {{%[0-9]+}}:_(s32) = G_OR {{%[0-9]+, %[0-9]+}}
420     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_OR {{%[0-9]+, %[0-9]+}}
421     %5(s32) = G_SEXT %4(s8)
422     $r0 = COPY %5(s32)
423     BX_RET 14, $noreg, implicit $r0
426 name:            test_or_s16
427 # CHECK-LABEL: name: test_or_s16
428 legalized:       false
429 # CHECK: legalized: true
430 regBankSelected: false
431 selected:        false
432 tracksRegLiveness: true
433 registers:
434   - { id: 0, class: _ }
435   - { id: 1, class: _ }
436   - { id: 2, class: _ }
437   - { id: 3, class: _ }
438   - { id: 4, class: _ }
439   - { id: 5, class: _ }
440 body:             |
441   bb.0:
442     liveins: $r0, $r1
444     %0(p0) = COPY $r0
445     %1(s16) = G_LOAD %0 :: (load 2)
446     %2(p0) = COPY $r0
447     %3(s16) = G_LOAD %2 :: (load 2)
448     %4(s16) = G_OR %1, %3
449     ; G_OR with s16 should widen
450     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_OR {{%[0-9]+, %[0-9]+}}
451     ; CHECK: {{%[0-9]+}}:_(s32) = G_OR {{%[0-9]+, %[0-9]+}}
452     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_OR {{%[0-9]+, %[0-9]+}}
453     %5(s32) = G_SEXT %4(s16)
454     $r0 = COPY %5(s32)
455     BX_RET 14, $noreg, implicit $r0
458 name:            test_or_s32
459 # CHECK-LABEL: name: test_or_s32
460 legalized:       false
461 # CHECK: legalized: true
462 regBankSelected: false
463 selected:        false
464 tracksRegLiveness: true
465 registers:
466   - { id: 0, class: _ }
467   - { id: 1, class: _ }
468   - { id: 2, class: _ }
469 body:             |
470   bb.0:
471     liveins: $r0, $r1
473     %0(s32) = COPY $r0
474     %1(s32) = COPY $r1
475     %2(s32) = G_OR %0, %1
476     ; G_OR with s32 is legal, so we should find it unchanged in the output
477     ; CHECK: {{%[0-9]+}}:_(s32) = G_OR {{%[0-9]+, %[0-9]+}}
478     $r0 = COPY %2(s32)
479     BX_RET 14, $noreg, implicit $r0
483 name:            test_xor_s8
484 # CHECK-LABEL: name: test_xor_s8
485 legalized:       false
486 # CHECK: legalized: true
487 regBankSelected: false
488 selected:        false
489 tracksRegLiveness: true
490 registers:
491   - { id: 0, class: _ }
492   - { id: 1, class: _ }
493   - { id: 2, class: _ }
494   - { id: 3, class: _ }
495   - { id: 4, class: _ }
496   - { id: 5, class: _ }
497 body:             |
498   bb.0:
499     liveins: $r0, $r1
501     %0(p0) = COPY $r0
502     %1(s8) = G_LOAD %0 :: (load 1)
503     %2(p0) = COPY $r0
504     %3(s8) = G_LOAD %2 :: (load 1)
505     %4(s8) = G_XOR %1, %3
506     ; G_XOR with s8 should widen
507     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_XOR {{%[0-9]+, %[0-9]+}}
508     ; CHECK: {{%[0-9]+}}:_(s32) = G_XOR {{%[0-9]+, %[0-9]+}}
509     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_XOR {{%[0-9]+, %[0-9]+}}
510     %5(s32) = G_SEXT %4(s8)
511     $r0 = COPY %5(s32)
512     BX_RET 14, $noreg, implicit $r0
515 name:            test_xor_s16
516 # CHECK-LABEL: name: test_xor_s16
517 legalized:       false
518 # CHECK: legalized: true
519 regBankSelected: false
520 selected:        false
521 tracksRegLiveness: true
522 registers:
523   - { id: 0, class: _ }
524   - { id: 1, class: _ }
525   - { id: 2, class: _ }
526   - { id: 3, class: _ }
527   - { id: 4, class: _ }
528   - { id: 5, class: _ }
529 body:             |
530   bb.0:
531     liveins: $r0, $r1
533     %0(p0) = COPY $r0
534     %1(s16) = G_LOAD %0 :: (load 2)
535     %2(p0) = COPY $r0
536     %3(s16) = G_LOAD %2 :: (load 2)
537     %4(s16) = G_XOR %1, %3
538     ; G_XOR with s16 should widen
539     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_XOR {{%[0-9]+, %[0-9]+}}
540     ; CHECK: {{%[0-9]+}}:_(s32) = G_XOR {{%[0-9]+, %[0-9]+}}
541     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_XOR {{%[0-9]+, %[0-9]+}}
542     %5(s32) = G_SEXT %4(s16)
543     $r0 = COPY %5(s32)
544     BX_RET 14, $noreg, implicit $r0
547 name:            test_xor_s32
548 # CHECK-LABEL: name: test_xor_s32
549 legalized:       false
550 # CHECK: legalized: true
551 regBankSelected: false
552 selected:        false
553 tracksRegLiveness: true
554 registers:
555   - { id: 0, class: _ }
556   - { id: 1, class: _ }
557   - { id: 2, class: _ }
558 body:             |
559   bb.0:
560     liveins: $r0, $r1
562     %0(s32) = COPY $r0
563     %1(s32) = COPY $r1
564     %2(s32) = G_XOR %0, %1
565     ; G_XOR with s32 is legal, so we should find it unchanged in the output
566     ; CHECK: {{%[0-9]+}}:_(s32) = G_XOR {{%[0-9]+, %[0-9]+}}
567     $r0 = COPY %2(s32)
568     BX_RET 14, $noreg, implicit $r0
572 name:            test_lshr_s32
573 # CHECK-LABEL: name: test_lshr_s32
574 legalized:       false
575 # CHECK: legalized: true
576 regBankSelected: false
577 selected:        false
578 tracksRegLiveness: true
579 registers:
580   - { id: 0, class: _ }
581   - { id: 1, class: _ }
582   - { id: 2, class: _ }
583 body:             |
584   bb.0:
585     liveins: $r0, $r1
587     %0(s32) = COPY $r0
588     %1(s32) = COPY $r1
589     %2(s32) = G_LSHR %0, %1
590     ; G_LSHR with s32 is legal, so we should find it unchanged in the output
591     ; CHECK: {{%[0-9]+}}:_(s32) = G_LSHR {{%[0-9]+, %[0-9]+}}
592     $r0 = COPY %2(s32)
593     BX_RET 14, $noreg, implicit $r0
597 name:            test_ashr_s32
598 # CHECK-LABEL: name: test_ashr_s32
599 legalized:       false
600 # CHECK: legalized: true
601 regBankSelected: false
602 selected:        false
603 tracksRegLiveness: true
604 registers:
605   - { id: 0, class: _ }
606   - { id: 1, class: _ }
607   - { id: 2, class: _ }
608 body:             |
609   bb.0:
610     liveins: $r0, $r1
612     %0(s32) = COPY $r0
613     %1(s32) = COPY $r1
614     %2(s32) = G_ASHR %0, %1
615     ; G_ASHR with s32 is legal, so we should find it unchanged in the output
616     ; CHECK: {{%[0-9]+}}:_(s32) = G_ASHR {{%[0-9]+, %[0-9]+}}
617     $r0 = COPY %2(s32)
618     BX_RET 14, $noreg, implicit $r0
622 name:            test_shl_s32
623 # CHECK-LABEL: name: test_shl_s32
624 legalized:       false
625 # CHECK: legalized: true
626 regBankSelected: false
627 selected:        false
628 tracksRegLiveness: true
629 registers:
630   - { id: 0, class: _ }
631   - { id: 1, class: _ }
632   - { id: 2, class: _ }
633 body:             |
634   bb.0:
635     liveins: $r0, $r1
637     %0(s32) = COPY $r0
638     %1(s32) = COPY $r1
639     %2(s32) = G_SHL %0, %1
640     ; G_SHL with s32 is legal, so we should find it unchanged in the output
641     ; CHECK: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}
642     $r0 = COPY %2(s32)
643     BX_RET 14, $noreg, implicit $r0
647 name:            test_shift_s8
648 # CHECK-LABEL: name: test_shift_s8
649 legalized:       false
650 # CHECK: legalized: true
651 regBankSelected: false
652 selected:        false
653 tracksRegLiveness: true
654 registers:
655   - { id: 0, class: _ }
656   - { id: 1, class: _ }
657   - { id: 2, class: _ }
658   - { id: 3, class: _ }
659   - { id: 4, class: _ }
660 body:             |
661   bb.0:
662     liveins: $r0, $r1
664     %0(s32) = COPY $r0
665     %1(s32) = COPY $r1
666     %2(s8) = G_TRUNC %0(s32)
667     %3(s8) = G_SHL %2, %1(s32)
668     ; G_SHL with s8 should widen
669     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_SHL {{%[0-9]+, %[0-9]+}}
670     ; CHECK: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}
671     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_SHL {{%[0-9]+, %[0-9]+}}
672     %4(s32) = G_SEXT %3(s8)
673     $r0 = COPY %4(s32)
674     BX_RET 14, $noreg, implicit $r0
677 name:            test_shift_s16
678 # CHECK-LABEL: name: test_shift_s16
679 legalized:       false
680 # CHECK: legalized: true
681 regBankSelected: false
682 selected:        false
683 tracksRegLiveness: true
684 registers:
685   - { id: 0, class: _ }
686   - { id: 1, class: _ }
687   - { id: 2, class: _ }
688   - { id: 3, class: _ }
689   - { id: 4, class: _ }
690 body:             |
691   bb.0:
692     liveins: $r0, $r1
694     %0(s32) = COPY $r0
695     %1(s32) = COPY $r1
696     %2(s16) = G_TRUNC %0(s32)
697     %3(s16) = G_SHL %2, %1(s32)
698     ; G_SHL with s16 should widen
699     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_SHL {{%[0-9]+, %[0-9]+}}
700     ; CHECK: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}
701     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_SHL {{%[0-9]+, %[0-9]+}}
702     %4(s32) = G_SEXT %3(s16)
703     $r0 = COPY %4(s32)
704     BX_RET 14, $noreg, implicit $r0
707 name:            test_shift_amount_s8
708 # CHECK-LABEL: name: test_shift_amount_s8
709 legalized:       false
710 # CHECK: legalized: true
711 regBankSelected: false
712 selected:        false
713 tracksRegLiveness: true
714 registers:
715   - { id: 0, class: _ }
716   - { id: 1, class: _ }
717   - { id: 2, class: _ }
718   - { id: 3, class: _ }
719 body:             |
720   bb.0:
721     liveins: $r0, $r1
723     %0(s32) = COPY $r0
724     %1(s32) = COPY $r1
725     %2(s8) = G_TRUNC %0(s32)
726     %3(s32) = G_SHL %1, %2(s8)
727     ; G_SHL with s8 amount should widen
728     ; CHECK-NOT: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}(s8)
729     ; CHECK: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}(s32)
730     ; CHECK-NOT: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}(s8)
731     $r0 = COPY %3(s32)
732     BX_RET 14, $noreg, implicit $r0
735 name:            test_shift_amount_s16
736 # CHECK-LABEL: name: test_shift_amount_s16
737 legalized:       false
738 # CHECK: legalized: true
739 regBankSelected: false
740 selected:        false
741 tracksRegLiveness: true
742 registers:
743   - { id: 0, class: _ }
744   - { id: 1, class: _ }
745   - { id: 2, class: _ }
746   - { id: 3, class: _ }
747 body:             |
748   bb.0:
749     liveins: $r0, $r1
751     %0(s32) = COPY $r0
752     %1(s32) = COPY $r1
753     %2(s16) = G_TRUNC %0(s32)
754     %3(s32) = G_SHL %1, %2(s16)
755     ; G_SHL with s16 amount should widen
756     ; CHECK-NOT: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}(s16)
757     ; CHECK: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}(s32)
758     ; CHECK-NOT: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}(s16)
759     $r0 = COPY %3(s32)
760     BX_RET 14, $noreg, implicit $r0