[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / legalizer / legalize-load-rv32.mir
blob93b145c5049fdb2aea5d6df99b5f755007deb9db
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - \
3 # RUN:   | FileCheck %s
4 # RUN: llc -mtriple=riscv32 -mattr=+unaligned-scalar-mem -run-pass=legalizer %s -o - \
5 # RUN:   | FileCheck %s --check-prefix=UNALIGNED
7 ---
8 name:            load_i8
9 alignment:       4
10 tracksRegLiveness: true
11 registers:
12   - { id: 0, class: _ }
13   - { id: 1, class: _ }
14   - { id: 2, class: _ }
15 frameInfo:
16   maxAlignment:    1
17 machineFunctionInfo:
18   varArgsFrameIndex: 0
19   varArgsSaveSize: 0
20 body:             |
21   bb.1:
22     liveins: $x10
24     ; CHECK-LABEL: name: load_i8
25     ; CHECK: liveins: $x10
26     ; CHECK-NEXT: {{  $}}
27     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
28     ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load (s8))
29     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LOAD]](s16)
30     ; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s32)
31     ; CHECK-NEXT: PseudoRET implicit $x10
32     ;
33     ; UNALIGNED-LABEL: name: load_i8
34     ; UNALIGNED: liveins: $x10
35     ; UNALIGNED-NEXT: {{  $}}
36     ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
37     ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load (s8))
38     ; UNALIGNED-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LOAD]](s16)
39     ; UNALIGNED-NEXT: $x10 = COPY [[ANYEXT]](s32)
40     ; UNALIGNED-NEXT: PseudoRET implicit $x10
41     %0:_(p0) = COPY $x10
42     %1:_(s8) = G_LOAD %0(p0) :: (load (s8))
43     %2:_(s32) = G_ANYEXT %1(s8)
44     $x10 = COPY %2(s32)
45     PseudoRET implicit $x10
47 ...
48 ---
49 name:            load_i16
50 alignment:       4
51 tracksRegLiveness: true
52 registers:
53   - { id: 0, class: _ }
54   - { id: 1, class: _ }
55   - { id: 2, class: _ }
56 frameInfo:
57   maxAlignment:    1
58 machineFunctionInfo:
59   varArgsFrameIndex: 0
60   varArgsSaveSize: 0
61 body:             |
62   bb.1:
63     liveins: $x10
65     ; CHECK-LABEL: name: load_i16
66     ; CHECK: liveins: $x10
67     ; CHECK-NEXT: {{  $}}
68     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
69     ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load (s16))
70     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LOAD]](s16)
71     ; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s32)
72     ; CHECK-NEXT: PseudoRET implicit $x10
73     ;
74     ; UNALIGNED-LABEL: name: load_i16
75     ; UNALIGNED: liveins: $x10
76     ; UNALIGNED-NEXT: {{  $}}
77     ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
78     ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load (s16))
79     ; UNALIGNED-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LOAD]](s16)
80     ; UNALIGNED-NEXT: $x10 = COPY [[ANYEXT]](s32)
81     ; UNALIGNED-NEXT: PseudoRET implicit $x10
82     %0:_(p0) = COPY $x10
83     %1:_(s16) = G_LOAD %0(p0) :: (load (s16))
84     %2:_(s32) = G_ANYEXT %1(s16)
85     $x10 = COPY %2(s32)
86     PseudoRET implicit $x10
88 ...
89 ---
90 name:            load_i32
91 alignment:       4
92 tracksRegLiveness: true
93 registers:
94   - { id: 0, class: _ }
95   - { id: 1, class: _ }
96 frameInfo:
97   maxAlignment:    1
98 machineFunctionInfo:
99   varArgsFrameIndex: 0
100   varArgsSaveSize: 0
101 body:             |
102   bb.1:
103     liveins: $x10
105     ; CHECK-LABEL: name: load_i32
106     ; CHECK: liveins: $x10
107     ; CHECK-NEXT: {{  $}}
108     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
109     ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32))
110     ; CHECK-NEXT: $x10 = COPY [[LOAD]](s32)
111     ; CHECK-NEXT: PseudoRET implicit $x10
112     ;
113     ; UNALIGNED-LABEL: name: load_i32
114     ; UNALIGNED: liveins: $x10
115     ; UNALIGNED-NEXT: {{  $}}
116     ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
117     ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32))
118     ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s32)
119     ; UNALIGNED-NEXT: PseudoRET implicit $x10
120     %0:_(p0) = COPY $x10
121     %1:_(s32) = G_LOAD %0(p0) :: (load (s32))
122     $x10 = COPY %1(s32)
123     PseudoRET implicit $x10
127 name:            load_i64
128 alignment:       4
129 tracksRegLiveness: true
130 registers:
131   - { id: 0, class: _ }
132   - { id: 1, class: _ }
133   - { id: 2, class: _ }
134   - { id: 3, class: _ }
135 frameInfo:
136   maxAlignment:    1
137 machineFunctionInfo:
138   varArgsFrameIndex: 0
139   varArgsSaveSize: 0
140 body:             |
141   bb.1:
142     liveins: $x10
144     ; CHECK-LABEL: name: load_i64
145     ; CHECK: liveins: $x10
146     ; CHECK-NEXT: {{  $}}
147     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
148     ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32), align 8)
149     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
150     ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
151     ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s32) from unknown-address + 4)
152     ; CHECK-NEXT: $x10 = COPY [[LOAD]](s32)
153     ; CHECK-NEXT: $x11 = COPY [[LOAD1]](s32)
154     ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
155     ;
156     ; UNALIGNED-LABEL: name: load_i64
157     ; UNALIGNED: liveins: $x10
158     ; UNALIGNED-NEXT: {{  $}}
159     ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
160     ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32), align 8)
161     ; UNALIGNED-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
162     ; UNALIGNED-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
163     ; UNALIGNED-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s32) from unknown-address + 4)
164     ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s32)
165     ; UNALIGNED-NEXT: $x11 = COPY [[LOAD1]](s32)
166     ; UNALIGNED-NEXT: PseudoRET implicit $x10, implicit $x11
167     %0:_(p0) = COPY $x10
168     %1:_(s64) = G_LOAD %0(p0) :: (load (s64))
169     %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64)
170     $x10 = COPY %2(s32)
171     $x11 = COPY %3(s32)
172     PseudoRET implicit $x10, implicit $x11
176 name:            load_ptr
177 alignment:       4
178 tracksRegLiveness: true
179 registers:
180   - { id: 0, class: _ }
181   - { id: 1, class: _ }
182 frameInfo:
183   maxAlignment:    1
184 machineFunctionInfo:
185   varArgsFrameIndex: 0
186   varArgsSaveSize: 0
187 body:             |
188   bb.1:
189     liveins: $x10
191     ; CHECK-LABEL: name: load_ptr
192     ; CHECK: liveins: $x10
193     ; CHECK-NEXT: {{  $}}
194     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
195     ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[COPY]](p0) :: (load (p0), align 8)
196     ; CHECK-NEXT: $x10 = COPY [[LOAD]](p0)
197     ; CHECK-NEXT: PseudoRET implicit $x10
198     ;
199     ; UNALIGNED-LABEL: name: load_ptr
200     ; UNALIGNED: liveins: $x10
201     ; UNALIGNED-NEXT: {{  $}}
202     ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
203     ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[COPY]](p0) :: (load (p0), align 8)
204     ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](p0)
205     ; UNALIGNED-NEXT: PseudoRET implicit $x10
206     %0:_(p0) = COPY $x10
207     %1:_(p0) = G_LOAD %0(p0) :: (load (p0), align 8)
208     $x10 = COPY %1(p0)
209     PseudoRET implicit $x10
213 name:            load_i16_unaligned
214 alignment:       4
215 tracksRegLiveness: true
216 registers:
217   - { id: 0, class: _ }
218   - { id: 1, class: _ }
219   - { id: 2, class: _ }
220 frameInfo:
221   maxAlignment:    1
222 machineFunctionInfo:
223   varArgsFrameIndex: 0
224   varArgsSaveSize: 0
225 body:             |
226   bb.1:
227     liveins: $x10
229     ; CHECK-LABEL: name: load_i16_unaligned
230     ; CHECK: liveins: $x10
231     ; CHECK-NEXT: {{  $}}
232     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
233     ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
234     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
235     ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
236     ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[PTR_ADD]](p0) :: (load (s8) from unknown-address + 1)
237     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
238     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LOAD]](s16)
239     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ANYEXT]], [[C1]](s32)
240     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]]
241     ; CHECK-NEXT: $x10 = COPY [[OR]](s32)
242     ; CHECK-NEXT: PseudoRET implicit $x10
243     ;
244     ; UNALIGNED-LABEL: name: load_i16_unaligned
245     ; UNALIGNED: liveins: $x10
246     ; UNALIGNED-NEXT: {{  $}}
247     ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
248     ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[COPY]](p0) :: (load (s16), align 1)
249     ; UNALIGNED-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LOAD]](s16)
250     ; UNALIGNED-NEXT: $x10 = COPY [[ANYEXT]](s32)
251     ; UNALIGNED-NEXT: PseudoRET implicit $x10
252     %0:_(p0) = COPY $x10
253     %1:_(s16) = G_LOAD %0(p0) :: (load (s16), align 1)
254     %2:_(s32) = G_ANYEXT %1(s16)
255     $x10 = COPY %2(s32)
256     PseudoRET implicit $x10
260 name:            load_i32_unaligned
261 alignment:       4
262 tracksRegLiveness: true
263 registers:
264   - { id: 0, class: _ }
265   - { id: 1, class: _ }
266 frameInfo:
267   maxAlignment:    1
268 machineFunctionInfo:
269   varArgsFrameIndex: 0
270   varArgsSaveSize: 0
271 body:             |
272   bb.1:
273     liveins: $x10
275     ; CHECK-LABEL: name: load_i32_unaligned
276     ; CHECK: liveins: $x10
277     ; CHECK-NEXT: {{  $}}
278     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
279     ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
280     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
281     ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
282     ; CHECK-NEXT: [[ZEXTLOAD1:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[PTR_ADD]](p0) :: (load (s8) from unknown-address + 1)
283     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
284     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ZEXTLOAD1]], [[C1]](s32)
285     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]]
286     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
287     ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C2]](s32)
288     ; CHECK-NEXT: [[ZEXTLOAD2:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[PTR_ADD1]](p0) :: (load (s8) from unknown-address + 2)
289     ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C]](s32)
290     ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s8) from unknown-address + 3)
291     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[LOAD]], [[C1]](s32)
292     ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[SHL1]], [[ZEXTLOAD2]]
293     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
294     ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[OR1]], [[C3]](s32)
295     ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s32) = G_OR [[SHL2]], [[OR]]
296     ; CHECK-NEXT: $x10 = COPY [[OR2]](s32)
297     ; CHECK-NEXT: PseudoRET implicit $x10
298     ;
299     ; UNALIGNED-LABEL: name: load_i32_unaligned
300     ; UNALIGNED: liveins: $x10
301     ; UNALIGNED-NEXT: {{  $}}
302     ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
303     ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32), align 1)
304     ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s32)
305     ; UNALIGNED-NEXT: PseudoRET implicit $x10
306     %0:_(p0) = COPY $x10
307     %1:_(s32) = G_LOAD %0(p0) :: (load (s32), align 1)
308     $x10 = COPY %1(s32)
309     PseudoRET implicit $x10
313 name:            load_i32_align2
314 alignment:       4
315 tracksRegLiveness: true
316 registers:
317   - { id: 0, class: _ }
318   - { id: 1, class: _ }
319 frameInfo:
320   maxAlignment:    1
321 machineFunctionInfo:
322   varArgsFrameIndex: 0
323   varArgsSaveSize: 0
324 body:             |
325   bb.1:
326     liveins: $x10
328     ; CHECK-LABEL: name: load_i32_align2
329     ; CHECK: liveins: $x10
330     ; CHECK-NEXT: {{  $}}
331     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
332     ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s16))
333     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
334     ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
335     ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s16) from unknown-address + 2)
336     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
337     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[LOAD]], [[C1]](s32)
338     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]]
339     ; CHECK-NEXT: $x10 = COPY [[OR]](s32)
340     ; CHECK-NEXT: PseudoRET implicit $x10
341     ;
342     ; UNALIGNED-LABEL: name: load_i32_align2
343     ; UNALIGNED: liveins: $x10
344     ; UNALIGNED-NEXT: {{  $}}
345     ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
346     ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32), align 2)
347     ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s32)
348     ; UNALIGNED-NEXT: PseudoRET implicit $x10
349     %0:_(p0) = COPY $x10
350     %1:_(s32) = G_LOAD %0(p0) :: (load (s32), align 2)
351     $x10 = COPY %1(s32)
352     PseudoRET implicit $x10
356 name:            load_i64_unaligned
357 alignment:       4
358 tracksRegLiveness: true
359 registers:
360   - { id: 0, class: _ }
361   - { id: 1, class: _ }
362   - { id: 2, class: _ }
363   - { id: 3, class: _ }
364 frameInfo:
365   maxAlignment:    1
366 machineFunctionInfo:
367   varArgsFrameIndex: 0
368   varArgsSaveSize: 0
369 body:             |
370   bb.1:
371     liveins: $x10
373     ; CHECK-LABEL: name: load_i64_unaligned
374     ; CHECK: liveins: $x10
375     ; CHECK-NEXT: {{  $}}
376     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
377     ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
378     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
379     ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
380     ; CHECK-NEXT: [[ZEXTLOAD1:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[PTR_ADD]](p0) :: (load (s8) from unknown-address + 1)
381     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
382     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ZEXTLOAD1]], [[C1]](s32)
383     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[SHL]], [[ZEXTLOAD]]
384     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
385     ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C2]](s32)
386     ; CHECK-NEXT: [[ZEXTLOAD2:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[PTR_ADD1]](p0) :: (load (s8) from unknown-address + 2)
387     ; CHECK-NEXT: [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD1]], [[C]](s32)
388     ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD2]](p0) :: (load (s8) from unknown-address + 3)
389     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[LOAD]], [[C1]](s32)
390     ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[SHL1]], [[ZEXTLOAD2]]
391     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
392     ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[OR1]], [[C3]](s32)
393     ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s32) = G_OR [[SHL2]], [[OR]]
394     ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
395     ; CHECK-NEXT: [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C4]](s32)
396     ; CHECK-NEXT: [[ZEXTLOAD3:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[PTR_ADD3]](p0) :: (load (s8) from unknown-address + 4)
397     ; CHECK-NEXT: [[PTR_ADD4:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD3]], [[C]](s32)
398     ; CHECK-NEXT: [[ZEXTLOAD4:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[PTR_ADD4]](p0) :: (load (s8) from unknown-address + 5)
399     ; CHECK-NEXT: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[ZEXTLOAD4]], [[C1]](s32)
400     ; CHECK-NEXT: [[OR3:%[0-9]+]]:_(s32) = G_OR [[SHL3]], [[ZEXTLOAD3]]
401     ; CHECK-NEXT: [[PTR_ADD5:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD3]], [[C2]](s32)
402     ; CHECK-NEXT: [[ZEXTLOAD5:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[PTR_ADD5]](p0) :: (load (s8) from unknown-address + 6)
403     ; CHECK-NEXT: [[PTR_ADD6:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD5]], [[C]](s32)
404     ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD6]](p0) :: (load (s8) from unknown-address + 7)
405     ; CHECK-NEXT: [[SHL4:%[0-9]+]]:_(s32) = G_SHL [[LOAD1]], [[C1]](s32)
406     ; CHECK-NEXT: [[OR4:%[0-9]+]]:_(s32) = G_OR [[SHL4]], [[ZEXTLOAD5]]
407     ; CHECK-NEXT: [[SHL5:%[0-9]+]]:_(s32) = G_SHL [[OR4]], [[C3]](s32)
408     ; CHECK-NEXT: [[OR5:%[0-9]+]]:_(s32) = G_OR [[SHL5]], [[OR3]]
409     ; CHECK-NEXT: $x10 = COPY [[OR2]](s32)
410     ; CHECK-NEXT: $x11 = COPY [[OR5]](s32)
411     ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
412     ;
413     ; UNALIGNED-LABEL: name: load_i64_unaligned
414     ; UNALIGNED: liveins: $x10
415     ; UNALIGNED-NEXT: {{  $}}
416     ; UNALIGNED-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
417     ; UNALIGNED-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p0) :: (load (s32), align 1)
418     ; UNALIGNED-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4
419     ; UNALIGNED-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)
420     ; UNALIGNED-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s32) from unknown-address + 4, align 1)
421     ; UNALIGNED-NEXT: $x10 = COPY [[LOAD]](s32)
422     ; UNALIGNED-NEXT: $x11 = COPY [[LOAD1]](s32)
423     ; UNALIGNED-NEXT: PseudoRET implicit $x10, implicit $x11
424     %0:_(p0) = COPY $x10
425     %1:_(s64) = G_LOAD %0(p0) :: (load (s64), align 1)
426     %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64)
427     $x10 = COPY %2(s32)
428     $x11 = COPY %3(s32)
429     PseudoRET implicit $x10, implicit $x11