xref: /llvm-project/llvm/test/CodeGen/ARM/GlobalISel/thumb-select-exts.mir (revision fae05692a36f9ebbd201d93c2a6b0f927564d7e6)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -O0 -mtriple thumb-- -mattr=+v6t2 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
3--- |
4  define void @test_trunc_and_zext_s1_to_s32() { ret void }
5  define void @test_trunc_and_sext_s1_to_s32() { ret void }
6  define void @test_trunc_and_anyext_s1_to_s32() { ret void }
7
8  define void @test_trunc_and_zext_s8_to_s32() { ret void }
9  define void @test_trunc_and_sext_s8_to_s32() { ret void }
10  define void @test_trunc_and_anyext_s8_to_s32() { ret void }
11
12  define void @test_trunc_and_zext_s16_to_s32() { ret void }
13  define void @test_trunc_and_sext_s16_to_s32() { ret void }
14  define void @test_trunc_and_anyext_s16_to_s32() { ret void }
15
16  define void @test_trunc_and_zext_s1_to_s16() { ret void }
17  define void @test_trunc_and_sext_s1_to_s16() { ret void }
18  define void @test_trunc_and_anyext_s1_to_s16() { ret void }
19
20  define void @test_trunc_and_zext_s8_to_s16() { ret void }
21  define void @test_trunc_and_sext_s8_to_s16() { ret void }
22  define void @test_trunc_and_anyext_s8_to_s16() { ret void }
23
24  define void @test_trunc_and_zext_s1_to_s8() { ret void }
25  define void @test_trunc_and_sext_s1_to_s8() { ret void }
26  define void @test_trunc_and_anyext_s1_to_s8() { ret void }
27...
28---
29name:            test_trunc_and_zext_s1_to_s32
30legalized:       true
31regBankSelected: true
32selected:        false
33tracksRegLiveness: true
34registers:
35  - { id: 0, class: gprb }
36  - { id: 1, class: gprb }
37  - { id: 2, class: gprb }
38body:             |
39  bb.0:
40    liveins: $r0
41
42    ; CHECK-LABEL: name: test_trunc_and_zext_s1_to_s32
43    ; CHECK: liveins: $r0
44    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
45    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY [[COPY]]
46    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[COPY1]], 1, 14 /* CC::al */, $noreg, $noreg
47    ; CHECK: $r0 = COPY [[t2ANDri]]
48    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
49    %0(s32) = COPY $r0
50
51    %1(s1) = G_TRUNC %0(s32)
52
53    %2(s32) = G_ZEXT %1(s1)
54
55    $r0 = COPY %2(s32)
56
57    BX_RET 14, $noreg, implicit $r0
58...
59---
60name:            test_trunc_and_sext_s1_to_s32
61legalized:       true
62regBankSelected: true
63selected:        false
64tracksRegLiveness: true
65registers:
66  - { id: 0, class: gprb }
67  - { id: 1, class: gprb }
68  - { id: 2, class: gprb }
69body:             |
70  bb.0:
71    liveins: $r0
72
73    ; CHECK-LABEL: name: test_trunc_and_sext_s1_to_s32
74    ; CHECK: liveins: $r0
75    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
76    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY [[COPY]]
77    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[COPY1]], 1, 14 /* CC::al */, $noreg, $noreg
78    ; CHECK: [[t2RSBri:%[0-9]+]]:rgpr = t2RSBri [[t2ANDri]], 0, 14 /* CC::al */, $noreg, $noreg
79    ; CHECK: $r0 = COPY [[t2RSBri]]
80    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
81    %0(s32) = COPY $r0
82
83    %1(s1) = G_TRUNC %0(s32)
84
85    %2(s32) = G_SEXT %1(s1)
86
87    $r0 = COPY %2(s32)
88
89    BX_RET 14, $noreg, implicit $r0
90...
91---
92name:            test_trunc_and_anyext_s1_to_s32
93legalized:       true
94regBankSelected: true
95selected:        false
96tracksRegLiveness: true
97registers:
98  - { id: 0, class: gprb }
99  - { id: 1, class: gprb }
100  - { id: 2, class: gprb }
101body:             |
102  bb.0:
103    liveins: $r0
104
105    ; CHECK-LABEL: name: test_trunc_and_anyext_s1_to_s32
106    ; CHECK: liveins: $r0
107    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
108    ; CHECK: $r0 = COPY [[COPY]]
109    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
110    %0(s32) = COPY $r0
111
112    %1(s1) = G_TRUNC %0(s32)
113
114    %2(s32) = G_ANYEXT %1(s1)
115
116    $r0 = COPY %2(s32)
117
118    BX_RET 14, $noreg, implicit $r0
119...
120---
121name:            test_trunc_and_zext_s8_to_s32
122legalized:       true
123regBankSelected: true
124selected:        false
125tracksRegLiveness: true
126registers:
127  - { id: 0, class: gprb }
128  - { id: 1, class: gprb }
129  - { id: 2, class: gprb }
130body:             |
131  bb.0:
132    liveins: $r0
133
134    ; CHECK-LABEL: name: test_trunc_and_zext_s8_to_s32
135    ; CHECK: liveins: $r0
136    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
137    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY [[COPY]]
138    ; CHECK: [[t2UXTB:%[0-9]+]]:rgpr = t2UXTB [[COPY1]], 0, 14 /* CC::al */, $noreg
139    ; CHECK: $r0 = COPY [[t2UXTB]]
140    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
141    %0(s32) = COPY $r0
142
143    %1(s8) = G_TRUNC %0(s32)
144
145    %2(s32) = G_ZEXT %1(s8)
146
147    $r0 = COPY %2(s32)
148
149    BX_RET 14, $noreg, implicit $r0
150...
151---
152name:            test_trunc_and_sext_s8_to_s32
153legalized:       true
154regBankSelected: true
155selected:        false
156tracksRegLiveness: true
157registers:
158  - { id: 0, class: gprb }
159  - { id: 1, class: gprb }
160  - { id: 2, class: gprb }
161body:             |
162  bb.0:
163    liveins: $r0
164
165    ; CHECK-LABEL: name: test_trunc_and_sext_s8_to_s32
166    ; CHECK: liveins: $r0
167    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
168    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY [[COPY]]
169    ; CHECK: [[t2SXTB:%[0-9]+]]:rgpr = t2SXTB [[COPY1]], 0, 14 /* CC::al */, $noreg
170    ; CHECK: $r0 = COPY [[t2SXTB]]
171    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
172    %0(s32) = COPY $r0
173
174    %1(s8) = G_TRUNC %0(s32)
175
176    %2(s32) = G_SEXT %1(s8)
177
178    $r0 = COPY %2(s32)
179
180    BX_RET 14, $noreg, implicit $r0
181...
182---
183name:            test_trunc_and_anyext_s8_to_s32
184legalized:       true
185regBankSelected: true
186selected:        false
187tracksRegLiveness: true
188registers:
189  - { id: 0, class: gprb }
190  - { id: 1, class: gprb }
191  - { id: 2, class: gprb }
192body:             |
193  bb.0:
194    liveins: $r0
195
196    ; CHECK-LABEL: name: test_trunc_and_anyext_s8_to_s32
197    ; CHECK: liveins: $r0
198    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
199    ; CHECK: $r0 = COPY [[COPY]]
200    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
201    %0(s32) = COPY $r0
202
203    %1(s8) = G_TRUNC %0(s32)
204
205    %2(s32) = G_ANYEXT %1(s8)
206
207    $r0 = COPY %2(s32)
208
209    BX_RET 14, $noreg, implicit $r0
210...
211---
212name:            test_trunc_and_zext_s16_to_s32
213legalized:       true
214regBankSelected: true
215selected:        false
216tracksRegLiveness: true
217registers:
218  - { id: 0, class: gprb }
219  - { id: 1, class: gprb }
220  - { id: 2, class: gprb }
221body:             |
222  bb.0:
223    liveins: $r0
224
225    ; CHECK-LABEL: name: test_trunc_and_zext_s16_to_s32
226    ; CHECK: liveins: $r0
227    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
228    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY [[COPY]]
229    ; CHECK: [[t2UXTH:%[0-9]+]]:rgpr = t2UXTH [[COPY1]], 0, 14 /* CC::al */, $noreg
230    ; CHECK: $r0 = COPY [[t2UXTH]]
231    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
232    %0(s32) = COPY $r0
233
234    %1(s16) = G_TRUNC %0(s32)
235
236    %2(s32) = G_ZEXT %1(s16)
237
238    $r0 = COPY %2(s32)
239
240    BX_RET 14, $noreg, implicit $r0
241...
242---
243name:            test_trunc_and_sext_s16_to_s32
244legalized:       true
245regBankSelected: true
246selected:        false
247tracksRegLiveness: true
248registers:
249  - { id: 0, class: gprb }
250  - { id: 1, class: gprb }
251  - { id: 2, class: gprb }
252body:             |
253  bb.0:
254    liveins: $r0
255
256    ; CHECK-LABEL: name: test_trunc_and_sext_s16_to_s32
257    ; CHECK: liveins: $r0
258    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
259    ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY [[COPY]]
260    ; CHECK: [[t2SXTH:%[0-9]+]]:rgpr = t2SXTH [[COPY1]], 0, 14 /* CC::al */, $noreg
261    ; CHECK: $r0 = COPY [[t2SXTH]]
262    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
263    %0(s32) = COPY $r0
264
265    %1(s16) = G_TRUNC %0(s32)
266
267    %2(s32) = G_SEXT %1(s16)
268
269    $r0 = COPY %2(s32)
270
271    BX_RET 14, $noreg, implicit $r0
272...
273---
274name:            test_trunc_and_anyext_s16_to_s32
275legalized:       true
276regBankSelected: true
277selected:        false
278tracksRegLiveness: true
279registers:
280  - { id: 0, class: gprb }
281  - { id: 1, class: gprb }
282  - { id: 2, class: gprb }
283body:             |
284  bb.0:
285    liveins: $r0
286
287    ; CHECK-LABEL: name: test_trunc_and_anyext_s16_to_s32
288    ; CHECK: liveins: $r0
289    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
290    ; CHECK: $r0 = COPY [[COPY]]
291    ; CHECK: BX_RET 14 /* CC::al */, $noreg, implicit $r0
292    %0(s32) = COPY $r0
293
294    %1(s16) = G_TRUNC %0(s32)
295
296    %2(s32) = G_ANYEXT %1(s16)
297
298    $r0 = COPY %2(s32)
299
300    BX_RET 14, $noreg, implicit $r0
301...
302---
303name:            test_trunc_and_zext_s1_to_s16
304legalized:       true
305regBankSelected: true
306selected:        false
307tracksRegLiveness: true
308registers:
309  - { id: 0, class: gprb }
310  - { id: 1, class: gprb }
311  - { id: 2, class: gprb }
312  - { id: 3, class: gprb }
313body:             |
314  bb.0:
315    liveins: $r0, $r1
316
317    ; CHECK-LABEL: name: test_trunc_and_zext_s1_to_s16
318    ; CHECK: liveins: $r0, $r1
319    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
320    ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1
321    ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]
322    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[COPY2]], 1, 14 /* CC::al */, $noreg, $noreg
323    ; CHECK: t2STRHi12 [[t2ANDri]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s16))
324    ; CHECK: BX_RET 14 /* CC::al */, $noreg
325    %0(p0) = COPY $r0
326
327    %1(s32) = COPY $r1
328
329    %2(s1) = G_TRUNC %1(s32)
330
331    %3(s16) = G_ZEXT %2(s1)
332
333    G_STORE %3(s16), %0(p0) :: (store (s16))
334
335    BX_RET 14, $noreg
336...
337---
338name:            test_trunc_and_sext_s1_to_s16
339legalized:       true
340regBankSelected: true
341selected:        false
342tracksRegLiveness: true
343registers:
344  - { id: 0, class: gprb }
345  - { id: 1, class: gprb }
346  - { id: 2, class: gprb }
347  - { id: 3, class: gprb }
348body:             |
349  bb.0:
350    liveins: $r0, $r1
351
352    ; CHECK-LABEL: name: test_trunc_and_sext_s1_to_s16
353    ; CHECK: liveins: $r0, $r1
354    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
355    ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1
356    ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]
357    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[COPY2]], 1, 14 /* CC::al */, $noreg, $noreg
358    ; CHECK: [[t2RSBri:%[0-9]+]]:rgpr = t2RSBri [[t2ANDri]], 0, 14 /* CC::al */, $noreg, $noreg
359    ; CHECK: t2STRHi12 [[t2RSBri]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s16))
360    ; CHECK: BX_RET 14 /* CC::al */, $noreg
361    %0(p0) = COPY $r0
362
363    %1(s32) = COPY $r1
364
365    %2(s1) = G_TRUNC %1(s32)
366
367    %3(s16) = G_SEXT %2(s1)
368
369    G_STORE %3(s16), %0(p0) :: (store (s16))
370
371    BX_RET 14, $noreg
372...
373---
374name:            test_trunc_and_anyext_s1_to_s16
375legalized:       true
376regBankSelected: true
377selected:        false
378tracksRegLiveness: true
379registers:
380  - { id: 0, class: gprb }
381  - { id: 1, class: gprb }
382  - { id: 2, class: gprb }
383  - { id: 3, class: gprb }
384body:             |
385  bb.0:
386    liveins: $r0, $r1
387
388    ; CHECK-LABEL: name: test_trunc_and_anyext_s1_to_s16
389    ; CHECK: liveins: $r0, $r1
390    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
391    ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1
392    ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]
393    ; CHECK: t2STRHi12 [[COPY2]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s16))
394    ; CHECK: BX_RET 14 /* CC::al */, $noreg
395    %0(p0) = COPY $r0
396
397    %1(s32) = COPY $r1
398
399    %2(s1) = G_TRUNC %1(s32)
400
401    %3(s16) = G_ANYEXT %2(s1)
402
403    G_STORE %3(s16), %0(p0) :: (store (s16))
404
405    BX_RET 14, $noreg
406...
407---
408name:            test_trunc_and_zext_s8_to_s16
409legalized:       true
410regBankSelected: true
411selected:        false
412tracksRegLiveness: true
413registers:
414  - { id: 0, class: gprb }
415  - { id: 1, class: gprb }
416  - { id: 2, class: gprb }
417  - { id: 3, class: gprb }
418body:             |
419  bb.0:
420    liveins: $r0, $r1
421
422    ; CHECK-LABEL: name: test_trunc_and_zext_s8_to_s16
423    ; CHECK: liveins: $r0, $r1
424    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
425    ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1
426    ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]
427    ; CHECK: [[t2UXTB:%[0-9]+]]:rgpr = t2UXTB [[COPY2]], 0, 14 /* CC::al */, $noreg
428    ; CHECK: t2STRHi12 [[t2UXTB]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s16))
429    ; CHECK: BX_RET 14 /* CC::al */, $noreg
430    %0(p0) = COPY $r0
431
432    %1(s32) = COPY $r1
433
434    %2(s8) = G_TRUNC %1(s32)
435
436    %3(s16) = G_ZEXT %2(s8)
437
438    G_STORE %3(s16), %0(p0) :: (store (s16))
439
440    BX_RET 14, $noreg
441...
442---
443name:            test_trunc_and_sext_s8_to_s16
444legalized:       true
445regBankSelected: true
446selected:        false
447tracksRegLiveness: true
448registers:
449  - { id: 0, class: gprb }
450  - { id: 1, class: gprb }
451  - { id: 2, class: gprb }
452  - { id: 3, class: gprb }
453body:             |
454  bb.0:
455    liveins: $r0, $r1
456
457    ; CHECK-LABEL: name: test_trunc_and_sext_s8_to_s16
458    ; CHECK: liveins: $r0, $r1
459    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
460    ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1
461    ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]
462    ; CHECK: [[t2SXTB:%[0-9]+]]:rgpr = t2SXTB [[COPY2]], 0, 14 /* CC::al */, $noreg
463    ; CHECK: t2STRHi12 [[t2SXTB]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s16))
464    ; CHECK: BX_RET 14 /* CC::al */, $noreg
465    %0(p0) = COPY $r0
466
467    %1(s32) = COPY $r1
468
469    %2(s8) = G_TRUNC %1(s32)
470
471    %3(s16) = G_SEXT %2(s8)
472
473    G_STORE %3(s16), %0(p0) :: (store (s16))
474
475    BX_RET 14, $noreg
476...
477---
478name:            test_trunc_and_anyext_s8_to_s16
479legalized:       true
480regBankSelected: true
481selected:        false
482tracksRegLiveness: true
483registers:
484  - { id: 0, class: gprb }
485  - { id: 1, class: gprb }
486  - { id: 2, class: gprb }
487  - { id: 3, class: gprb }
488body:             |
489  bb.0:
490    liveins: $r0, $r1
491
492    ; CHECK-LABEL: name: test_trunc_and_anyext_s8_to_s16
493    ; CHECK: liveins: $r0, $r1
494    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
495    ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1
496    ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]
497    ; CHECK: t2STRHi12 [[COPY2]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s16))
498    ; CHECK: BX_RET 14 /* CC::al */, $noreg
499    %0(p0) = COPY $r0
500
501    %1(s32) = COPY $r1
502
503    %2(s8) = G_TRUNC %1(s32)
504
505    %3(s16) = G_ANYEXT %2(s8)
506
507    G_STORE %3(s16), %0(p0) :: (store (s16))
508
509    BX_RET 14, $noreg
510...
511---
512name:            test_trunc_and_zext_s1_to_s8
513legalized:       true
514regBankSelected: true
515selected:        false
516tracksRegLiveness: true
517registers:
518  - { id: 0, class: gprb }
519  - { id: 1, class: gprb }
520  - { id: 2, class: gprb }
521  - { id: 3, class: gprb }
522body:             |
523  bb.0:
524    liveins: $r0, $r1
525
526    ; CHECK-LABEL: name: test_trunc_and_zext_s1_to_s8
527    ; CHECK: liveins: $r0, $r1
528    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
529    ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1
530    ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]
531    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[COPY2]], 1, 14 /* CC::al */, $noreg, $noreg
532    ; CHECK: t2STRBi12 [[t2ANDri]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s8))
533    ; CHECK: BX_RET 14 /* CC::al */, $noreg
534    %0(p0) = COPY $r0
535
536    %1(s32) = COPY $r1
537
538    %2(s1) = G_TRUNC %1(s32)
539
540    %3(s8) = G_ZEXT %2(s1)
541
542    G_STORE %3(s8), %0(p0) :: (store (s8))
543
544    BX_RET 14, $noreg
545...
546---
547name:            test_trunc_and_sext_s1_to_s8
548legalized:       true
549regBankSelected: true
550selected:        false
551tracksRegLiveness: true
552registers:
553  - { id: 0, class: gprb }
554  - { id: 1, class: gprb }
555  - { id: 2, class: gprb }
556  - { id: 3, class: gprb }
557body:             |
558  bb.0:
559    liveins: $r0, $r1
560
561    ; CHECK-LABEL: name: test_trunc_and_sext_s1_to_s8
562    ; CHECK: liveins: $r0, $r1
563    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
564    ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1
565    ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]
566    ; CHECK: [[t2ANDri:%[0-9]+]]:rgpr = t2ANDri [[COPY2]], 1, 14 /* CC::al */, $noreg, $noreg
567    ; CHECK: [[t2RSBri:%[0-9]+]]:rgpr = t2RSBri [[t2ANDri]], 0, 14 /* CC::al */, $noreg, $noreg
568    ; CHECK: t2STRBi12 [[t2RSBri]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s8))
569    ; CHECK: BX_RET 14 /* CC::al */, $noreg
570    %0(p0) = COPY $r0
571
572    %1(s32) = COPY $r1
573
574    %2(s1) = G_TRUNC %1(s32)
575
576    %3(s8) = G_SEXT %2(s1)
577
578    G_STORE %3(s8), %0(p0) :: (store (s8))
579
580    BX_RET 14, $noreg
581...
582---
583name:            test_trunc_and_anyext_s1_to_s8
584legalized:       true
585regBankSelected: true
586selected:        false
587tracksRegLiveness: true
588registers:
589  - { id: 0, class: gprb }
590  - { id: 1, class: gprb }
591  - { id: 2, class: gprb }
592  - { id: 3, class: gprb }
593body:             |
594  bb.0:
595    liveins: $r0, $r1
596
597    ; CHECK-LABEL: name: test_trunc_and_anyext_s1_to_s8
598    ; CHECK: liveins: $r0, $r1
599    ; CHECK: [[COPY:%[0-9]+]]:gpr = COPY $r0
600    ; CHECK: [[COPY1:%[0-9]+]]:gpr = COPY $r1
601    ; CHECK: [[COPY2:%[0-9]+]]:rgpr = COPY [[COPY1]]
602    ; CHECK: t2STRBi12 [[COPY2]], [[COPY]], 0, 14 /* CC::al */, $noreg :: (store (s8))
603    ; CHECK: BX_RET 14 /* CC::al */, $noreg
604    %0(p0) = COPY $r0
605
606    %1(s32) = COPY $r1
607
608    %2(s1) = G_TRUNC %1(s32)
609
610    %3(s8) = G_ANYEXT %2(s1)
611
612    G_STORE %3(s8), %0(p0) :: (store (s8))
613
614    BX_RET 14, $noreg
615...
616