Revert r354244 "[DAGCombiner] Eliminate dead stores to stack."
[llvm-complete.git] / test / CodeGen / AArch64 / GlobalISel / select-load.mir
blob713a5b202b49e176a7feda52637e89c78e07a646
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
4 --- |
5   target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
7   define void @load_s64_gpr(i64* %addr) { ret void }
8   define void @load_s32_gpr(i32* %addr) { ret void }
9   define void @load_s16_gpr_anyext(i16* %addr) { ret void }
10   define void @load_s16_gpr(i16* %addr) { ret void }
11   define void @load_s8_gpr_anyext(i8* %addr) { ret void }
12   define void @load_s8_gpr(i8* %addr) { ret void }
14   define void @load_fi_s64_gpr() {
15     %ptr0 = alloca i64
16     ret void
17   }
19   define void @load_gep_128_s64_gpr(i64* %addr) { ret void }
20   define void @load_gep_512_s32_gpr(i32* %addr) { ret void }
21   define void @load_gep_64_s16_gpr(i16* %addr) { ret void }
22   define void @load_gep_1_s8_gpr(i8* %addr) { ret void }
24   define void @load_s64_fpr(i64* %addr) { ret void }
25   define void @load_s32_fpr(i32* %addr) { ret void }
26   define void @load_s16_fpr(i16* %addr) { ret void }
27   define void @load_s8_fpr(i8* %addr) { ret void }
29   define void @load_gep_8_s64_fpr(i64* %addr) { ret void }
30   define void @load_gep_16_s32_fpr(i32* %addr) { ret void }
31   define void @load_gep_64_s16_fpr(i16* %addr) { ret void }
32   define void @load_gep_32_s8_fpr(i8* %addr) { ret void }
34   define void @load_v2s32(i64 *%addr) { ret void }
35 ...
37 ---
38 name:            load_s64_gpr
39 legalized:       true
40 regBankSelected: true
42 registers:
43   - { id: 0, class: gpr }
44   - { id: 1, class: gpr }
46 body:             |
47   bb.0:
48     liveins: $x0
50     ; CHECK-LABEL: name: load_s64_gpr
51     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
52     ; CHECK: [[LDRXui:%[0-9]+]]:gpr64 = LDRXui [[COPY]], 0 :: (load 8 from %ir.addr)
53     ; CHECK: $x0 = COPY [[LDRXui]]
54     %0(p0) = COPY $x0
55     %1(s64) = G_LOAD  %0 :: (load 8 from %ir.addr)
56     $x0 = COPY %1(s64)
57 ...
59 ---
60 name:            load_s32_gpr
61 legalized:       true
62 regBankSelected: true
64 registers:
65   - { id: 0, class: gpr }
66   - { id: 1, class: gpr }
68 body:             |
69   bb.0:
70     liveins: $x0
72     ; CHECK-LABEL: name: load_s32_gpr
73     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
74     ; CHECK: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 0 :: (load 4 from %ir.addr)
75     ; CHECK: $w0 = COPY [[LDRWui]]
76     %0(p0) = COPY $x0
77     %1(s32) = G_LOAD  %0 :: (load 4 from %ir.addr)
78     $w0 = COPY %1(s32)
79 ...
81 ---
82 name:            load_s16_gpr_anyext
83 legalized:       true
84 regBankSelected: true
86 body:             |
87   bb.0:
88     liveins: $x0
90     ; CHECK-LABEL: name: load_s16_gpr_anyext
91     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
92     ; CHECK: [[LDRHHui:%[0-9]+]]:gpr32 = LDRHHui [[COPY]], 0 :: (load 2 from %ir.addr)
93     ; CHECK: $w0 = COPY [[LDRHHui]]
94     %0:gpr(p0) = COPY $x0
95     %1:gpr(s32) = G_LOAD  %0 :: (load 2 from %ir.addr)
96     $w0 = COPY %1(s32)
97 ...
99 ---
100 name:            load_s16_gpr
101 legalized:       true
102 regBankSelected: true
104 registers:
105   - { id: 0, class: gpr }
106   - { id: 1, class: gpr }
108 body:             |
109   bb.0:
110     liveins: $x0
112     ; CHECK-LABEL: name: load_s16_gpr
113     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
114     ; CHECK: [[LDRHHui:%[0-9]+]]:gpr32 = LDRHHui [[COPY]], 0 :: (load 2 from %ir.addr)
115     ; CHECK: [[T0:%[0-9]+]]:gpr32all = COPY [[LDRHHui]]
116     ; CHECK: $w0 = COPY [[T0]]
117     %0(p0) = COPY $x0
118     %1(s16) = G_LOAD  %0 :: (load 2 from %ir.addr)
119     %2:gpr(s32) = G_ANYEXT %1
120     $w0 = COPY %2(s32)
124 name:            load_s8_gpr_anyext
125 legalized:       true
126 regBankSelected: true
128 body:             |
129   bb.0:
130     liveins: $x0
132     ; CHECK-LABEL: name: load_s8_gpr
133     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
134     ; CHECK: [[LDRBBui:%[0-9]+]]:gpr32 = LDRBBui [[COPY]], 0 :: (load 1 from %ir.addr)
135     ; CHECK: $w0 = COPY [[LDRBBui]]
136     %0:gpr(p0) = COPY $x0
137     %1:gpr(s32) = G_LOAD  %0 :: (load 1 from %ir.addr)
138     $w0 = COPY %1(s32)
142 name:            load_s8_gpr
143 legalized:       true
144 regBankSelected: true
146 registers:
147   - { id: 0, class: gpr }
148   - { id: 1, class: gpr }
150 body:             |
151   bb.0:
152     liveins: $x0
154     ; CHECK-LABEL: name: load_s8_gpr
155     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
156     ; CHECK: [[LDRBBui:%[0-9]+]]:gpr32 = LDRBBui [[COPY]], 0 :: (load 1 from %ir.addr)
157     ; CHECK: [[T0:%[0-9]+]]:gpr32all = COPY [[LDRBBui]]
158     ; CHECK: $w0 = COPY [[T0]]
159     %0(p0) = COPY $x0
160     %1(s8) = G_LOAD  %0 :: (load 1 from %ir.addr)
161     %2:gpr(s32) = G_ANYEXT %1
162     $w0 = COPY %2(s32)
166 name:            load_fi_s64_gpr
167 legalized:       true
168 regBankSelected: true
170 registers:
171   - { id: 0, class: gpr }
172   - { id: 1, class: gpr }
174 stack:
175   - { id: 0, name: ptr0, offset: 0, size: 8, alignment: 8 }
177 body:             |
178   bb.0:
179     liveins: $x0
181     ; CHECK-LABEL: name: load_fi_s64_gpr
182     ; CHECK: [[LDRXui:%[0-9]+]]:gpr64 = LDRXui %stack.0.ptr0, 0 :: (load 8)
183     ; CHECK: $x0 = COPY [[LDRXui]]
184     %0(p0) = G_FRAME_INDEX %stack.0.ptr0
185     %1(s64) = G_LOAD %0 :: (load 8)
186     $x0 = COPY %1(s64)
190 name:            load_gep_128_s64_gpr
191 legalized:       true
192 regBankSelected: true
194 registers:
195   - { id: 0, class: gpr }
196   - { id: 1, class: gpr }
197   - { id: 2, class: gpr }
198   - { id: 3, class: gpr }
200 body:             |
201   bb.0:
202     liveins: $x0
204     ; CHECK-LABEL: name: load_gep_128_s64_gpr
205     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
206     ; CHECK: [[LDRXui:%[0-9]+]]:gpr64 = LDRXui [[COPY]], 16 :: (load 8 from %ir.addr)
207     ; CHECK: $x0 = COPY [[LDRXui]]
208     %0(p0) = COPY $x0
209     %1(s64) = G_CONSTANT i64 128
210     %2(p0) = G_GEP %0, %1
211     %3(s64) = G_LOAD %2 :: (load 8 from %ir.addr)
212     $x0 = COPY %3
216 name:            load_gep_512_s32_gpr
217 legalized:       true
218 regBankSelected: true
220 registers:
221   - { id: 0, class: gpr }
222   - { id: 1, class: gpr }
223   - { id: 2, class: gpr }
224   - { id: 3, class: gpr }
226 body:             |
227   bb.0:
228     liveins: $x0
230     ; CHECK-LABEL: name: load_gep_512_s32_gpr
231     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
232     ; CHECK: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 128 :: (load 4 from %ir.addr)
233     ; CHECK: $w0 = COPY [[LDRWui]]
234     %0(p0) = COPY $x0
235     %1(s64) = G_CONSTANT i64 512
236     %2(p0) = G_GEP %0, %1
237     %3(s32) = G_LOAD %2 :: (load 4 from %ir.addr)
238     $w0 = COPY %3
242 name:            load_gep_64_s16_gpr
243 legalized:       true
244 regBankSelected: true
246 registers:
247   - { id: 0, class: gpr }
248   - { id: 1, class: gpr }
249   - { id: 2, class: gpr }
250   - { id: 3, class: gpr }
252 body:             |
253   bb.0:
254     liveins: $x0
256     ; CHECK-LABEL: name: load_gep_64_s16_gpr
257     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
258     ; CHECK: [[LDRHHui:%[0-9]+]]:gpr32 = LDRHHui [[COPY]], 32 :: (load 2 from %ir.addr)
259     ; CHECK: [[T0:%[0-9]+]]:gpr32all = COPY [[LDRHHui]]
260     ; CHECK: $w0 = COPY [[T0]]
261     %0(p0) = COPY $x0
262     %1(s64) = G_CONSTANT i64 64
263     %2(p0) = G_GEP %0, %1
264     %3(s16) = G_LOAD %2 :: (load 2 from %ir.addr)
265     %4:gpr(s32) = G_ANYEXT %3
266     $w0 = COPY %4
270 name:            load_gep_1_s8_gpr
271 legalized:       true
272 regBankSelected: true
274 registers:
275   - { id: 0, class: gpr }
276   - { id: 1, class: gpr }
277   - { id: 2, class: gpr }
278   - { id: 3, class: gpr }
280 body:             |
281   bb.0:
282     liveins: $x0
284     ; CHECK-LABEL: name: load_gep_1_s8_gpr
285     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
286     ; CHECK: [[LDRBBui:%[0-9]+]]:gpr32 = LDRBBui [[COPY]], 1 :: (load 1 from %ir.addr)
287     ; CHECK: [[T0:%[0-9]+]]:gpr32all = COPY [[LDRBBui]]
288     ; CHECK: $w0 = COPY [[T0]]
289     %0(p0) = COPY $x0
290     %1(s64) = G_CONSTANT i64 1
291     %2(p0) = G_GEP %0, %1
292     %3(s8) = G_LOAD %2 :: (load 1 from %ir.addr)
293     %4:gpr(s32) = G_ANYEXT %3
294     $w0 = COPY %4
298 name:            load_s64_fpr
299 legalized:       true
300 regBankSelected: true
302 registers:
303   - { id: 0, class: gpr }
304   - { id: 1, class: fpr }
306 body:             |
307   bb.0:
308     liveins: $x0
310     ; CHECK-LABEL: name: load_s64_fpr
311     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
312     ; CHECK: [[LDRDui:%[0-9]+]]:fpr64 = LDRDui [[COPY]], 0 :: (load 8 from %ir.addr)
313     ; CHECK: $d0 = COPY [[LDRDui]]
314     %0(p0) = COPY $x0
315     %1(s64) = G_LOAD  %0 :: (load 8 from %ir.addr)
316     $d0 = COPY %1(s64)
320 name:            load_s32_fpr
321 legalized:       true
322 regBankSelected: true
324 registers:
325   - { id: 0, class: gpr }
326   - { id: 1, class: fpr }
328 body:             |
329   bb.0:
330     liveins: $x0
332     ; CHECK-LABEL: name: load_s32_fpr
333     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
334     ; CHECK: [[LDRSui:%[0-9]+]]:fpr32 = LDRSui [[COPY]], 0 :: (load 4 from %ir.addr)
335     ; CHECK: $s0 = COPY [[LDRSui]]
336     %0(p0) = COPY $x0
337     %1(s32) = G_LOAD  %0 :: (load 4 from %ir.addr)
338     $s0 = COPY %1(s32)
342 name:            load_s16_fpr
343 legalized:       true
344 regBankSelected: true
346 registers:
347   - { id: 0, class: gpr }
348   - { id: 1, class: fpr }
350 body:             |
351   bb.0:
352     liveins: $x0
354     ; CHECK-LABEL: name: load_s16_fpr
355     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
356     ; CHECK: [[LDRHui:%[0-9]+]]:fpr16 = LDRHui [[COPY]], 0 :: (load 2 from %ir.addr)
357     ; CHECK: $h0 = COPY [[LDRHui]]
358     %0(p0) = COPY $x0
359     %1(s16) = G_LOAD  %0 :: (load 2 from %ir.addr)
360     $h0 = COPY %1(s16)
364 name:            load_s8_fpr
365 legalized:       true
366 regBankSelected: true
368 registers:
369   - { id: 0, class: gpr }
370   - { id: 1, class: fpr }
372 body:             |
373   bb.0:
374     liveins: $x0
376     ; CHECK-LABEL: name: load_s8_fpr
377     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
378     ; CHECK: [[LDRBui:%[0-9]+]]:fpr8 = LDRBui [[COPY]], 0 :: (load 1 from %ir.addr)
379     ; CHECK: $b0 = COPY [[LDRBui]]
380     %0(p0) = COPY $x0
381     %1(s8) = G_LOAD  %0 :: (load 1 from %ir.addr)
382     $b0 = COPY %1(s8)
386 name:            load_gep_8_s64_fpr
387 legalized:       true
388 regBankSelected: true
390 registers:
391   - { id: 0, class: gpr }
392   - { id: 1, class: gpr }
393   - { id: 2, class: gpr }
394   - { id: 3, class: fpr }
396 body:             |
397   bb.0:
398     liveins: $x0
400     ; CHECK-LABEL: name: load_gep_8_s64_fpr
401     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
402     ; CHECK: [[LDRDui:%[0-9]+]]:fpr64 = LDRDui [[COPY]], 1 :: (load 8 from %ir.addr)
403     ; CHECK: $d0 = COPY [[LDRDui]]
404     %0(p0) = COPY $x0
405     %1(s64) = G_CONSTANT i64 8
406     %2(p0) = G_GEP %0, %1
407     %3(s64) = G_LOAD %2 :: (load 8 from %ir.addr)
408     $d0 = COPY %3
412 name:            load_gep_16_s32_fpr
413 legalized:       true
414 regBankSelected: true
416 registers:
417   - { id: 0, class: gpr }
418   - { id: 1, class: gpr }
419   - { id: 2, class: gpr }
420   - { id: 3, class: fpr }
422 body:             |
423   bb.0:
424     liveins: $x0
426     ; CHECK-LABEL: name: load_gep_16_s32_fpr
427     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
428     ; CHECK: [[LDRSui:%[0-9]+]]:fpr32 = LDRSui [[COPY]], 4 :: (load 4 from %ir.addr)
429     ; CHECK: $s0 = COPY [[LDRSui]]
430     %0(p0) = COPY $x0
431     %1(s64) = G_CONSTANT i64 16
432     %2(p0) = G_GEP %0, %1
433     %3(s32) = G_LOAD %2 :: (load 4 from %ir.addr)
434     $s0 = COPY %3
438 name:            load_gep_64_s16_fpr
439 legalized:       true
440 regBankSelected: true
442 registers:
443   - { id: 0, class: gpr }
444   - { id: 1, class: gpr }
445   - { id: 2, class: gpr }
446   - { id: 3, class: fpr }
448 body:             |
449   bb.0:
450     liveins: $x0
452     ; CHECK-LABEL: name: load_gep_64_s16_fpr
453     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
454     ; CHECK: [[LDRHui:%[0-9]+]]:fpr16 = LDRHui [[COPY]], 32 :: (load 2 from %ir.addr)
455     ; CHECK: $h0 = COPY [[LDRHui]]
456     %0(p0) = COPY $x0
457     %1(s64) = G_CONSTANT i64 64
458     %2(p0) = G_GEP %0, %1
459     %3(s16) = G_LOAD %2 :: (load 2 from %ir.addr)
460     $h0 = COPY %3
464 name:            load_gep_32_s8_fpr
465 legalized:       true
466 regBankSelected: true
468 registers:
469   - { id: 0, class: gpr }
470   - { id: 1, class: gpr }
471   - { id: 2, class: gpr }
472   - { id: 3, class: fpr }
474 body:             |
475   bb.0:
476     liveins: $x0
478     ; CHECK-LABEL: name: load_gep_32_s8_fpr
479     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
480     ; CHECK: [[LDRBui:%[0-9]+]]:fpr8 = LDRBui [[COPY]], 32 :: (load 1 from %ir.addr)
481     ; CHECK: $b0 = COPY [[LDRBui]]
482     %0(p0) = COPY $x0
483     %1(s64) = G_CONSTANT i64 32
484     %2(p0) = G_GEP %0, %1
485     %3(s8) = G_LOAD %2 :: (load 1 from %ir.addr)
486     $b0 = COPY %3
489 name:            load_v2s32
490 legalized:       true
491 regBankSelected: true
493 registers:
494   - { id: 0, class: gpr }
495   - { id: 1, class: fpr }
497 body:             |
498   bb.0:
499     liveins: $x0
501     ; CHECK-LABEL: name: load_v2s32
502     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
503     ; CHECK: [[LDRDui:%[0-9]+]]:fpr64 = LDRDui [[COPY]], 0 :: (load 8 from %ir.addr)
504     ; CHECK: $d0 = COPY [[LDRDui]]
505     %0(p0) = COPY $x0
506     %1(<2 x s32>) = G_LOAD %0 :: (load 8 from %ir.addr)
507     $d0 = COPY %1(<2 x s32>)