Revert r354244 "[DAGCombiner] Eliminate dead stores to stack."
[llvm-complete.git] / test / CodeGen / ARM / GlobalISel / arm-legalize-binops.mir
blobb95fe1f9aa53bcbdacb4f9142b741a5c28bbc055
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 }
31 ...
32 ---
33 name:            test_add_s8
34 # CHECK-LABEL: name: test_add_s8
35 legalized:       false
36 # CHECK: legalized: true
37 regBankSelected: false
38 selected:        false
39 tracksRegLiveness: true
40 registers:
41   - { id: 0, class: _ }
42   - { id: 1, class: _ }
43   - { id: 2, class: _ }
44   - { id: 3, class: _ }
45   - { id: 4, class: _ }
46   - { id: 5, class: _ }
47 body:             |
48   bb.0:
49     liveins: $r0, $r1
51     %0(p0) = COPY $r0
52     %1(s8) = G_LOAD %0 :: (load 1)
53     %2(p0) = COPY $r0
54     %3(s8) = G_LOAD %2 :: (load 1)
55     %4(s8) = G_ADD %1, %3
56     ; G_ADD with s8 should widen
57     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_ADD {{%[0-9]+, %[0-9]+}}
58     ; CHECK: {{%[0-9]+}}:_(s32) = G_ADD {{%[0-9]+, %[0-9]+}}
59     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_ADD {{%[0-9]+, %[0-9]+}}
60     %5(s32) = G_SEXT %4(s8)
61     $r0 = COPY %5(s32)
62     BX_RET 14, $noreg, implicit $r0
63 ...
64 ---
65 name:            test_add_s16
66 # CHECK-LABEL: name: test_add_s16
67 legalized:       false
68 # CHECK: legalized: true
69 regBankSelected: false
70 selected:        false
71 tracksRegLiveness: true
72 registers:
73   - { id: 0, class: _ }
74   - { id: 1, class: _ }
75   - { id: 2, class: _ }
76   - { id: 3, class: _ }
77   - { id: 4, class: _ }
78   - { id: 5, class: _ }
79 body:             |
80   bb.0:
81     liveins: $r0, $r1
83     %0(p0) = COPY $r0
84     %1(s16) = G_LOAD %0 :: (load 2)
85     %2(p0) = COPY $r0
86     %3(s16) = G_LOAD %2 :: (load 2)
87     %4(s16) = G_ADD %1, %3
88     ; G_ADD with s16 should widen
89     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_ADD {{%[0-9]+, %[0-9]+}}
90     ; CHECK: {{%[0-9]+}}:_(s32) = G_ADD {{%[0-9]+, %[0-9]+}}
91     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_ADD {{%[0-9]+, %[0-9]+}}
92     %5(s32) = G_SEXT %4(s16)
93     $r0 = COPY %5(s32)
94     BX_RET 14, $noreg, implicit $r0
95 ...
96 ---
97 name:            test_add_s32
98 # CHECK-LABEL: name: test_add_s32
99 legalized:       false
100 # CHECK: legalized: true
101 regBankSelected: false
102 selected:        false
103 tracksRegLiveness: true
104 registers:
105   - { id: 0, class: _ }
106   - { id: 1, class: _ }
107   - { id: 2, class: _ }
108 body:             |
109   bb.0:
110     liveins: $r0, $r1
112     %0(s32) = COPY $r0
113     %1(s32) = COPY $r1
114     %2(s32) = G_ADD %0, %1
115     ; G_ADD with s32 is legal, so we should find it unchanged in the output
116     ; CHECK: {{%[0-9]+}}:_(s32) = G_ADD {{%[0-9]+, %[0-9]+}}
117     $r0 = COPY %2(s32)
118     BX_RET 14, $noreg, implicit $r0
122 name:            test_sub_s8
123 # CHECK-LABEL: name: test_sub_s8
124 legalized:       false
125 # CHECK: legalized: true
126 regBankSelected: false
127 selected:        false
128 tracksRegLiveness: true
129 registers:
130   - { id: 0, class: _ }
131   - { id: 1, class: _ }
132   - { id: 2, class: _ }
133   - { id: 3, class: _ }
134   - { id: 4, class: _ }
135   - { id: 5, class: _ }
136 body:             |
137   bb.0:
138     liveins: $r0, $r1
140     %0(p0) = COPY $r0
141     %1(s8) = G_LOAD %0 :: (load 1)
142     %2(p0) = COPY $r0
143     %3(s8) = G_LOAD %2 :: (load 1)
144     %4(s8) = G_SUB %1, %3
145     ; G_SUB with s8 should widen
146     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_SUB {{%[0-9]+, %[0-9]+}}
147     ; CHECK: {{%[0-9]+}}:_(s32) = G_SUB {{%[0-9]+, %[0-9]+}}
148     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_SUB {{%[0-9]+, %[0-9]+}}
149     %5(s32) = G_SEXT %4(s8)
150     $r0 = COPY %5(s32)
151     BX_RET 14, $noreg, implicit $r0
154 name:            test_sub_s16
155 # CHECK-LABEL: name: test_sub_s16
156 legalized:       false
157 # CHECK: legalized: true
158 regBankSelected: false
159 selected:        false
160 tracksRegLiveness: true
161 registers:
162   - { id: 0, class: _ }
163   - { id: 1, class: _ }
164   - { id: 2, class: _ }
165   - { id: 3, class: _ }
166   - { id: 4, class: _ }
167   - { id: 5, class: _ }
168 body:             |
169   bb.0:
170     liveins: $r0, $r1
172     %0(p0) = COPY $r0
173     %1(s16) = G_LOAD %0 :: (load 2)
174     %2(p0) = COPY $r0
175     %3(s16) = G_LOAD %2 :: (load 2)
176     %4(s16) = G_SUB %1, %3
177     ; G_SUB with s16 should widen
178     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_SUB {{%[0-9]+, %[0-9]+}}
179     ; CHECK: {{%[0-9]+}}:_(s32) = G_SUB {{%[0-9]+, %[0-9]+}}
180     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_SUB {{%[0-9]+, %[0-9]+}}
181     %5(s32) = G_SEXT %4(s16)
182     $r0 = COPY %5(s32)
183     BX_RET 14, $noreg, implicit $r0
186 name:            test_sub_s32
187 # CHECK-LABEL: name: test_sub_s32
188 legalized:       false
189 # CHECK: legalized: true
190 regBankSelected: false
191 selected:        false
192 tracksRegLiveness: true
193 registers:
194   - { id: 0, class: _ }
195   - { id: 1, class: _ }
196   - { id: 2, class: _ }
197 body:             |
198   bb.0:
199     liveins: $r0, $r1
201     %0(s32) = COPY $r0
202     %1(s32) = COPY $r1
203     %2(s32) = G_SUB %0, %1
204     ; G_SUB with s32 is legal, so we should find it unchanged in the output
205     ; CHECK: {{%[0-9]+}}:_(s32) = G_SUB {{%[0-9]+, %[0-9]+}}
206     $r0 = COPY %2(s32)
207     BX_RET 14, $noreg, implicit $r0
211 name:            test_mul_s8
212 # CHECK-LABEL: name: test_mul_s8
213 legalized:       false
214 # CHECK: legalized: true
215 regBankSelected: false
216 selected:        false
217 tracksRegLiveness: true
218 registers:
219   - { id: 0, class: _ }
220   - { id: 1, class: _ }
221   - { id: 2, class: _ }
222   - { id: 3, class: _ }
223   - { id: 4, class: _ }
224   - { id: 5, class: _ }
225 body:             |
226   bb.0:
227     liveins: $r0, $r1
229     %0(p0) = COPY $r0
230     %1(s8) = G_LOAD %0 :: (load 1)
231     %2(p0) = COPY $r0
232     %3(s8) = G_LOAD %2 :: (load 1)
233     %4(s8) = G_MUL %1, %3
234     ; G_MUL with s8 should widen
235     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_MUL {{%[0-9]+, %[0-9]+}}
236     ; CHECK: {{%[0-9]+}}:_(s32) = G_MUL {{%[0-9]+, %[0-9]+}}
237     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_MUL {{%[0-9]+, %[0-9]+}}
238     %5(s32) = G_SEXT %4(s8)
239     $r0 = COPY %5(s32)
240     BX_RET 14, $noreg, implicit $r0
243 name:            test_mul_s16
244 # CHECK-LABEL: name: test_mul_s16
245 legalized:       false
246 # CHECK: legalized: true
247 regBankSelected: false
248 selected:        false
249 tracksRegLiveness: true
250 registers:
251   - { id: 0, class: _ }
252   - { id: 1, class: _ }
253   - { id: 2, class: _ }
254   - { id: 3, class: _ }
255   - { id: 4, class: _ }
256   - { id: 5, class: _ }
257 body:             |
258   bb.0:
259     liveins: $r0, $r1
261     %0(p0) = COPY $r0
262     %1(s16) = G_LOAD %0 :: (load 2)
263     %2(p0) = COPY $r0
264     %3(s16) = G_LOAD %2 :: (load 2)
265     %4(s16) = G_MUL %1, %3
266     ; G_MUL with s16 should widen
267     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_MUL {{%[0-9]+, %[0-9]+}}
268     ; CHECK: {{%[0-9]+}}:_(s32) = G_MUL {{%[0-9]+, %[0-9]+}}
269     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_MUL {{%[0-9]+, %[0-9]+}}
270     %5(s32) = G_SEXT %4(s16)
271     $r0 = COPY %5(s32)
272     BX_RET 14, $noreg, implicit $r0
275 name:            test_mul_s32
276 # CHECK-LABEL: name: test_mul_s32
277 legalized:       false
278 # CHECK: legalized: true
279 regBankSelected: false
280 selected:        false
281 tracksRegLiveness: true
282 registers:
283   - { id: 0, class: _ }
284   - { id: 1, class: _ }
285   - { id: 2, class: _ }
286 body:             |
287   bb.0:
288     liveins: $r0, $r1
290     %0(s32) = COPY $r0
291     %1(s32) = COPY $r1
292     %2(s32) = G_MUL %0, %1
293     ; G_MUL with s32 is legal, so we should find it unchanged in the output
294     ; CHECK: {{%[0-9]+}}:_(s32) = G_MUL {{%[0-9]+, %[0-9]+}}
295     $r0 = COPY %2(s32)
296     BX_RET 14, $noreg, implicit $r0
300 name:            test_and_s8
301 # CHECK-LABEL: name: test_and_s8
302 legalized:       false
303 # CHECK: legalized: true
304 regBankSelected: false
305 selected:        false
306 tracksRegLiveness: true
307 registers:
308   - { id: 0, class: _ }
309   - { id: 1, class: _ }
310   - { id: 2, class: _ }
311   - { id: 3, class: _ }
312   - { id: 4, class: _ }
313   - { id: 5, class: _ }
314 body:             |
315   bb.0:
316     liveins: $r0, $r1
318     %0(p0) = COPY $r0
319     %1(s8) = G_LOAD %0 :: (load 1)
320     %2(p0) = COPY $r0
321     %3(s8) = G_LOAD %2 :: (load 1)
322     %4(s8) = G_AND %1, %3
323     ; G_AND with s8 should widen
324     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_AND {{%[0-9]+, %[0-9]+}}
325     ; CHECK: {{%[0-9]+}}:_(s32) = G_AND {{%[0-9]+, %[0-9]+}}
326     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_AND {{%[0-9]+, %[0-9]+}}
327     %5(s32) = G_SEXT %4(s8)
328     $r0 = COPY %5(s32)
329     BX_RET 14, $noreg, implicit $r0
332 name:            test_and_s16
333 # CHECK-LABEL: name: test_and_s16
334 legalized:       false
335 # CHECK: legalized: true
336 regBankSelected: false
337 selected:        false
338 tracksRegLiveness: true
339 registers:
340   - { id: 0, class: _ }
341   - { id: 1, class: _ }
342   - { id: 2, class: _ }
343   - { id: 3, class: _ }
344   - { id: 4, class: _ }
345   - { id: 5, class: _ }
346 body:             |
347   bb.0:
348     liveins: $r0, $r1
350     %0(p0) = COPY $r0
351     %1(s16) = G_LOAD %0 :: (load 2)
352     %2(p0) = COPY $r0
353     %3(s16) = G_LOAD %2 :: (load 2)
354     %4(s16) = G_AND %1, %3
355     ; G_AND with s16 should widen
356     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_AND {{%[0-9]+, %[0-9]+}}
357     ; CHECK: {{%[0-9]+}}:_(s32) = G_AND {{%[0-9]+, %[0-9]+}}
358     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_AND {{%[0-9]+, %[0-9]+}}
359     %5(s32) = G_SEXT %4(s16)
360     $r0 = COPY %5(s32)
361     BX_RET 14, $noreg, implicit $r0
364 name:            test_and_s32
365 # CHECK-LABEL: name: test_and_s32
366 legalized:       false
367 # CHECK: legalized: true
368 regBankSelected: false
369 selected:        false
370 tracksRegLiveness: true
371 registers:
372   - { id: 0, class: _ }
373   - { id: 1, class: _ }
374   - { id: 2, class: _ }
375 body:             |
376   bb.0:
377     liveins: $r0, $r1
379     %0(s32) = COPY $r0
380     %1(s32) = COPY $r1
381     %2(s32) = G_AND %0, %1
382     ; G_AND with s32 is legal, so we should find it unchanged in the output
383     ; CHECK: {{%[0-9]+}}:_(s32) = G_AND {{%[0-9]+, %[0-9]+}}
384     $r0 = COPY %2(s32)
385     BX_RET 14, $noreg, implicit $r0
389 name:            test_or_s8
390 # CHECK-LABEL: name: test_or_s8
391 legalized:       false
392 # CHECK: legalized: true
393 regBankSelected: false
394 selected:        false
395 tracksRegLiveness: true
396 registers:
397   - { id: 0, class: _ }
398   - { id: 1, class: _ }
399   - { id: 2, class: _ }
400   - { id: 3, class: _ }
401   - { id: 4, class: _ }
402   - { id: 5, class: _ }
403 body:             |
404   bb.0:
405     liveins: $r0, $r1
407     %0(p0) = COPY $r0
408     %1(s8) = G_LOAD %0 :: (load 1)
409     %2(p0) = COPY $r0
410     %3(s8) = G_LOAD %2 :: (load 1)
411     %4(s8) = G_OR %1, %3
412     ; G_OR with s8 should widen
413     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_OR {{%[0-9]+, %[0-9]+}}
414     ; CHECK: {{%[0-9]+}}:_(s32) = G_OR {{%[0-9]+, %[0-9]+}}
415     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_OR {{%[0-9]+, %[0-9]+}}
416     %5(s32) = G_SEXT %4(s8)
417     $r0 = COPY %5(s32)
418     BX_RET 14, $noreg, implicit $r0
421 name:            test_or_s16
422 # CHECK-LABEL: name: test_or_s16
423 legalized:       false
424 # CHECK: legalized: true
425 regBankSelected: false
426 selected:        false
427 tracksRegLiveness: true
428 registers:
429   - { id: 0, class: _ }
430   - { id: 1, class: _ }
431   - { id: 2, class: _ }
432   - { id: 3, class: _ }
433   - { id: 4, class: _ }
434   - { id: 5, class: _ }
435 body:             |
436   bb.0:
437     liveins: $r0, $r1
439     %0(p0) = COPY $r0
440     %1(s16) = G_LOAD %0 :: (load 2)
441     %2(p0) = COPY $r0
442     %3(s16) = G_LOAD %2 :: (load 2)
443     %4(s16) = G_OR %1, %3
444     ; G_OR with s16 should widen
445     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_OR {{%[0-9]+, %[0-9]+}}
446     ; CHECK: {{%[0-9]+}}:_(s32) = G_OR {{%[0-9]+, %[0-9]+}}
447     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_OR {{%[0-9]+, %[0-9]+}}
448     %5(s32) = G_SEXT %4(s16)
449     $r0 = COPY %5(s32)
450     BX_RET 14, $noreg, implicit $r0
453 name:            test_or_s32
454 # CHECK-LABEL: name: test_or_s32
455 legalized:       false
456 # CHECK: legalized: true
457 regBankSelected: false
458 selected:        false
459 tracksRegLiveness: true
460 registers:
461   - { id: 0, class: _ }
462   - { id: 1, class: _ }
463   - { id: 2, class: _ }
464 body:             |
465   bb.0:
466     liveins: $r0, $r1
468     %0(s32) = COPY $r0
469     %1(s32) = COPY $r1
470     %2(s32) = G_OR %0, %1
471     ; G_OR with s32 is legal, so we should find it unchanged in the output
472     ; CHECK: {{%[0-9]+}}:_(s32) = G_OR {{%[0-9]+, %[0-9]+}}
473     $r0 = COPY %2(s32)
474     BX_RET 14, $noreg, implicit $r0
478 name:            test_xor_s8
479 # CHECK-LABEL: name: test_xor_s8
480 legalized:       false
481 # CHECK: legalized: true
482 regBankSelected: false
483 selected:        false
484 tracksRegLiveness: true
485 registers:
486   - { id: 0, class: _ }
487   - { id: 1, class: _ }
488   - { id: 2, class: _ }
489   - { id: 3, class: _ }
490   - { id: 4, class: _ }
491   - { id: 5, class: _ }
492 body:             |
493   bb.0:
494     liveins: $r0, $r1
496     %0(p0) = COPY $r0
497     %1(s8) = G_LOAD %0 :: (load 1)
498     %2(p0) = COPY $r0
499     %3(s8) = G_LOAD %2 :: (load 1)
500     %4(s8) = G_XOR %1, %3
501     ; G_XOR with s8 should widen
502     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_XOR {{%[0-9]+, %[0-9]+}}
503     ; CHECK: {{%[0-9]+}}:_(s32) = G_XOR {{%[0-9]+, %[0-9]+}}
504     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_XOR {{%[0-9]+, %[0-9]+}}
505     %5(s32) = G_SEXT %4(s8)
506     $r0 = COPY %5(s32)
507     BX_RET 14, $noreg, implicit $r0
510 name:            test_xor_s16
511 # CHECK-LABEL: name: test_xor_s16
512 legalized:       false
513 # CHECK: legalized: true
514 regBankSelected: false
515 selected:        false
516 tracksRegLiveness: true
517 registers:
518   - { id: 0, class: _ }
519   - { id: 1, class: _ }
520   - { id: 2, class: _ }
521   - { id: 3, class: _ }
522   - { id: 4, class: _ }
523   - { id: 5, class: _ }
524 body:             |
525   bb.0:
526     liveins: $r0, $r1
528     %0(p0) = COPY $r0
529     %1(s16) = G_LOAD %0 :: (load 2)
530     %2(p0) = COPY $r0
531     %3(s16) = G_LOAD %2 :: (load 2)
532     %4(s16) = G_XOR %1, %3
533     ; G_XOR with s16 should widen
534     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_XOR {{%[0-9]+, %[0-9]+}}
535     ; CHECK: {{%[0-9]+}}:_(s32) = G_XOR {{%[0-9]+, %[0-9]+}}
536     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_XOR {{%[0-9]+, %[0-9]+}}
537     %5(s32) = G_SEXT %4(s16)
538     $r0 = COPY %5(s32)
539     BX_RET 14, $noreg, implicit $r0
542 name:            test_xor_s32
543 # CHECK-LABEL: name: test_xor_s32
544 legalized:       false
545 # CHECK: legalized: true
546 regBankSelected: false
547 selected:        false
548 tracksRegLiveness: true
549 registers:
550   - { id: 0, class: _ }
551   - { id: 1, class: _ }
552   - { id: 2, class: _ }
553 body:             |
554   bb.0:
555     liveins: $r0, $r1
557     %0(s32) = COPY $r0
558     %1(s32) = COPY $r1
559     %2(s32) = G_XOR %0, %1
560     ; G_XOR with s32 is legal, so we should find it unchanged in the output
561     ; CHECK: {{%[0-9]+}}:_(s32) = G_XOR {{%[0-9]+, %[0-9]+}}
562     $r0 = COPY %2(s32)
563     BX_RET 14, $noreg, implicit $r0
567 name:            test_lshr_s32
568 # CHECK-LABEL: name: test_lshr_s32
569 legalized:       false
570 # CHECK: legalized: true
571 regBankSelected: false
572 selected:        false
573 tracksRegLiveness: true
574 registers:
575   - { id: 0, class: _ }
576   - { id: 1, class: _ }
577   - { id: 2, class: _ }
578 body:             |
579   bb.0:
580     liveins: $r0, $r1
582     %0(s32) = COPY $r0
583     %1(s32) = COPY $r1
584     %2(s32) = G_LSHR %0, %1
585     ; G_LSHR with s32 is legal, so we should find it unchanged in the output
586     ; CHECK: {{%[0-9]+}}:_(s32) = G_LSHR {{%[0-9]+, %[0-9]+}}
587     $r0 = COPY %2(s32)
588     BX_RET 14, $noreg, implicit $r0
592 name:            test_ashr_s32
593 # CHECK-LABEL: name: test_ashr_s32
594 legalized:       false
595 # CHECK: legalized: true
596 regBankSelected: false
597 selected:        false
598 tracksRegLiveness: true
599 registers:
600   - { id: 0, class: _ }
601   - { id: 1, class: _ }
602   - { id: 2, class: _ }
603 body:             |
604   bb.0:
605     liveins: $r0, $r1
607     %0(s32) = COPY $r0
608     %1(s32) = COPY $r1
609     %2(s32) = G_ASHR %0, %1
610     ; G_ASHR with s32 is legal, so we should find it unchanged in the output
611     ; CHECK: {{%[0-9]+}}:_(s32) = G_ASHR {{%[0-9]+, %[0-9]+}}
612     $r0 = COPY %2(s32)
613     BX_RET 14, $noreg, implicit $r0
617 name:            test_shl_s32
618 # CHECK-LABEL: name: test_shl_s32
619 legalized:       false
620 # CHECK: legalized: true
621 regBankSelected: false
622 selected:        false
623 tracksRegLiveness: true
624 registers:
625   - { id: 0, class: _ }
626   - { id: 1, class: _ }
627   - { id: 2, class: _ }
628 body:             |
629   bb.0:
630     liveins: $r0, $r1
632     %0(s32) = COPY $r0
633     %1(s32) = COPY $r1
634     %2(s32) = G_SHL %0, %1
635     ; G_SHL with s32 is legal, so we should find it unchanged in the output
636     ; CHECK: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}
637     $r0 = COPY %2(s32)
638     BX_RET 14, $noreg, implicit $r0