Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / ARM / GlobalISel / arm-legalize-binops.mir
blobc8745e7bb9723ce4d871843d1eaa516fae021b06
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 }
19   define void @test_and_s64() { ret void }
21   define void @test_or_s8() { ret void }
22   define void @test_or_s16() { ret void }
23   define void @test_or_s32() { ret void }
24   define void @test_or_s64() { ret void }
26   define void @test_xor_s8() { ret void }
27   define void @test_xor_s16() { ret void }
28   define void @test_xor_s32() { ret void }
29   define void @test_xor_s64() { ret void }
31   define void @test_lshr_s32() { ret void }
32   define void @test_ashr_s32() { ret void }
33   define void @test_shl_s32() { ret void }
35   define void @test_shift_s8() { ret void }
36   define void @test_shift_s16() { ret void }
37   define void @test_shift_amount_s8() { ret void }
38   define void @test_shift_amount_s16() { ret void }
39 ...
40 ---
41 name:            test_add_s8
42 # CHECK-LABEL: name: test_add_s8
43 legalized:       false
44 # CHECK: legalized: true
45 regBankSelected: false
46 selected:        false
47 tracksRegLiveness: true
48 registers:
49   - { id: 0, class: _ }
50   - { id: 1, class: _ }
51   - { id: 2, class: _ }
52   - { id: 3, class: _ }
53   - { id: 4, class: _ }
54   - { id: 5, class: _ }
55 body:             |
56   bb.0:
57     liveins: $r0, $r1
59     %0(p0) = COPY $r0
60     %1(s8) = G_LOAD %0 :: (load (s8))
61     %2(p0) = COPY $r0
62     %3(s8) = G_LOAD %2 :: (load (s8))
63     %4(s8) = G_ADD %1, %3
64     ; G_ADD with s8 should widen
65     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_ADD {{%[0-9]+, %[0-9]+}}
66     ; CHECK: {{%[0-9]+}}:_(s32) = G_ADD {{%[0-9]+, %[0-9]+}}
67     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_ADD {{%[0-9]+, %[0-9]+}}
68     %5(s32) = G_SEXT %4(s8)
69     $r0 = COPY %5(s32)
70     BX_RET 14, $noreg, implicit $r0
71 ...
72 ---
73 name:            test_add_s16
74 # CHECK-LABEL: name: test_add_s16
75 legalized:       false
76 # CHECK: legalized: true
77 regBankSelected: false
78 selected:        false
79 tracksRegLiveness: true
80 registers:
81   - { id: 0, class: _ }
82   - { id: 1, class: _ }
83   - { id: 2, class: _ }
84   - { id: 3, class: _ }
85   - { id: 4, class: _ }
86   - { id: 5, class: _ }
87 body:             |
88   bb.0:
89     liveins: $r0, $r1
91     %0(p0) = COPY $r0
92     %1(s16) = G_LOAD %0 :: (load (s16))
93     %2(p0) = COPY $r0
94     %3(s16) = G_LOAD %2 :: (load (s16))
95     %4(s16) = G_ADD %1, %3
96     ; G_ADD with s16 should widen
97     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_ADD {{%[0-9]+, %[0-9]+}}
98     ; CHECK: {{%[0-9]+}}:_(s32) = G_ADD {{%[0-9]+, %[0-9]+}}
99     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_ADD {{%[0-9]+, %[0-9]+}}
100     %5(s32) = G_SEXT %4(s16)
101     $r0 = COPY %5(s32)
102     BX_RET 14, $noreg, implicit $r0
105 name:            test_add_s32
106 # CHECK-LABEL: name: test_add_s32
107 legalized:       false
108 # CHECK: legalized: true
109 regBankSelected: false
110 selected:        false
111 tracksRegLiveness: true
112 registers:
113   - { id: 0, class: _ }
114   - { id: 1, class: _ }
115   - { id: 2, class: _ }
116 body:             |
117   bb.0:
118     liveins: $r0, $r1
120     %0(s32) = COPY $r0
121     %1(s32) = COPY $r1
122     %2(s32) = G_ADD %0, %1
123     ; G_ADD with s32 is legal, so we should find it unchanged in the output
124     ; CHECK: {{%[0-9]+}}:_(s32) = G_ADD {{%[0-9]+, %[0-9]+}}
125     $r0 = COPY %2(s32)
126     BX_RET 14, $noreg, implicit $r0
130 name:            test_sub_s8
131 # CHECK-LABEL: name: test_sub_s8
132 legalized:       false
133 # CHECK: legalized: true
134 regBankSelected: false
135 selected:        false
136 tracksRegLiveness: true
137 registers:
138   - { id: 0, class: _ }
139   - { id: 1, class: _ }
140   - { id: 2, class: _ }
141   - { id: 3, class: _ }
142   - { id: 4, class: _ }
143   - { id: 5, class: _ }
144 body:             |
145   bb.0:
146     liveins: $r0, $r1
148     %0(p0) = COPY $r0
149     %1(s8) = G_LOAD %0 :: (load (s8))
150     %2(p0) = COPY $r0
151     %3(s8) = G_LOAD %2 :: (load (s8))
152     %4(s8) = G_SUB %1, %3
153     ; G_SUB with s8 should widen
154     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_SUB {{%[0-9]+, %[0-9]+}}
155     ; CHECK: {{%[0-9]+}}:_(s32) = G_SUB {{%[0-9]+, %[0-9]+}}
156     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_SUB {{%[0-9]+, %[0-9]+}}
157     %5(s32) = G_SEXT %4(s8)
158     $r0 = COPY %5(s32)
159     BX_RET 14, $noreg, implicit $r0
162 name:            test_sub_s16
163 # CHECK-LABEL: name: test_sub_s16
164 legalized:       false
165 # CHECK: legalized: true
166 regBankSelected: false
167 selected:        false
168 tracksRegLiveness: true
169 registers:
170   - { id: 0, class: _ }
171   - { id: 1, class: _ }
172   - { id: 2, class: _ }
173   - { id: 3, class: _ }
174   - { id: 4, class: _ }
175   - { id: 5, class: _ }
176 body:             |
177   bb.0:
178     liveins: $r0, $r1
180     %0(p0) = COPY $r0
181     %1(s16) = G_LOAD %0 :: (load (s16))
182     %2(p0) = COPY $r0
183     %3(s16) = G_LOAD %2 :: (load (s16))
184     %4(s16) = G_SUB %1, %3
185     ; G_SUB with s16 should widen
186     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_SUB {{%[0-9]+, %[0-9]+}}
187     ; CHECK: {{%[0-9]+}}:_(s32) = G_SUB {{%[0-9]+, %[0-9]+}}
188     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_SUB {{%[0-9]+, %[0-9]+}}
189     %5(s32) = G_SEXT %4(s16)
190     $r0 = COPY %5(s32)
191     BX_RET 14, $noreg, implicit $r0
194 name:            test_sub_s32
195 # CHECK-LABEL: name: test_sub_s32
196 legalized:       false
197 # CHECK: legalized: true
198 regBankSelected: false
199 selected:        false
200 tracksRegLiveness: true
201 registers:
202   - { id: 0, class: _ }
203   - { id: 1, class: _ }
204   - { id: 2, class: _ }
205 body:             |
206   bb.0:
207     liveins: $r0, $r1
209     %0(s32) = COPY $r0
210     %1(s32) = COPY $r1
211     %2(s32) = G_SUB %0, %1
212     ; G_SUB with s32 is legal, so we should find it unchanged in the output
213     ; CHECK: {{%[0-9]+}}:_(s32) = G_SUB {{%[0-9]+, %[0-9]+}}
214     $r0 = COPY %2(s32)
215     BX_RET 14, $noreg, implicit $r0
219 name:            test_mul_s8
220 # CHECK-LABEL: name: test_mul_s8
221 legalized:       false
222 # CHECK: legalized: true
223 regBankSelected: false
224 selected:        false
225 tracksRegLiveness: true
226 registers:
227   - { id: 0, class: _ }
228   - { id: 1, class: _ }
229   - { id: 2, class: _ }
230   - { id: 3, class: _ }
231   - { id: 4, class: _ }
232   - { id: 5, class: _ }
233 body:             |
234   bb.0:
235     liveins: $r0, $r1
237     %0(p0) = COPY $r0
238     %1(s8) = G_LOAD %0 :: (load (s8))
239     %2(p0) = COPY $r0
240     %3(s8) = G_LOAD %2 :: (load (s8))
241     %4(s8) = G_MUL %1, %3
242     ; G_MUL with s8 should widen
243     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_MUL {{%[0-9]+, %[0-9]+}}
244     ; CHECK: {{%[0-9]+}}:_(s32) = G_MUL {{%[0-9]+, %[0-9]+}}
245     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_MUL {{%[0-9]+, %[0-9]+}}
246     %5(s32) = G_SEXT %4(s8)
247     $r0 = COPY %5(s32)
248     BX_RET 14, $noreg, implicit $r0
251 name:            test_mul_s16
252 # CHECK-LABEL: name: test_mul_s16
253 legalized:       false
254 # CHECK: legalized: true
255 regBankSelected: false
256 selected:        false
257 tracksRegLiveness: true
258 registers:
259   - { id: 0, class: _ }
260   - { id: 1, class: _ }
261   - { id: 2, class: _ }
262   - { id: 3, class: _ }
263   - { id: 4, class: _ }
264   - { id: 5, class: _ }
265 body:             |
266   bb.0:
267     liveins: $r0, $r1
269     %0(p0) = COPY $r0
270     %1(s16) = G_LOAD %0 :: (load (s16))
271     %2(p0) = COPY $r0
272     %3(s16) = G_LOAD %2 :: (load (s16))
273     %4(s16) = G_MUL %1, %3
274     ; G_MUL with s16 should widen
275     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_MUL {{%[0-9]+, %[0-9]+}}
276     ; CHECK: {{%[0-9]+}}:_(s32) = G_MUL {{%[0-9]+, %[0-9]+}}
277     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_MUL {{%[0-9]+, %[0-9]+}}
278     %5(s32) = G_SEXT %4(s16)
279     $r0 = COPY %5(s32)
280     BX_RET 14, $noreg, implicit $r0
283 name:            test_mul_s32
284 # CHECK-LABEL: name: test_mul_s32
285 legalized:       false
286 # CHECK: legalized: true
287 regBankSelected: false
288 selected:        false
289 tracksRegLiveness: true
290 registers:
291   - { id: 0, class: _ }
292   - { id: 1, class: _ }
293   - { id: 2, class: _ }
294 body:             |
295   bb.0:
296     liveins: $r0, $r1
298     %0(s32) = COPY $r0
299     %1(s32) = COPY $r1
300     %2(s32) = G_MUL %0, %1
301     ; G_MUL with s32 is legal, so we should find it unchanged in the output
302     ; CHECK: {{%[0-9]+}}:_(s32) = G_MUL {{%[0-9]+, %[0-9]+}}
303     $r0 = COPY %2(s32)
304     BX_RET 14, $noreg, implicit $r0
308 name:            test_and_s8
309 # CHECK-LABEL: name: test_and_s8
310 legalized:       false
311 # CHECK: legalized: true
312 regBankSelected: false
313 selected:        false
314 tracksRegLiveness: true
315 registers:
316   - { id: 0, class: _ }
317   - { id: 1, class: _ }
318   - { id: 2, class: _ }
319   - { id: 3, class: _ }
320   - { id: 4, class: _ }
321   - { id: 5, class: _ }
322 body:             |
323   bb.0:
324     liveins: $r0, $r1
326     %0(p0) = COPY $r0
327     %1(s8) = G_LOAD %0 :: (load (s8))
328     %2(p0) = COPY $r0
329     %3(s8) = G_LOAD %2 :: (load (s8))
330     %4(s8) = G_AND %1, %3
331     ; G_AND with s8 should widen
332     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_AND {{%[0-9]+, %[0-9]+}}
333     ; CHECK: {{%[0-9]+}}:_(s32) = G_AND {{%[0-9]+, %[0-9]+}}
334     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_AND {{%[0-9]+, %[0-9]+}}
335     %5(s32) = G_SEXT %4(s8)
336     $r0 = COPY %5(s32)
337     BX_RET 14, $noreg, implicit $r0
340 name:            test_and_s16
341 # CHECK-LABEL: name: test_and_s16
342 legalized:       false
343 # CHECK: legalized: true
344 regBankSelected: false
345 selected:        false
346 tracksRegLiveness: true
347 registers:
348   - { id: 0, class: _ }
349   - { id: 1, class: _ }
350   - { id: 2, class: _ }
351   - { id: 3, class: _ }
352   - { id: 4, class: _ }
353   - { id: 5, class: _ }
354 body:             |
355   bb.0:
356     liveins: $r0, $r1
358     %0(p0) = COPY $r0
359     %1(s16) = G_LOAD %0 :: (load (s16))
360     %2(p0) = COPY $r0
361     %3(s16) = G_LOAD %2 :: (load (s16))
362     %4(s16) = G_AND %1, %3
363     ; G_AND with s16 should widen
364     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_AND {{%[0-9]+, %[0-9]+}}
365     ; CHECK: {{%[0-9]+}}:_(s32) = G_AND {{%[0-9]+, %[0-9]+}}
366     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_AND {{%[0-9]+, %[0-9]+}}
367     %5(s32) = G_SEXT %4(s16)
368     $r0 = COPY %5(s32)
369     BX_RET 14, $noreg, implicit $r0
372 name:            test_and_s32
373 # CHECK-LABEL: name: test_and_s32
374 legalized:       false
375 # CHECK: legalized: true
376 regBankSelected: false
377 selected:        false
378 tracksRegLiveness: true
379 registers:
380   - { id: 0, class: _ }
381   - { id: 1, class: _ }
382   - { id: 2, class: _ }
383 body:             |
384   bb.0:
385     liveins: $r0, $r1
387     %0(s32) = COPY $r0
388     %1(s32) = COPY $r1
389     %2(s32) = G_AND %0, %1
390     ; G_AND with s32 is legal, so we should find it unchanged in the output
391     ; CHECK: {{%[0-9]+}}:_(s32) = G_AND {{%[0-9]+, %[0-9]+}}
392     $r0 = COPY %2(s32)
393     BX_RET 14, $noreg, implicit $r0
397 name:            test_and_s64
398 # CHECK-LABEL: name: test_and_s64
399 legalized:       false
400 # CHECK: legalized: true
401 regBankSelected: false
402 selected:        false
403 tracksRegLiveness: true
404 registers:
405   - { id: 0, class: _ }
406   - { id: 1, class: _ }
407   - { id: 2, class: _ }
408   - { id: 3, class: _ }
409   - { id: 4, class: _ }
410   - { id: 5, class: _ }
411   - { id: 6, class: _ }
412   - { id: 7, class: _ }
413   - { id: 8, class: _ }
414 body:             |
415   bb.0:
416     liveins: $r0, $r1, $r2, $r3
418     %0(s32) = COPY $r0
419     %1(s32) = COPY $r1
420     %2(s32) = COPY $r2
421     %3(s32) = COPY $r3
422     %4(s64) = G_MERGE_VALUES %0(s32), %1(s32)
423     %5(s64) = G_MERGE_VALUES %2(s32), %3(s32)
424     %6(s64) = G_AND %4, %5
425     %7(s32), %8(s32) = G_UNMERGE_VALUES %6(s64)
426     $r0 = COPY %7(s32)
427     $r1 = COPY %8(s32)
428     BX_RET 14, $noreg, implicit $r0, implicit $r1
432 name:            test_or_s8
433 # CHECK-LABEL: name: test_or_s8
434 legalized:       false
435 # CHECK: legalized: true
436 regBankSelected: false
437 selected:        false
438 tracksRegLiveness: true
439 registers:
440   - { id: 0, class: _ }
441   - { id: 1, class: _ }
442   - { id: 2, class: _ }
443   - { id: 3, class: _ }
444   - { id: 4, class: _ }
445   - { id: 5, class: _ }
446 body:             |
447   bb.0:
448     liveins: $r0, $r1
450     %0(p0) = COPY $r0
451     %1(s8) = G_LOAD %0 :: (load (s8))
452     %2(p0) = COPY $r0
453     %3(s8) = G_LOAD %2 :: (load (s8))
454     %4(s8) = G_OR %1, %3
455     ; G_OR with s8 should widen
456     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_OR {{%[0-9]+, %[0-9]+}}
457     ; CHECK: {{%[0-9]+}}:_(s32) = G_OR {{%[0-9]+, %[0-9]+}}
458     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_OR {{%[0-9]+, %[0-9]+}}
459     %5(s32) = G_SEXT %4(s8)
460     $r0 = COPY %5(s32)
461     BX_RET 14, $noreg, implicit $r0
464 name:            test_or_s16
465 # CHECK-LABEL: name: test_or_s16
466 legalized:       false
467 # CHECK: legalized: true
468 regBankSelected: false
469 selected:        false
470 tracksRegLiveness: true
471 registers:
472   - { id: 0, class: _ }
473   - { id: 1, class: _ }
474   - { id: 2, class: _ }
475   - { id: 3, class: _ }
476   - { id: 4, class: _ }
477   - { id: 5, class: _ }
478 body:             |
479   bb.0:
480     liveins: $r0, $r1
482     %0(p0) = COPY $r0
483     %1(s16) = G_LOAD %0 :: (load (s16))
484     %2(p0) = COPY $r0
485     %3(s16) = G_LOAD %2 :: (load (s16))
486     %4(s16) = G_OR %1, %3
487     ; G_OR with s16 should widen
488     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_OR {{%[0-9]+, %[0-9]+}}
489     ; CHECK: {{%[0-9]+}}:_(s32) = G_OR {{%[0-9]+, %[0-9]+}}
490     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_OR {{%[0-9]+, %[0-9]+}}
491     %5(s32) = G_SEXT %4(s16)
492     $r0 = COPY %5(s32)
493     BX_RET 14, $noreg, implicit $r0
496 name:            test_or_s32
497 # CHECK-LABEL: name: test_or_s32
498 legalized:       false
499 # CHECK: legalized: true
500 regBankSelected: false
501 selected:        false
502 tracksRegLiveness: true
503 registers:
504   - { id: 0, class: _ }
505   - { id: 1, class: _ }
506   - { id: 2, class: _ }
507 body:             |
508   bb.0:
509     liveins: $r0, $r1
511     %0(s32) = COPY $r0
512     %1(s32) = COPY $r1
513     %2(s32) = G_OR %0, %1
514     ; G_OR with s32 is legal, so we should find it unchanged in the output
515     ; CHECK: {{%[0-9]+}}:_(s32) = G_OR {{%[0-9]+, %[0-9]+}}
516     $r0 = COPY %2(s32)
517     BX_RET 14, $noreg, implicit $r0
521 name:            test_or_s64
522 # CHECK-LABEL: name: test_or_s64
523 legalized:       false
524 # CHECK: legalized: true
525 regBankSelected: false
526 selected:        false
527 tracksRegLiveness: true
528 registers:
529   - { id: 0, class: _ }
530   - { id: 1, class: _ }
531   - { id: 2, class: _ }
532   - { id: 3, class: _ }
533   - { id: 4, class: _ }
534   - { id: 5, class: _ }
535   - { id: 6, class: _ }
536   - { id: 7, class: _ }
537   - { id: 8, class: _ }
538 body:             |
539   bb.0:
540     liveins: $r0, $r1, $r2, $r3
542     %0(s32) = COPY $r0
543     %1(s32) = COPY $r1
544     %2(s32) = COPY $r2
545     %3(s32) = COPY $r3
546     %4(s64) = G_MERGE_VALUES %0(s32), %1(s32)
547     %5(s64) = G_MERGE_VALUES %2(s32), %3(s32)
548     %6(s64) = G_OR %4, %5
549     %7(s32), %8(s32) = G_UNMERGE_VALUES %6(s64)
550     $r0 = COPY %7(s32)
551     $r1 = COPY %8(s32)
552     BX_RET 14, $noreg, implicit $r0, implicit $r1
556 name:            test_xor_s8
557 # CHECK-LABEL: name: test_xor_s8
558 legalized:       false
559 # CHECK: legalized: true
560 regBankSelected: false
561 selected:        false
562 tracksRegLiveness: true
563 registers:
564   - { id: 0, class: _ }
565   - { id: 1, class: _ }
566   - { id: 2, class: _ }
567   - { id: 3, class: _ }
568   - { id: 4, class: _ }
569   - { id: 5, class: _ }
570 body:             |
571   bb.0:
572     liveins: $r0, $r1
574     %0(p0) = COPY $r0
575     %1(s8) = G_LOAD %0 :: (load (s8))
576     %2(p0) = COPY $r0
577     %3(s8) = G_LOAD %2 :: (load (s8))
578     %4(s8) = G_XOR %1, %3
579     ; G_XOR with s8 should widen
580     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_XOR {{%[0-9]+, %[0-9]+}}
581     ; CHECK: {{%[0-9]+}}:_(s32) = G_XOR {{%[0-9]+, %[0-9]+}}
582     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_XOR {{%[0-9]+, %[0-9]+}}
583     %5(s32) = G_SEXT %4(s8)
584     $r0 = COPY %5(s32)
585     BX_RET 14, $noreg, implicit $r0
588 name:            test_xor_s16
589 # CHECK-LABEL: name: test_xor_s16
590 legalized:       false
591 # CHECK: legalized: true
592 regBankSelected: false
593 selected:        false
594 tracksRegLiveness: true
595 registers:
596   - { id: 0, class: _ }
597   - { id: 1, class: _ }
598   - { id: 2, class: _ }
599   - { id: 3, class: _ }
600   - { id: 4, class: _ }
601   - { id: 5, class: _ }
602 body:             |
603   bb.0:
604     liveins: $r0, $r1
606     %0(p0) = COPY $r0
607     %1(s16) = G_LOAD %0 :: (load (s16))
608     %2(p0) = COPY $r0
609     %3(s16) = G_LOAD %2 :: (load (s16))
610     %4(s16) = G_XOR %1, %3
611     ; G_XOR with s16 should widen
612     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_XOR {{%[0-9]+, %[0-9]+}}
613     ; CHECK: {{%[0-9]+}}:_(s32) = G_XOR {{%[0-9]+, %[0-9]+}}
614     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_XOR {{%[0-9]+, %[0-9]+}}
615     %5(s32) = G_SEXT %4(s16)
616     $r0 = COPY %5(s32)
617     BX_RET 14, $noreg, implicit $r0
620 name:            test_xor_s32
621 # CHECK-LABEL: name: test_xor_s32
622 legalized:       false
623 # CHECK: legalized: true
624 regBankSelected: false
625 selected:        false
626 tracksRegLiveness: true
627 registers:
628   - { id: 0, class: _ }
629   - { id: 1, class: _ }
630   - { id: 2, class: _ }
631 body:             |
632   bb.0:
633     liveins: $r0, $r1
635     %0(s32) = COPY $r0
636     %1(s32) = COPY $r1
637     %2(s32) = G_XOR %0, %1
638     ; G_XOR with s32 is legal, so we should find it unchanged in the output
639     ; CHECK: {{%[0-9]+}}:_(s32) = G_XOR {{%[0-9]+, %[0-9]+}}
640     $r0 = COPY %2(s32)
641     BX_RET 14, $noreg, implicit $r0
645 name:            test_xor_s64
646 # CHECK-LABEL: name: test_xor_s64
647 legalized:       false
648 # CHECK: legalized: true
649 regBankSelected: false
650 selected:        false
651 tracksRegLiveness: true
652 registers:
653   - { id: 0, class: _ }
654   - { id: 1, class: _ }
655   - { id: 2, class: _ }
656   - { id: 3, class: _ }
657   - { id: 4, class: _ }
658   - { id: 5, class: _ }
659   - { id: 6, class: _ }
660   - { id: 7, class: _ }
661   - { id: 8, class: _ }
662 body:             |
663   bb.0:
664     liveins: $r0, $r1, $r2, $r3
666     %0(s32) = COPY $r0
667     %1(s32) = COPY $r1
668     %2(s32) = COPY $r2
669     %3(s32) = COPY $r3
670     %4(s64) = G_MERGE_VALUES %0(s32), %1(s32)
671     %5(s64) = G_MERGE_VALUES %2(s32), %3(s32)
672     %6(s64) = G_XOR %4, %5
673     %7(s32), %8(s32) = G_UNMERGE_VALUES %6(s64)
674     $r0 = COPY %7(s32)
675     $r1 = COPY %8(s32)
676     BX_RET 14, $noreg, implicit $r0, implicit $r1
680 name:            test_lshr_s32
681 # CHECK-LABEL: name: test_lshr_s32
682 legalized:       false
683 # CHECK: legalized: true
684 regBankSelected: false
685 selected:        false
686 tracksRegLiveness: true
687 registers:
688   - { id: 0, class: _ }
689   - { id: 1, class: _ }
690   - { id: 2, class: _ }
691 body:             |
692   bb.0:
693     liveins: $r0, $r1
695     %0(s32) = COPY $r0
696     %1(s32) = COPY $r1
697     %2(s32) = G_LSHR %0, %1
698     ; G_LSHR with s32 is legal, so we should find it unchanged in the output
699     ; CHECK: {{%[0-9]+}}:_(s32) = G_LSHR {{%[0-9]+, %[0-9]+}}
700     $r0 = COPY %2(s32)
701     BX_RET 14, $noreg, implicit $r0
705 name:            test_ashr_s32
706 # CHECK-LABEL: name: test_ashr_s32
707 legalized:       false
708 # CHECK: legalized: true
709 regBankSelected: false
710 selected:        false
711 tracksRegLiveness: true
712 registers:
713   - { id: 0, class: _ }
714   - { id: 1, class: _ }
715   - { id: 2, class: _ }
716 body:             |
717   bb.0:
718     liveins: $r0, $r1
720     %0(s32) = COPY $r0
721     %1(s32) = COPY $r1
722     %2(s32) = G_ASHR %0, %1
723     ; G_ASHR with s32 is legal, so we should find it unchanged in the output
724     ; CHECK: {{%[0-9]+}}:_(s32) = G_ASHR {{%[0-9]+, %[0-9]+}}
725     $r0 = COPY %2(s32)
726     BX_RET 14, $noreg, implicit $r0
730 name:            test_shl_s32
731 # CHECK-LABEL: name: test_shl_s32
732 legalized:       false
733 # CHECK: legalized: true
734 regBankSelected: false
735 selected:        false
736 tracksRegLiveness: true
737 registers:
738   - { id: 0, class: _ }
739   - { id: 1, class: _ }
740   - { id: 2, class: _ }
741 body:             |
742   bb.0:
743     liveins: $r0, $r1
745     %0(s32) = COPY $r0
746     %1(s32) = COPY $r1
747     %2(s32) = G_SHL %0, %1
748     ; G_SHL with s32 is legal, so we should find it unchanged in the output
749     ; CHECK: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}
750     $r0 = COPY %2(s32)
751     BX_RET 14, $noreg, implicit $r0
755 name:            test_shift_s8
756 # CHECK-LABEL: name: test_shift_s8
757 legalized:       false
758 # CHECK: legalized: true
759 regBankSelected: false
760 selected:        false
761 tracksRegLiveness: true
762 registers:
763   - { id: 0, class: _ }
764   - { id: 1, class: _ }
765   - { id: 2, class: _ }
766   - { id: 3, class: _ }
767   - { id: 4, class: _ }
768 body:             |
769   bb.0:
770     liveins: $r0, $r1
772     %0(s32) = COPY $r0
773     %1(s32) = COPY $r1
774     %2(s8) = G_TRUNC %0(s32)
775     %3(s8) = G_SHL %2, %1(s32)
776     ; G_SHL with s8 should widen
777     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_SHL {{%[0-9]+, %[0-9]+}}
778     ; CHECK: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}
779     ; CHECK-NOT: {{%[0-9]+}}:_(s8) = G_SHL {{%[0-9]+, %[0-9]+}}
780     %4(s32) = G_SEXT %3(s8)
781     $r0 = COPY %4(s32)
782     BX_RET 14, $noreg, implicit $r0
785 name:            test_shift_s16
786 # CHECK-LABEL: name: test_shift_s16
787 legalized:       false
788 # CHECK: legalized: true
789 regBankSelected: false
790 selected:        false
791 tracksRegLiveness: true
792 registers:
793   - { id: 0, class: _ }
794   - { id: 1, class: _ }
795   - { id: 2, class: _ }
796   - { id: 3, class: _ }
797   - { id: 4, class: _ }
798 body:             |
799   bb.0:
800     liveins: $r0, $r1
802     %0(s32) = COPY $r0
803     %1(s32) = COPY $r1
804     %2(s16) = G_TRUNC %0(s32)
805     %3(s16) = G_SHL %2, %1(s32)
806     ; G_SHL with s16 should widen
807     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_SHL {{%[0-9]+, %[0-9]+}}
808     ; CHECK: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}
809     ; CHECK-NOT: {{%[0-9]+}}:_(s16) = G_SHL {{%[0-9]+, %[0-9]+}}
810     %4(s32) = G_SEXT %3(s16)
811     $r0 = COPY %4(s32)
812     BX_RET 14, $noreg, implicit $r0
815 name:            test_shift_amount_s8
816 # CHECK-LABEL: name: test_shift_amount_s8
817 legalized:       false
818 # CHECK: legalized: true
819 regBankSelected: false
820 selected:        false
821 tracksRegLiveness: true
822 registers:
823   - { id: 0, class: _ }
824   - { id: 1, class: _ }
825   - { id: 2, class: _ }
826   - { id: 3, class: _ }
827 body:             |
828   bb.0:
829     liveins: $r0, $r1
831     %0(s32) = COPY $r0
832     %1(s32) = COPY $r1
833     %2(s8) = G_TRUNC %0(s32)
834     %3(s32) = G_SHL %1, %2(s8)
835     ; G_SHL with s8 amount should widen
836     ; CHECK-NOT: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}(s8)
837     ; CHECK: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}(s32)
838     ; CHECK-NOT: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}(s8)
839     $r0 = COPY %3(s32)
840     BX_RET 14, $noreg, implicit $r0
843 name:            test_shift_amount_s16
844 # CHECK-LABEL: name: test_shift_amount_s16
845 legalized:       false
846 # CHECK: legalized: true
847 regBankSelected: false
848 selected:        false
849 tracksRegLiveness: true
850 registers:
851   - { id: 0, class: _ }
852   - { id: 1, class: _ }
853   - { id: 2, class: _ }
854   - { id: 3, class: _ }
855 body:             |
856   bb.0:
857     liveins: $r0, $r1
859     %0(s32) = COPY $r0
860     %1(s32) = COPY $r1
861     %2(s16) = G_TRUNC %0(s32)
862     %3(s32) = G_SHL %1, %2(s16)
863     ; G_SHL with s16 amount should widen
864     ; CHECK-NOT: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}(s16)
865     ; CHECK: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}(s32)
866     ; CHECK-NOT: {{%[0-9]+}}:_(s32) = G_SHL {{%[0-9]+, %[0-9]+}}(s16)
867     $r0 = COPY %3(s32)
868     BX_RET 14, $noreg, implicit $r0