xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/prelegalizercombiner-extending-loads.mir (revision ddf167c442018e807819aa0b2e56546977870333)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple aarch64 -O0 -run-pass=aarch64-prelegalizer-combiner -global-isel -verify-machineinstrs %s -o - | FileCheck %s
3---
4name:            test_anyext
5body: |
6  bb.0:
7    liveins: $x0
8    ; CHECK-LABEL: name: test_anyext
9    ; CHECK: liveins: $x0
10    ; CHECK-NEXT: {{  $}}
11    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
12    ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))
13    ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)
14    %0:_(p0) = COPY $x0
15    %1:_(s8) = G_LOAD %0 :: (load (s8))
16    %2:_(s32) = G_ANYEXT %1
17    $w0 = COPY %2
18...
19
20---
21name:            test_anyext_with_copy
22body: |
23  bb.0:
24    liveins: $x0
25    ; CHECK-LABEL: name: test_anyext_with_copy
26    ; CHECK: liveins: $x0
27    ; CHECK-NEXT: {{  $}}
28    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
29    ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))
30    ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)
31    %0:_(p0) = COPY $x0
32    %1:_(s8) = G_LOAD %0 :: (load (s8))
33    %2:_(s8) = COPY %1
34    %3:_(s32) = G_ANYEXT %1
35    $w0 = COPY %3
36...
37
38---
39name:            test_signext
40body: |
41  bb.0:
42    liveins: $x0
43    ; CHECK-LABEL: name: test_signext
44    ; CHECK: liveins: $x0
45    ; CHECK-NEXT: {{  $}}
46    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
47    ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
48    ; CHECK-NEXT: $w0 = COPY [[SEXTLOAD]](s32)
49    %0:_(p0) = COPY $x0
50    %1:_(s8) = G_LOAD %0 :: (load (s8))
51    %2:_(s32) = G_SEXT %1
52    $w0 = COPY %2
53...
54
55---
56name:            test_zeroext
57body: |
58  bb.0:
59    liveins: $x0
60    ; CHECK-LABEL: name: test_zeroext
61    ; CHECK: liveins: $x0
62    ; CHECK-NEXT: {{  $}}
63    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
64    ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
65    ; CHECK-NEXT: $w0 = COPY [[ZEXTLOAD]](s32)
66    %0:_(p0) = COPY $x0
67    %1:_(s8) = G_LOAD %0 :: (load (s8))
68    %2:_(s32) = G_ZEXT %1
69    $w0 = COPY %2
70...
71
72---
73name:            test_2anyext
74body: |
75  bb.0:
76    liveins: $x0
77    ; CHECK-LABEL: name: test_2anyext
78    ; CHECK: liveins: $x0
79    ; CHECK-NEXT: {{  $}}
80    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
81    ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))
82    ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)
83    ; CHECK-NEXT: $w1 = COPY [[LOAD]](s32)
84    %0:_(p0) = COPY $x0
85    %1:_(s8) = G_LOAD %0 :: (load (s8))
86    %2:_(s32) = G_ANYEXT %1
87    %3:_(s32) = G_ANYEXT %1
88    $w0 = COPY %2
89    $w1 = COPY %3
90...
91
92---
93name:            test_1anyext_1signext
94body: |
95  bb.0:
96    liveins: $x0
97    ; CHECK-LABEL: name: test_1anyext_1signext
98    ; CHECK: liveins: $x0
99    ; CHECK-NEXT: {{  $}}
100    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
101    ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
102    ; CHECK-NEXT: $w0 = COPY [[SEXTLOAD]](s32)
103    ; CHECK-NEXT: $w1 = COPY [[SEXTLOAD]](s32)
104    %0:_(p0) = COPY $x0
105    %1:_(s8) = G_LOAD %0 :: (load (s8))
106    %2:_(s32) = G_ANYEXT %1
107    %3:_(s32) = G_SEXT %1
108    $w0 = COPY %2
109    $w1 = COPY %3
110...
111
112---
113name:            test_1xor_1signext
114body: |
115  bb.0:
116    liveins: $x0
117    ; CHECK-LABEL: name: test_1xor_1signext
118    ; CHECK: liveins: $x0
119    ; CHECK-NEXT: {{  $}}
120    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
121    ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
122    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s32)
123    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 -1
124    ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s8) = G_XOR [[TRUNC]], [[C]]
125    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[XOR]](s8)
126    ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
127    ; CHECK-NEXT: $w1 = COPY [[SEXTLOAD]](s32)
128    %0:_(p0) = COPY $x0
129    %1:_(s8) = G_LOAD %0 :: (load (s8))
130    %2:_(s8) = G_CONSTANT i8 -1
131    %3:_(s8) = G_XOR %1, %2
132    %5:_(s32) = G_ANYEXT %3
133    %6:_(s32) = G_SEXT %1
134    $w0 = COPY %5
135    $w1 = COPY %6
136...
137
138---
139name:            test_1anyext_1zeroext
140body: |
141  bb.0:
142    liveins: $x0
143    ; CHECK-LABEL: name: test_1anyext_1zeroext
144    ; CHECK: liveins: $x0
145    ; CHECK-NEXT: {{  $}}
146    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
147    ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
148    ; CHECK-NEXT: $w0 = COPY [[ZEXTLOAD]](s32)
149    ; CHECK-NEXT: $w1 = COPY [[ZEXTLOAD]](s32)
150    %0:_(p0) = COPY $x0
151    %1:_(s8) = G_LOAD %0 :: (load (s8))
152    %2:_(s32) = G_ANYEXT %1
153    %3:_(s32) = G_ZEXT %1
154    $w0 = COPY %2
155    $w1 = COPY %3
156...
157
158---
159name:            test_1signext_1zeroext
160body: |
161  bb.0:
162    liveins: $x0
163    ; CHECK-LABEL: name: test_1signext_1zeroext
164    ; CHECK: liveins: $x0
165    ; CHECK-NEXT: {{  $}}
166    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
167    ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
168    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s32)
169    ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s8)
170    ; CHECK-NEXT: $w0 = COPY [[ZEXT]](s32)
171    ; CHECK-NEXT: $w1 = COPY [[SEXTLOAD]](s32)
172    %0:_(p0) = COPY $x0
173    %1:_(s8) = G_LOAD %0 :: (load (s8))
174    %2:_(s32) = G_ZEXT %1
175    %3:_(s32) = G_SEXT %1
176    $w0 = COPY %2
177    $w1 = COPY %3
178...
179
180---
181name:            test_1anyext64_1signext32
182body: |
183  bb.0:
184    liveins: $x0
185    ; CHECK-LABEL: name: test_1anyext64_1signext32
186    ; CHECK: liveins: $x0
187    ; CHECK-NEXT: {{  $}}
188    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
189    ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
190    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SEXTLOAD]](s32)
191    ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)
192    ; CHECK-NEXT: $w1 = COPY [[SEXTLOAD]](s32)
193    %0:_(p0) = COPY $x0
194    %1:_(s8) = G_LOAD %0 :: (load (s8))
195    %2:_(s64) = G_ANYEXT %1
196    %3:_(s32) = G_SEXT %1
197    $x0 = COPY %2
198    $w1 = COPY %3
199...
200
201---
202name:            test_1anyext32_1signext64
203body: |
204  bb.0:
205    liveins: $x0
206    ; CHECK-LABEL: name: test_1anyext32_1signext64
207    ; CHECK: liveins: $x0
208    ; CHECK-NEXT: {{  $}}
209    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
210    ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s64) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
211    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)
212    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)
213    ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
214    ; CHECK-NEXT: $x1 = COPY [[SEXTLOAD]](s64)
215    %0:_(p0) = COPY $x0
216    %1:_(s8) = G_LOAD %0 :: (load (s8))
217    %2:_(s32) = G_ANYEXT %1
218    %3:_(s64) = G_SEXT %1
219    $w0 = COPY %2
220    $x1 = COPY %3
221...
222
223---
224name:            test_2anyext32_1signext64
225body: |
226  bb.0:
227    liveins: $x0
228    ; CHECK-LABEL: name: test_2anyext32_1signext64
229    ; CHECK: liveins: $x0
230    ; CHECK-NEXT: {{  $}}
231    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
232    ; CHECK-NEXT: [[SEXTLOAD:%[0-9]+]]:_(s64) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
233    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)
234    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)
235    ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)
236    ; CHECK-NEXT: $w0 = COPY [[ANYEXT]](s32)
237    ; CHECK-NEXT: $x1 = COPY [[SEXTLOAD]](s64)
238    ; CHECK-NEXT: $w2 = COPY [[ANYEXT1]](s32)
239    %0:_(p0) = COPY $x0
240    %1:_(s8) = G_LOAD %0 :: (load (s8))
241    %2:_(s32) = G_ANYEXT %1
242    %3:_(s64) = G_SEXT %1
243    %4:_(s32) = G_ANYEXT %1
244    $w0 = COPY %2
245    $x1 = COPY %3
246    $w2 = COPY %4
247...
248
249---
250name:            test_multiblock_anyext
251body: |
252  ; CHECK-LABEL: name: test_multiblock_anyext
253  ; CHECK: bb.0:
254  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
255  ; CHECK-NEXT:   liveins: $x0
256  ; CHECK-NEXT: {{  $}}
257  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
258  ; CHECK-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))
259  ; CHECK-NEXT:   G_BR %bb.1
260  ; CHECK-NEXT: {{  $}}
261  ; CHECK-NEXT: bb.1:
262  ; CHECK-NEXT:   $w0 = COPY [[LOAD]](s32)
263  bb.0:
264    liveins: $x0
265    %0:_(p0) = COPY $x0
266    %1:_(s8) = G_LOAD %0 :: (load (s8))
267    G_BR %bb.1
268  bb.1:
269    %2:_(s32) = G_ANYEXT %1
270    $w0 = COPY %2
271...
272
273---
274name:            test_multiblock_signext
275body: |
276  ; CHECK-LABEL: name: test_multiblock_signext
277  ; CHECK: bb.0:
278  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
279  ; CHECK-NEXT:   liveins: $x0
280  ; CHECK-NEXT: {{  $}}
281  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
282  ; CHECK-NEXT:   [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
283  ; CHECK-NEXT:   G_BR %bb.1
284  ; CHECK-NEXT: {{  $}}
285  ; CHECK-NEXT: bb.1:
286  ; CHECK-NEXT:   $w0 = COPY [[SEXTLOAD]](s32)
287  bb.0:
288    liveins: $x0
289    %0:_(p0) = COPY $x0
290    %1:_(s8) = G_LOAD %0 :: (load (s8))
291    G_BR %bb.1
292  bb.1:
293    %2:_(s32) = G_SEXT %1
294    $w0 = COPY %2
295...
296
297---
298name:            test_multiblock_zeroext
299body: |
300  ; CHECK-LABEL: name: test_multiblock_zeroext
301  ; CHECK: bb.0:
302  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
303  ; CHECK-NEXT:   liveins: $x0
304  ; CHECK-NEXT: {{  $}}
305  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
306  ; CHECK-NEXT:   [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
307  ; CHECK-NEXT:   G_BR %bb.1
308  ; CHECK-NEXT: {{  $}}
309  ; CHECK-NEXT: bb.1:
310  ; CHECK-NEXT:   $w0 = COPY [[ZEXTLOAD]](s32)
311  bb.0:
312    liveins: $x0
313    %0:_(p0) = COPY $x0
314    %1:_(s8) = G_LOAD %0 :: (load (s8))
315    G_BR %bb.1
316  bb.1:
317    %2:_(s32) = G_ZEXT %1
318    $w0 = COPY %2
319...
320
321---
322name:            test_multiblock_2anyext
323body: |
324  ; CHECK-LABEL: name: test_multiblock_2anyext
325  ; CHECK: bb.0:
326  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
327  ; CHECK-NEXT:   liveins: $x0
328  ; CHECK-NEXT: {{  $}}
329  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
330  ; CHECK-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s8))
331  ; CHECK-NEXT:   G_BR %bb.1
332  ; CHECK-NEXT: {{  $}}
333  ; CHECK-NEXT: bb.1:
334  ; CHECK-NEXT:   $w0 = COPY [[LOAD]](s32)
335  ; CHECK-NEXT:   $w1 = COPY [[LOAD]](s32)
336  bb.0:
337    liveins: $x0
338    %0:_(p0) = COPY $x0
339    %1:_(s8) = G_LOAD %0 :: (load (s8))
340    %2:_(s32) = G_ANYEXT %1
341    G_BR %bb.1
342  bb.1:
343    %3:_(s32) = G_ANYEXT %1
344    $w0 = COPY %2
345    $w1 = COPY %3
346...
347
348---
349name:            test_multiblock_1anyext64_1signext32
350body: |
351  ; CHECK-LABEL: name: test_multiblock_1anyext64_1signext32
352  ; CHECK: bb.0:
353  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
354  ; CHECK-NEXT:   liveins: $x0
355  ; CHECK-NEXT: {{  $}}
356  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
357  ; CHECK-NEXT:   [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
358  ; CHECK-NEXT:   G_BR %bb.1
359  ; CHECK-NEXT: {{  $}}
360  ; CHECK-NEXT: bb.1:
361  ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SEXTLOAD]](s32)
362  ; CHECK-NEXT:   $x0 = COPY [[ANYEXT]](s64)
363  ; CHECK-NEXT:   $w1 = COPY [[SEXTLOAD]](s32)
364  bb.0:
365    liveins: $x0
366    %0:_(p0) = COPY $x0
367    %1:_(s8) = G_LOAD %0 :: (load (s8))
368    G_BR %bb.1
369  bb.1:
370    %2:_(s64) = G_ANYEXT %1
371    %3:_(s32) = G_SEXT %1
372    $x0 = COPY %2
373    $w1 = COPY %3
374...
375
376---
377name:            test_multiblock_1anyext32_1signext64
378body: |
379  ; CHECK-LABEL: name: test_multiblock_1anyext32_1signext64
380  ; CHECK: bb.0:
381  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
382  ; CHECK-NEXT:   liveins: $x0
383  ; CHECK-NEXT: {{  $}}
384  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
385  ; CHECK-NEXT:   [[SEXTLOAD:%[0-9]+]]:_(s64) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
386  ; CHECK-NEXT:   G_BR %bb.1
387  ; CHECK-NEXT: {{  $}}
388  ; CHECK-NEXT: bb.1:
389  ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)
390  ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)
391  ; CHECK-NEXT:   $w0 = COPY [[ANYEXT]](s32)
392  ; CHECK-NEXT:   $x1 = COPY [[SEXTLOAD]](s64)
393  bb.0:
394    liveins: $x0
395    %0:_(p0) = COPY $x0
396    %1:_(s8) = G_LOAD %0 :: (load (s8))
397    G_BR %bb.1
398  bb.1:
399    %2:_(s32) = G_ANYEXT %1
400    %3:_(s64) = G_SEXT %1
401    $w0 = COPY %2
402    $x1 = COPY %3
403...
404
405---
406name:            test_multiblock_2anyext32_1signext64
407body: |
408  ; CHECK-LABEL: name: test_multiblock_2anyext32_1signext64
409  ; CHECK: bb.0:
410  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
411  ; CHECK-NEXT:   liveins: $x0
412  ; CHECK-NEXT: {{  $}}
413  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x0
414  ; CHECK-NEXT:   [[SEXTLOAD:%[0-9]+]]:_(s64) = G_SEXTLOAD [[COPY]](p0) :: (load (s8))
415  ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)
416  ; CHECK-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC]](s8)
417  ; CHECK-NEXT:   G_BR %bb.1
418  ; CHECK-NEXT: {{  $}}
419  ; CHECK-NEXT: bb.1:
420  ; CHECK-NEXT:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[SEXTLOAD]](s64)
421  ; CHECK-NEXT:   [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[TRUNC1]](s8)
422  ; CHECK-NEXT:   $w0 = COPY [[ANYEXT1]](s32)
423  ; CHECK-NEXT:   $x1 = COPY [[SEXTLOAD]](s64)
424  ; CHECK-NEXT:   $w2 = COPY [[ANYEXT]](s32)
425  bb.0:
426    liveins: $x0
427    %0:_(p0) = COPY $x0
428    %1:_(s8) = G_LOAD %0 :: (load (s8))
429    %4:_(s32) = G_ANYEXT %1
430    G_BR %bb.1
431  bb.1:
432    %2:_(s32) = G_ANYEXT %1
433    %3:_(s64) = G_SEXT %1
434    $w0 = COPY %2
435    $x1 = COPY %3
436    $w2 = COPY %4
437...
438---
439name:            test_atomic
440alignment:       4
441tracksRegLiveness: true
442liveins:
443  - { reg: '$x0' }
444body:             |
445  bb.1:
446    liveins: $x0
447
448    ; CHECK-LABEL: name: test_atomic
449    ; CHECK: liveins: $x0
450    ; CHECK-NEXT: {{  $}}
451    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
452    ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load unordered (s16))
453    ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[LOAD]](s16)
454    ; CHECK-NEXT: $w0 = COPY [[ZEXT]](s32)
455    ; CHECK-NEXT: RET_ReallyLR implicit $w0
456    %0:_(p0) = COPY $x0
457    %1:_(s16) = G_LOAD %0(p0) :: (load unordered (s16))
458    %2:_(s32) = G_ZEXT %1(s16)
459    $w0 = COPY %2(s32)
460    RET_ReallyLR implicit $w0
461...
462---
463name:            test_dont_zextload_to_sextload
464body: |
465  bb.0:
466    liveins: $x0
467    ; CHECK-LABEL: name: test_dont_zextload_to_sextload
468    ; CHECK: liveins: $x0
469    ; CHECK-NEXT: {{  $}}
470    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
471    ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
472    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[ZEXTLOAD]](s64)
473    ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[TRUNC]](s32)
474    ; CHECK-NEXT: $x0 = COPY [[ZEXTLOAD]](s64)
475    ; CHECK-NEXT: $x1 = COPY [[SEXT]](s64)
476    %0:_(p0) = COPY $x0
477    %1:_(s32) = G_ZEXTLOAD %0 :: (load (s8))
478    %2:_(s64) = G_ZEXT %1
479    %3:_(s64) = G_SEXT %1
480    $x0 = COPY %2
481    $x1 = COPY %3
482...
483