Revert r354244 "[DAGCombiner] Eliminate dead stores to stack."
[llvm-complete.git] / test / CodeGen / AArch64 / GlobalISel / select-store.mir
blobc4e93af1c8579d3cbd66d130b575640abcb18482
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 @store_s64_gpr(i64* %addr) { ret void }
8   define void @store_s32_gpr(i32* %addr) { ret void }
9   define void @store_s16_gpr(i16* %addr) { ret void }
10   define void @store_s8_gpr(i8* %addr) { ret void }
12   define void @store_zero_s64_gpr(i64* %addr) { ret void }
13   define void @store_zero_s32_gpr(i32* %addr) { ret void }
15   define void @store_fi_s64_gpr() {
16     %ptr0 = alloca i64
17     ret void
18   }
20   define void @store_gep_128_s64_gpr(i64* %addr) { ret void }
21   define void @store_gep_512_s32_gpr(i32* %addr) { ret void }
22   define void @store_gep_64_s16_gpr(i16* %addr) { ret void }
23   define void @store_gep_1_s8_gpr(i8* %addr) { ret void }
25   define void @store_s64_fpr(i64* %addr) { ret void }
26   define void @store_s32_fpr(i32* %addr) { ret void }
28   define void @store_gep_8_s64_fpr(i64* %addr) { ret void }
29   define void @store_gep_8_s32_fpr(i32* %addr) { ret void }
31   define void @store_v2s32(i64 *%addr) { ret void }
32 ...
34 ---
35 name:            store_s64_gpr
36 legalized:       true
37 regBankSelected: true
39 registers:
40   - { id: 0, class: gpr }
41   - { id: 1, class: gpr }
43 body:             |
44   bb.0:
45     liveins: $x0, $x1
47     ; CHECK-LABEL: name: store_s64_gpr
48     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
49     ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
50     ; CHECK: STRXui [[COPY1]], [[COPY]], 0 :: (store 8 into %ir.addr)
51     %0(p0) = COPY $x0
52     %1(s64) = COPY $x1
53     G_STORE  %1, %0 :: (store 8 into %ir.addr)
55 ...
57 ---
58 name:            store_s32_gpr
59 legalized:       true
60 regBankSelected: true
62 registers:
63   - { id: 0, class: gpr }
64   - { id: 1, class: gpr }
66 body:             |
67   bb.0:
68     liveins: $x0, $w1
70     ; CHECK-LABEL: name: store_s32_gpr
71     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
72     ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
73     ; CHECK: STRWui [[COPY1]], [[COPY]], 0 :: (store 4 into %ir.addr)
74     %0(p0) = COPY $x0
75     %1(s32) = COPY $w1
76     G_STORE  %1, %0 :: (store 4 into %ir.addr)
78 ...
80 ---
81 name:            store_s16_gpr
82 legalized:       true
83 regBankSelected: true
85 registers:
86   - { id: 0, class: gpr }
87   - { id: 1, class: gpr }
89 body:             |
90   bb.0:
91     liveins: $x0, $w1
93     ; CHECK-LABEL: name: store_s16_gpr
94     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
95     ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
96     ; CHECK: STRHHui [[COPY1]], [[COPY]], 0 :: (store 2 into %ir.addr)
97     %0(p0) = COPY $x0
98     %2:gpr(s32) = COPY $w1
99     %1(s16) = G_TRUNC %2
100     G_STORE  %1, %0 :: (store 2 into %ir.addr)
105 name:            store_s8_gpr
106 legalized:       true
107 regBankSelected: true
109 registers:
110   - { id: 0, class: gpr }
111   - { id: 1, class: gpr }
113 body:             |
114   bb.0:
115     liveins: $x0, $w1
117     ; CHECK-LABEL: name: store_s8_gpr
118     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
119     ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
120     ; CHECK: STRBBui [[COPY1]], [[COPY]], 0 :: (store 1 into %ir.addr)
121     %0(p0) = COPY $x0
122     %2:gpr(s32) = COPY $w1
123     %1(s8) = G_TRUNC %2
124     G_STORE  %1, %0 :: (store 1 into %ir.addr)
129 name:            store_zero_s64_gpr
130 legalized:       true
131 regBankSelected: true
133 registers:
134   - { id: 0, class: gpr }
135   - { id: 1, class: gpr }
137 body:             |
138   bb.0:
139     liveins: $x0, $x1
141     ; CHECK-LABEL: name: store_zero_s64_gpr
142     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
143     ; CHECK: STRXui $xzr, [[COPY]], 0 :: (store 8 into %ir.addr)
144     %0(p0) = COPY $x0
145     %1(s64) = G_CONSTANT i64 0
146     G_STORE  %1, %0 :: (store 8 into %ir.addr)
151 name:            store_zero_s32_gpr
152 legalized:       true
153 regBankSelected: true
155 registers:
156   - { id: 0, class: gpr }
157   - { id: 1, class: gpr }
159 body:             |
160   bb.0:
161     liveins: $x0
163     ; CHECK-LABEL: name: store_zero_s32_gpr
164     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
165     ; CHECK: STRWui $wzr, [[COPY]], 0 :: (store 4 into %ir.addr)
166     %0(p0) = COPY $x0
167     %1(s32) = G_CONSTANT i32 0
168     G_STORE  %1, %0 :: (store 4 into %ir.addr)
173 name:            store_fi_s64_gpr
174 legalized:       true
175 regBankSelected: true
177 registers:
178   - { id: 0, class: gpr }
179   - { id: 1, class: gpr }
181 stack:
182   - { id: 0, name: ptr0, offset: 0, size: 8, alignment: 8 }
184 body:             |
185   bb.0:
186     liveins: $x0
188     ; CHECK-LABEL: name: store_fi_s64_gpr
189     ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
190     ; CHECK: STRXui [[COPY]], %stack.0.ptr0, 0 :: (store 8)
191     %0(p0) = COPY $x0
192     %1(p0) = G_FRAME_INDEX %stack.0.ptr0
193     G_STORE  %0, %1 :: (store 8)
197 name:            store_gep_128_s64_gpr
198 legalized:       true
199 regBankSelected: true
201 registers:
202   - { id: 0, class: gpr }
203   - { id: 1, class: gpr }
204   - { id: 2, class: gpr }
205   - { id: 3, class: gpr }
207 body:             |
208   bb.0:
209     liveins: $x0, $x1
211     ; CHECK-LABEL: name: store_gep_128_s64_gpr
212     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
213     ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
214     ; CHECK: STRXui [[COPY1]], [[COPY]], 16 :: (store 8 into %ir.addr)
215     %0(p0) = COPY $x0
216     %1(s64) = COPY $x1
217     %2(s64) = G_CONSTANT i64 128
218     %3(p0) = G_GEP %0, %2
219     G_STORE %1, %3 :: (store 8 into %ir.addr)
223 name:            store_gep_512_s32_gpr
224 legalized:       true
225 regBankSelected: true
227 registers:
228   - { id: 0, class: gpr }
229   - { id: 1, class: gpr }
230   - { id: 2, class: gpr }
231   - { id: 3, class: gpr }
233 body:             |
234   bb.0:
235     liveins: $x0, $w1
237     ; CHECK-LABEL: name: store_gep_512_s32_gpr
238     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
239     ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
240     ; CHECK: STRWui [[COPY1]], [[COPY]], 128 :: (store 4 into %ir.addr)
241     %0(p0) = COPY $x0
242     %1(s32) = COPY $w1
243     %2(s64) = G_CONSTANT i64 512
244     %3(p0) = G_GEP %0, %2
245     G_STORE %1, %3 :: (store 4 into %ir.addr)
249 name:            store_gep_64_s16_gpr
250 legalized:       true
251 regBankSelected: true
253 registers:
254   - { id: 0, class: gpr }
255   - { id: 1, class: gpr }
256   - { id: 2, class: gpr }
257   - { id: 3, class: gpr }
259 body:             |
260   bb.0:
261     liveins: $x0, $w1
263     ; CHECK-LABEL: name: store_gep_64_s16_gpr
264     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
265     ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
266     ; CHECK: STRHHui [[COPY1]], [[COPY]], 32 :: (store 2 into %ir.addr)
267     %0(p0) = COPY $x0
268     %4:gpr(s32) = COPY $w1
269     %1(s16) = G_TRUNC %4
270     %2(s64) = G_CONSTANT i64 64
271     %3(p0) = G_GEP %0, %2
272     G_STORE %1, %3 :: (store 2 into %ir.addr)
276 name:            store_gep_1_s8_gpr
277 legalized:       true
278 regBankSelected: true
280 registers:
281   - { id: 0, class: gpr }
282   - { id: 1, class: gpr }
283   - { id: 2, class: gpr }
284   - { id: 3, class: gpr }
286 body:             |
287   bb.0:
288     liveins: $x0, $w1
290     ; CHECK-LABEL: name: store_gep_1_s8_gpr
291     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
292     ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
293     ; CHECK: STRBBui [[COPY1]], [[COPY]], 1 :: (store 1 into %ir.addr)
294     %0(p0) = COPY $x0
295     %4:gpr(s32) = COPY $w1
296     %1(s8) = G_TRUNC %4
297     %2(s64) = G_CONSTANT i64 1
298     %3(p0) = G_GEP %0, %2
299     G_STORE %1, %3 :: (store 1 into %ir.addr)
303 name:            store_s64_fpr
304 legalized:       true
305 regBankSelected: true
307 registers:
308   - { id: 0, class: gpr }
309   - { id: 1, class: fpr }
311 body:             |
312   bb.0:
313     liveins: $x0, $d1
315     ; CHECK-LABEL: name: store_s64_fpr
316     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
317     ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
318     ; CHECK: STRDui [[COPY1]], [[COPY]], 0 :: (store 8 into %ir.addr)
319     %0(p0) = COPY $x0
320     %1(s64) = COPY $d1
321     G_STORE  %1, %0 :: (store 8 into %ir.addr)
326 name:            store_s32_fpr
327 legalized:       true
328 regBankSelected: true
330 registers:
331   - { id: 0, class: gpr }
332   - { id: 1, class: fpr }
334 body:             |
335   bb.0:
336     liveins: $x0, $s1
338     ; CHECK-LABEL: name: store_s32_fpr
339     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
340     ; CHECK: [[COPY1:%[0-9]+]]:fpr32 = COPY $s1
341     ; CHECK: STRSui [[COPY1]], [[COPY]], 0 :: (store 4 into %ir.addr)
342     %0(p0) = COPY $x0
343     %1(s32) = COPY $s1
344     G_STORE  %1, %0 :: (store 4 into %ir.addr)
349 name:            store_gep_8_s64_fpr
350 legalized:       true
351 regBankSelected: true
353 registers:
354   - { id: 0, class: gpr }
355   - { id: 1, class: fpr }
356   - { id: 2, class: gpr }
357   - { id: 3, class: gpr }
359 body:             |
360   bb.0:
361     liveins: $x0, $d1
363     ; CHECK-LABEL: name: store_gep_8_s64_fpr
364     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
365     ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
366     ; CHECK: STRDui [[COPY1]], [[COPY]], 1 :: (store 8 into %ir.addr)
367     %0(p0) = COPY $x0
368     %1(s64) = COPY $d1
369     %2(s64) = G_CONSTANT i64 8
370     %3(p0) = G_GEP %0, %2
371     G_STORE %1, %3 :: (store 8 into %ir.addr)
375 name:            store_gep_8_s32_fpr
376 legalized:       true
377 regBankSelected: true
379 registers:
380   - { id: 0, class: gpr }
381   - { id: 1, class: fpr }
382   - { id: 2, class: gpr }
383   - { id: 3, class: gpr }
385 body:             |
386   bb.0:
387     liveins: $x0, $s1
389     ; CHECK-LABEL: name: store_gep_8_s32_fpr
390     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
391     ; CHECK: [[COPY1:%[0-9]+]]:fpr32 = COPY $s1
392     ; CHECK: STRSui [[COPY1]], [[COPY]], 2 :: (store 4 into %ir.addr)
393     %0(p0) = COPY $x0
394     %1(s32) = COPY $s1
395     %2(s64) = G_CONSTANT i64 8
396     %3(p0) = G_GEP %0, %2
397     G_STORE %1, %3 :: (store 4 into %ir.addr)
400 name:            store_v2s32
401 legalized:       true
402 regBankSelected: true
404 registers:
405   - { id: 0, class: gpr }
406   - { id: 1, class: fpr }
408 body:             |
409   bb.0:
410     liveins: $x0, $d1
412     ; CHECK-LABEL: name: store_v2s32
413     ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
414     ; CHECK: [[COPY1:%[0-9]+]]:fpr64 = COPY $d1
415     ; CHECK: STRDui [[COPY1]], [[COPY]], 0 :: (store 8 into %ir.addr)
416     %0(p0) = COPY $x0
417     %1(<2 x s32>) = COPY $d1
418     G_STORE  %1, %0 :: (store 8 into %ir.addr)