xref: /llvm-project/llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/load-rv64.mir (revision eff60d83b0533954eda153fbbabb3e99d46bde94)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=riscv64 -run-pass=instruction-select %s -o - \
3# RUN:   -disable-gisel-legality-check | FileCheck %s
4
5---
6name:            load_i8_i64
7legalized:       true
8regBankSelected: true
9tracksRegLiveness: true
10body:            |
11  bb.0:
12    liveins: $x10
13
14    ; CHECK-LABEL: name: load_i8_i64
15    ; CHECK: liveins: $x10
16    ; CHECK-NEXT: {{  $}}
17    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
18    ; CHECK-NEXT: [[LBU:%[0-9]+]]:gpr = LBU [[COPY]], 0 :: (load (s8))
19    ; CHECK-NEXT: $x10 = COPY [[LBU]]
20    ; CHECK-NEXT: PseudoRET implicit $x10
21    %0:gprb(p0) = COPY $x10
22    %1:gprb(s64) = G_LOAD %0(p0) :: (load (s8))
23    $x10 = COPY %1(s64)
24    PseudoRET implicit $x10
25
26...
27---
28name:            load_i16_i64
29legalized:       true
30regBankSelected: true
31tracksRegLiveness: true
32body:            |
33  bb.0:
34    liveins: $x10
35
36    ; CHECK-LABEL: name: load_i16_i64
37    ; CHECK: liveins: $x10
38    ; CHECK-NEXT: {{  $}}
39    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
40    ; CHECK-NEXT: [[LH:%[0-9]+]]:gpr = LH [[COPY]], 0 :: (load (s16))
41    ; CHECK-NEXT: $x10 = COPY [[LH]]
42    ; CHECK-NEXT: PseudoRET implicit $x10
43    %0:gprb(p0) = COPY $x10
44    %1:gprb(s64) = G_LOAD %0(p0) :: (load (s16))
45    $x10 = COPY %1(s64)
46    PseudoRET implicit $x10
47
48...
49---
50name:            load_i8_i16
51legalized:       true
52regBankSelected: true
53tracksRegLiveness: true
54body:            |
55  bb.0:
56    liveins: $x10
57
58    ; CHECK-LABEL: name: load_i8_i16
59    ; CHECK: liveins: $x10
60    ; CHECK-NEXT: {{  $}}
61    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
62    ; CHECK-NEXT: [[LBU:%[0-9]+]]:gpr = LBU [[COPY]], 0 :: (load (s8))
63    ; CHECK-NEXT: $x10 = COPY [[LBU]]
64    ; CHECK-NEXT: PseudoRET implicit $x10
65    %0:gprb(p0) = COPY $x10
66    %1:gprb(s16) = G_LOAD %0(p0) :: (load (s8))
67    %2:gprb(s64) = G_ANYEXT %1
68    $x10 = COPY %2(s64)
69    PseudoRET implicit $x10
70
71...
72---
73name:            load_i16_i16
74legalized:       true
75regBankSelected: true
76tracksRegLiveness: true
77body:            |
78  bb.0:
79    liveins: $x10
80
81    ; CHECK-LABEL: name: load_i16_i16
82    ; CHECK: liveins: $x10
83    ; CHECK-NEXT: {{  $}}
84    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
85    ; CHECK-NEXT: [[LH:%[0-9]+]]:gpr = LH [[COPY]], 0 :: (load (s16))
86    ; CHECK-NEXT: $x10 = COPY [[LH]]
87    ; CHECK-NEXT: PseudoRET implicit $x10
88    %0:gprb(p0) = COPY $x10
89    %1:gprb(s16) = G_LOAD %0(p0) :: (load (s16))
90    %2:gprb(s64) = G_ANYEXT %1
91    $x10 = COPY %2(s64)
92    PseudoRET implicit $x10
93
94...
95---
96name:            load_i32_i64
97legalized:       true
98regBankSelected: true
99tracksRegLiveness: true
100body:            |
101  bb.0:
102    liveins: $x10
103
104    ; CHECK-LABEL: name: load_i32_i64
105    ; CHECK: liveins: $x10
106    ; CHECK-NEXT: {{  $}}
107    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
108    ; CHECK-NEXT: [[LW:%[0-9]+]]:gpr = LW [[COPY]], 0 :: (load (s32))
109    ; CHECK-NEXT: $x10 = COPY [[LW]]
110    ; CHECK-NEXT: PseudoRET implicit $x10
111    %0:gprb(p0) = COPY $x10
112    %1:gprb(s64) = G_LOAD %0(p0) :: (load (s32))
113    $x10 = COPY %1(s64)
114    PseudoRET implicit $x10
115
116...
117---
118name:            load_i64_i64
119legalized:       true
120regBankSelected: true
121tracksRegLiveness: true
122body:            |
123  bb.0:
124    liveins: $x10
125
126    ; CHECK-LABEL: name: load_i64_i64
127    ; CHECK: liveins: $x10
128    ; CHECK-NEXT: {{  $}}
129    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
130    ; CHECK-NEXT: [[LD:%[0-9]+]]:gpr = LD [[COPY]], 0 :: (load (s64))
131    ; CHECK-NEXT: $x10 = COPY [[LD]]
132    ; CHECK-NEXT: PseudoRET implicit $x10
133    %0:gprb(p0) = COPY $x10
134    %1:gprb(s64) = G_LOAD %0(p0) :: (load (s64))
135    $x10 = COPY %1(s64)
136    PseudoRET implicit $x10
137
138...
139---
140name:            load_p0
141legalized:       true
142regBankSelected: true
143tracksRegLiveness: true
144body:            |
145  bb.0:
146    liveins: $x10
147
148    ; CHECK-LABEL: name: load_p0
149    ; CHECK: liveins: $x10
150    ; CHECK-NEXT: {{  $}}
151    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
152    ; CHECK-NEXT: [[LD:%[0-9]+]]:gpr = LD [[COPY]], 0 :: (load (p0))
153    ; CHECK-NEXT: $x10 = COPY [[LD]]
154    ; CHECK-NEXT: PseudoRET implicit $x10
155    %0:gprb(p0) = COPY $x10
156    %1:gprb(p0) = G_LOAD %0(p0) :: (load (p0))
157    $x10 = COPY %1(p0)
158    PseudoRET implicit $x10
159
160...
161---
162name:            zextload_i8_i64
163legalized:       true
164regBankSelected: true
165tracksRegLiveness: true
166body:            |
167  bb.0:
168    liveins: $x10
169
170    ; CHECK-LABEL: name: zextload_i8_i64
171    ; CHECK: liveins: $x10
172    ; CHECK-NEXT: {{  $}}
173    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
174    ; CHECK-NEXT: [[LBU:%[0-9]+]]:gpr = LBU [[COPY]], 0 :: (load (s8))
175    ; CHECK-NEXT: $x10 = COPY [[LBU]]
176    ; CHECK-NEXT: PseudoRET implicit $x10
177    %0:gprb(p0) = COPY $x10
178    %1:gprb(s64) = G_ZEXTLOAD %0(p0) :: (load (s8))
179    $x10 = COPY %1(s64)
180    PseudoRET implicit $x10
181
182...
183---
184name:            zextload_i16_i64
185legalized:       true
186regBankSelected: true
187tracksRegLiveness: true
188body:            |
189  bb.0:
190    liveins: $x10
191
192    ; CHECK-LABEL: name: zextload_i16_i64
193    ; CHECK: liveins: $x10
194    ; CHECK-NEXT: {{  $}}
195    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
196    ; CHECK-NEXT: [[LHU:%[0-9]+]]:gpr = LHU [[COPY]], 0 :: (load (s16))
197    ; CHECK-NEXT: $x10 = COPY [[LHU]]
198    ; CHECK-NEXT: PseudoRET implicit $x10
199    %0:gprb(p0) = COPY $x10
200    %1:gprb(s64) = G_ZEXTLOAD %0(p0) :: (load (s16))
201    $x10 = COPY %1(s64)
202    PseudoRET implicit $x10
203
204...
205---
206name:            zextload_i32_i64
207legalized:       true
208regBankSelected: true
209tracksRegLiveness: true
210body:            |
211  bb.0:
212    liveins: $x10
213
214    ; CHECK-LABEL: name: zextload_i32_i64
215    ; CHECK: liveins: $x10
216    ; CHECK-NEXT: {{  $}}
217    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
218    ; CHECK-NEXT: [[LWU:%[0-9]+]]:gpr = LWU [[COPY]], 0 :: (load (s32))
219    ; CHECK-NEXT: $x10 = COPY [[LWU]]
220    ; CHECK-NEXT: PseudoRET implicit $x10
221    %0:gprb(p0) = COPY $x10
222    %1:gprb(s64) = G_ZEXTLOAD %0(p0) :: (load (s32))
223    $x10 = COPY %1(s64)
224    PseudoRET implicit $x10
225
226...
227---
228name:            sextload_i8_i64
229legalized:       true
230regBankSelected: true
231tracksRegLiveness: true
232body:            |
233  bb.0:
234    liveins: $x10
235
236    ; CHECK-LABEL: name: sextload_i8_i64
237    ; CHECK: liveins: $x10
238    ; CHECK-NEXT: {{  $}}
239    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
240    ; CHECK-NEXT: [[LB:%[0-9]+]]:gpr = LB [[COPY]], 0 :: (load (s8))
241    ; CHECK-NEXT: $x10 = COPY [[LB]]
242    ; CHECK-NEXT: PseudoRET implicit $x10
243    %0:gprb(p0) = COPY $x10
244    %1:gprb(s64) = G_SEXTLOAD %0(p0) :: (load (s8))
245    $x10 = COPY %1(s64)
246    PseudoRET implicit $x10
247
248...
249---
250name:            sextload_i16_i64
251legalized:       true
252regBankSelected: true
253tracksRegLiveness: true
254body:            |
255  bb.0:
256    liveins: $x10
257
258    ; CHECK-LABEL: name: sextload_i16_i64
259    ; CHECK: liveins: $x10
260    ; CHECK-NEXT: {{  $}}
261    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
262    ; CHECK-NEXT: [[LH:%[0-9]+]]:gpr = LH [[COPY]], 0 :: (load (s16))
263    ; CHECK-NEXT: $x10 = COPY [[LH]]
264    ; CHECK-NEXT: PseudoRET implicit $x10
265    %0:gprb(p0) = COPY $x10
266    %1:gprb(s64) = G_SEXTLOAD %0(p0) :: (load (s16))
267    $x10 = COPY %1(s64)
268    PseudoRET implicit $x10
269
270...
271---
272name:            sextload_i32_i64
273legalized:       true
274regBankSelected: true
275tracksRegLiveness: true
276body:            |
277  bb.0:
278    liveins: $x10
279
280    ; CHECK-LABEL: name: sextload_i32_i64
281    ; CHECK: liveins: $x10
282    ; CHECK-NEXT: {{  $}}
283    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
284    ; CHECK-NEXT: [[LW:%[0-9]+]]:gpr = LW [[COPY]], 0 :: (load (s32))
285    ; CHECK-NEXT: $x10 = COPY [[LW]]
286    ; CHECK-NEXT: PseudoRET implicit $x10
287    %0:gprb(p0) = COPY $x10
288    %1:gprb(s64) = G_SEXTLOAD %0(p0) :: (load (s32))
289    $x10 = COPY %1(s64)
290    PseudoRET implicit $x10
291
292...
293---
294name:            load_i8_i32
295legalized:       true
296regBankSelected: true
297tracksRegLiveness: true
298body:            |
299  bb.0:
300    liveins: $x10
301    ; CHECK-LABEL: name: load_i8_i32
302    ; CHECK: liveins: $x10
303    ; CHECK-NEXT: {{  $}}
304    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
305    ; CHECK-NEXT: [[LBU:%[0-9]+]]:gpr = LBU [[COPY]], 0 :: (load (s8))
306    ; CHECK-NEXT: $x10 = COPY [[LBU]]
307    ; CHECK-NEXT: PseudoRET implicit $x10
308    %0:gprb(p0) = COPY $x10
309    %9:gprb(s32) = G_LOAD %0(p0) :: (load (s8))
310    %5:gprb(s64) = G_ANYEXT %9(s32)
311    $x10 = COPY %5(s64)
312    PseudoRET implicit $x10
313
314...
315---
316name:            load_i16_i32
317legalized:       true
318regBankSelected: true
319tracksRegLiveness: true
320body:            |
321  bb.0:
322    liveins: $x10
323    ; CHECK-LABEL: name: load_i16_i32
324    ; CHECK: liveins: $x10
325    ; CHECK-NEXT: {{  $}}
326    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
327    ; CHECK-NEXT: [[LH:%[0-9]+]]:gpr = LH [[COPY]], 0 :: (load (s16))
328    ; CHECK-NEXT: $x10 = COPY [[LH]]
329    ; CHECK-NEXT: PseudoRET implicit $x10
330    %0:gprb(p0) = COPY $x10
331    %9:gprb(s32) = G_LOAD %0(p0) :: (load (s16))
332    %5:gprb(s64) = G_ANYEXT %9(s32)
333    $x10 = COPY %5(s64)
334    PseudoRET implicit $x10
335
336...
337---
338name:            load_i32_i32
339legalized:       true
340regBankSelected: true
341tracksRegLiveness: true
342body:            |
343  bb.0:
344    liveins: $x10
345    ; CHECK-LABEL: name: load_i32_i32
346    ; CHECK: liveins: $x10
347    ; CHECK-NEXT: {{  $}}
348    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
349    ; CHECK-NEXT: [[LW:%[0-9]+]]:gpr = LW [[COPY]], 0 :: (load (s32))
350    ; CHECK-NEXT: $x10 = COPY [[LW]]
351    ; CHECK-NEXT: PseudoRET implicit $x10
352    %0:gprb(p0) = COPY $x10
353    %9:gprb(s32) = G_LOAD %0(p0) :: (load (s32))
354    %5:gprb(s64) = G_ANYEXT %9(s32)
355    $x10 = COPY %5(s64)
356    PseudoRET implicit $x10
357
358...
359---
360name:            load_fi_i64
361legalized:       true
362regBankSelected: true
363tracksRegLiveness: true
364
365stack:
366  - { id: 0, offset: 0, size: 8, alignment: 8 }
367
368body:            |
369  bb.0:
370    ; CHECK-LABEL: name: load_fi_i64
371    ; CHECK: [[LD:%[0-9]+]]:gpr = LD %stack.0, 0 :: (load (s64))
372    ; CHECK-NEXT: $x10 = COPY [[LD]]
373    ; CHECK-NEXT: PseudoRET implicit $x10
374    %0:gprb(p0) = G_FRAME_INDEX %stack.0
375    %1:gprb(s64) = G_LOAD %0(p0) :: (load (s64))
376    $x10 = COPY %1(s64)
377    PseudoRET implicit $x10
378
379...
380---
381name:            load_fi_gep_i64_i64
382legalized:       true
383regBankSelected: true
384tracksRegLiveness: true
385
386stack:
387  - { id: 0, offset: 0, size: 16, alignment: 8 }
388
389body:            |
390  bb.0:
391    ; CHECK-LABEL: name: load_fi_gep_i64_i64
392    ; CHECK: [[LD:%[0-9]+]]:gpr = LD %stack.0, 8 :: (load (s64))
393    ; CHECK-NEXT: $x10 = COPY [[LD]]
394    ; CHECK-NEXT: PseudoRET implicit $x10
395    %0:gprb(p0) = G_FRAME_INDEX %stack.0
396    %1:gprb(s64) = G_CONSTANT i64 8
397    %2:gprb(p0) = G_PTR_ADD %0(p0), %1(s64)
398    %3:gprb(s64) = G_LOAD %2(p0) :: (load (s64))
399    $x10 = COPY %3(s64)
400    PseudoRET implicit $x10
401
402...
403---
404name:            load_gep_i64_i64
405legalized:       true
406regBankSelected: true
407tracksRegLiveness: true
408body:            |
409  bb.0:
410    liveins: $x10
411
412    ; CHECK-LABEL: name: load_gep_i64_i64
413    ; CHECK: liveins: $x10
414    ; CHECK-NEXT: {{  $}}
415    ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
416    ; CHECK-NEXT: [[LD:%[0-9]+]]:gpr = LD [[COPY]], 8 :: (load (s64))
417    ; CHECK-NEXT: $x10 = COPY [[LD]]
418    ; CHECK-NEXT: PseudoRET implicit $x10
419    %0:gprb(p0) = COPY $x10
420    %1:gprb(s64) = G_CONSTANT i64 8
421    %2:gprb(p0) = G_PTR_ADD %0(p0), %1(s64)
422    %3:gprb(s64) = G_LOAD %2(p0) :: (load (s64))
423    $x10 = COPY %3(s64)
424    PseudoRET implicit $x10
425
426...
427