[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / spillfill-sve.mir
blob10fbb2499b48a5c2e506abb015fb4bda672cf734
1 # RUN: llc -mtriple=aarch64-linux-gnu -run-pass=greedy %s -o - | FileCheck %s
2 # RUN: llc -mtriple=aarch64-linux-gnu -start-before=greedy -stop-after=aarch64-expand-pseudo %s -o - | FileCheck %s --check-prefix=EXPAND
3 --- |
4   ; ModuleID = '<stdin>'
5   source_filename = "<stdin>"
6   target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
7   target triple = "aarch64--linux-gnu"
9   define aarch64_sve_vector_pcs void @spills_fills_stack_id_ppr() #0 { entry: unreachable }
10   define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr() #0 { entry: unreachable }
11   define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr2() #0 { entry: unreachable }
12   define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr2strided() #0 { entry: unreachable }
13   define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr3() #0 { entry: unreachable }
14   define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr4() #0 { entry: unreachable }
15   define aarch64_sve_vector_pcs void @spills_fills_stack_id_zpr4strided() #0 { entry: unreachable }
17   attributes #0 = { nounwind "target-features"="+sve" }
19 ...
20 ---
21 name: spills_fills_stack_id_ppr
22 tracksRegLiveness: true
23 registers:
24   - { id: 0, class: ppr }
25 stack:
26 liveins:
27   - { reg: '$p0', virtual-reg: '%0' }
28 body:             |
29   bb.0.entry:
30     liveins: $p0
32     ; CHECK-LABEL: name: spills_fills_stack_id_ppr
33     ; CHECK: stack:
34     ; CHECK:      - { id: 0, name: '', type: spill-slot, offset: 0, size: 2, alignment: 2
35     ; CHECK-NEXT:     stack-id: scalable-vector, callee-saved-register: ''
37     ; EXPAND-LABEL: name: spills_fills_stack_id_ppr
38     ; EXPAND: STR_PXI $p0, $sp, 7
39     ; EXPAND: $p0 = LDR_PXI $sp, 7
41     %0:ppr = COPY $p0
43     $p0 = IMPLICIT_DEF
44     $p1 = IMPLICIT_DEF
45     $p2 = IMPLICIT_DEF
46     $p3 = IMPLICIT_DEF
47     $p4 = IMPLICIT_DEF
48     $p5 = IMPLICIT_DEF
49     $p6 = IMPLICIT_DEF
50     $p7 = IMPLICIT_DEF
51     $p8 = IMPLICIT_DEF
52     $p9 = IMPLICIT_DEF
53     $p10 = IMPLICIT_DEF
54     $p11 = IMPLICIT_DEF
55     $p12 = IMPLICIT_DEF
56     $p13 = IMPLICIT_DEF
57     $p14 = IMPLICIT_DEF
58     $p15 = IMPLICIT_DEF
60     $p0 = COPY %0
61     RET_ReallyLR
62 ...
63 ---
64 name: spills_fills_stack_id_zpr
65 tracksRegLiveness: true
66 registers:
67   - { id: 0, class: zpr }
68 stack:
69 liveins:
70   - { reg: '$z0', virtual-reg: '%0' }
71 body:             |
72   bb.0.entry:
73     liveins: $z0
75     ; CHECK-LABEL: name: spills_fills_stack_id_zpr
76     ; CHECK: stack:
77     ; CHECK:      - { id: 0, name: '', type: spill-slot, offset: 0, size: 16, alignment: 16
78     ; CHECK-NEXT:     stack-id: scalable-vector, callee-saved-register: ''
80     ; EXPAND-LABEL: name: spills_fills_stack_id_zpr
81     ; EXPAND: STR_ZXI $z0, $sp, 0
82     ; EXPAND: $z0 = LDR_ZXI $sp, 0
84     %0:zpr = COPY $z0
86     $z0_z1_z2_z3     = IMPLICIT_DEF
87     $z4_z5_z6_z7     = IMPLICIT_DEF
88     $z8_z9_z10_z11   = IMPLICIT_DEF
89     $z12_z13_z14_z15 = IMPLICIT_DEF
90     $z16_z17_z18_z19 = IMPLICIT_DEF
91     $z20_z21_z22_z23 = IMPLICIT_DEF
92     $z24_z25_z26_z27 = IMPLICIT_DEF
93     $z28_z29_z30_z31 = IMPLICIT_DEF
95     $z0 = COPY %0
96     RET_ReallyLR
97 ...
98 ---
99 name: spills_fills_stack_id_zpr2
100 tracksRegLiveness: true
101 registers:
102   - { id: 0, class: zpr2 }
103 stack:
104 liveins:
105   - { reg: '$z0_z1', virtual-reg: '%0' }
106 body:             |
107   bb.0.entry:
108     liveins: $z0_z1
110     ; CHECK-LABEL: name: spills_fills_stack_id_zpr2
111     ; CHECK: stack:
112     ; CHECK:      - { id: 0, name: '', type: spill-slot, offset: 0, size: 32, alignment: 16
113     ; CHECK-NEXT:     stack-id: scalable-vector
115     ; EXPAND-LABEL: name: spills_fills_stack_id_zpr2
116     ; EXPAND: STR_ZXI $z0, $sp, 0
117     ; EXPAND: STR_ZXI $z1, $sp, 1
118     ; EXPAND: $z0 = LDR_ZXI $sp, 0
119     ; EXPAND: $z1 = LDR_ZXI $sp, 1
121     %0:zpr2 = COPY $z0_z1
123     $z0_z1_z2_z3     = IMPLICIT_DEF
124     $z4_z5_z6_z7     = IMPLICIT_DEF
125     $z8_z9_z10_z11   = IMPLICIT_DEF
126     $z12_z13_z14_z15 = IMPLICIT_DEF
127     $z16_z17_z18_z19 = IMPLICIT_DEF
128     $z20_z21_z22_z23 = IMPLICIT_DEF
129     $z24_z25_z26_z27 = IMPLICIT_DEF
130     $z28_z29_z30_z31 = IMPLICIT_DEF
132     $z0_z1 = COPY %0
133     RET_ReallyLR
136 name: spills_fills_stack_id_zpr2strided
137 tracksRegLiveness: true
138 registers:
139   - { id: 0, class: zpr2strided }
140 stack:
141 liveins:
142   - { reg: '$z0_z8', virtual-reg: '%0' }
143 body:             |
144   bb.0.entry:
145     liveins: $z0_z1
146     successors: %bb.1
148     $z0_z8 = COPY $z0_z1
150     B %bb.1
152   bb.1:
153     liveins: $z0_z8
155     ; CHECK-LABEL: name: spills_fills_stack_id_zpr2strided
156     ; CHECK: stack:
157     ; CHECK:      - { id: 0, name: '', type: spill-slot, offset: 0, size: 32, alignment: 16
158     ; CHECK-NEXT:     stack-id: scalable-vector
160     ; EXPAND-LABEL: name: spills_fills_stack_id_zpr2strided
161     ; EXPAND: STR_ZXI $z0, $sp, 0
162     ; EXPAND: STR_ZXI $z8, $sp, 1
163     ; EXPAND: $z0 = LDR_ZXI $sp, 0
164     ; EXPAND: $z8 = LDR_ZXI $sp, 1
166     %0:zpr2strided = COPY $z0_z8
168     $z0_z1_z2_z3     = IMPLICIT_DEF
169     $z4_z5_z6_z7     = IMPLICIT_DEF
170     $z8_z9_z10_z11   = IMPLICIT_DEF
171     $z12_z13_z14_z15 = IMPLICIT_DEF
172     $z16_z17_z18_z19 = IMPLICIT_DEF
173     $z20_z21_z22_z23 = IMPLICIT_DEF
174     $z24_z25_z26_z27 = IMPLICIT_DEF
175     $z28_z29_z30_z31 = IMPLICIT_DEF
177     $z0_z8 = COPY %0
178     RET_ReallyLR
181 name: spills_fills_stack_id_zpr3
182 tracksRegLiveness: true
183 registers:
184   - { id: 0, class: zpr3 }
185 stack:
186 liveins:
187   - { reg: '$z0_z1_z2', virtual-reg: '%0' }
188 body:             |
189   bb.0.entry:
190     liveins: $z0_z1_z2
192     ; CHECK-LABEL: name: spills_fills_stack_id_zpr3
193     ; CHECK: stack:
194     ; CHECK:      - { id: 0, name: '', type: spill-slot, offset: 0, size: 48, alignment: 16
195     ; CHECK-NEXT:     stack-id: scalable-vector
197     ; EXPAND-LABEL: name: spills_fills_stack_id_zpr3
198     ; EXPAND: STR_ZXI $z0, $sp, 0
199     ; EXPAND: STR_ZXI $z1, $sp, 1
200     ; EXPAND: STR_ZXI $z2, $sp, 2
201     ; EXPAND: $z0 = LDR_ZXI $sp, 0
202     ; EXPAND: $z1 = LDR_ZXI $sp, 1
203     ; EXPAND: $z2 = LDR_ZXI $sp, 2
205     %0:zpr3 = COPY $z0_z1_z2
207     $z0_z1_z2_z3     = IMPLICIT_DEF
208     $z4_z5_z6_z7     = IMPLICIT_DEF
209     $z8_z9_z10_z11   = IMPLICIT_DEF
210     $z12_z13_z14_z15 = IMPLICIT_DEF
211     $z16_z17_z18_z19 = IMPLICIT_DEF
212     $z20_z21_z22_z23 = IMPLICIT_DEF
213     $z24_z25_z26_z27 = IMPLICIT_DEF
214     $z28_z29_z30_z31 = IMPLICIT_DEF
216     $z0_z1_z2 = COPY %0
217     RET_ReallyLR
220 name: spills_fills_stack_id_zpr4
221 tracksRegLiveness: true
222 registers:
223   - { id: 0, class: zpr4 }
224 stack:
225 liveins:
226   - { reg: '$z0_z1_z2_z3', virtual-reg: '%0' }
227 body:             |
228   bb.0.entry:
229     liveins: $z0_z1_z2_z3
231     ; CHECK-LABEL: name: spills_fills_stack_id_zpr4
232     ; CHECK: stack:
233     ; CHECK:      - { id: 0, name: '', type: spill-slot, offset: 0, size: 64, alignment: 16
234     ; CHECK-NEXT:     stack-id: scalable-vector
236     ; EXPAND-LABEL: name: spills_fills_stack_id_zpr4
237     ; EXPAND: STR_ZXI $z0, $sp, 0
238     ; EXPAND: STR_ZXI $z1, $sp, 1
239     ; EXPAND: STR_ZXI $z2, $sp, 2
240     ; EXPAND: STR_ZXI $z3, $sp, 3
241     ; EXPAND: $z0 = LDR_ZXI $sp, 0
242     ; EXPAND: $z1 = LDR_ZXI $sp, 1
243     ; EXPAND: $z2 = LDR_ZXI $sp, 2
244     ; EXPAND: $z3 = LDR_ZXI $sp, 3
246     %0:zpr4 = COPY $z0_z1_z2_z3
248     $z0_z1_z2_z3     = IMPLICIT_DEF
249     $z4_z5_z6_z7     = IMPLICIT_DEF
250     $z8_z9_z10_z11   = IMPLICIT_DEF
251     $z12_z13_z14_z15 = IMPLICIT_DEF
252     $z16_z17_z18_z19 = IMPLICIT_DEF
253     $z20_z21_z22_z23 = IMPLICIT_DEF
254     $z24_z25_z26_z27 = IMPLICIT_DEF
255     $z28_z29_z30_z31 = IMPLICIT_DEF
257     $z0_z1_z2_z3 = COPY %0
258     RET_ReallyLR
261 name: spills_fills_stack_id_zpr4strided
262 tracksRegLiveness: true
263 registers:
264   - { id: 0, class: zpr4strided }
265 stack:
266 liveins:
267   - { reg: '$z0_z4_z8_z12', virtual-reg: '%0' }
268 body:             |
269   bb.0.entry:
270     liveins: $z0_z1_z2_z3
272     $z0_z4_z8_z12 = COPY $z0_z1_z2_z3
274     B %bb.1
276   bb.1:
277     liveins: $z0_z4_z8_z12
279     ; CHECK-LABEL: name: spills_fills_stack_id_zpr4strided
280     ; CHECK: stack:
281     ; CHECK:      - { id: 0, name: '', type: spill-slot, offset: 0, size: 64, alignment: 16
282     ; CHECK-NEXT:     stack-id: scalable-vector
284     ; EXPAND-LABEL: name: spills_fills_stack_id_zpr4strided
285     ; EXPAND: STR_ZXI $z0, $sp, 0
286     ; EXPAND: STR_ZXI $z4, $sp, 1
287     ; EXPAND: STR_ZXI $z8, $sp, 2
288     ; EXPAND: STR_ZXI $z12, $sp, 3
289     ; EXPAND: $z0 = LDR_ZXI $sp, 0
290     ; EXPAND: $z4 = LDR_ZXI $sp, 1
291     ; EXPAND: $z8 = LDR_ZXI $sp, 2
292     ; EXPAND: $z12 = LDR_ZXI $sp, 3
294     %0:zpr4strided = COPY $z0_z4_z8_z12
296     $z0_z1_z2_z3     = IMPLICIT_DEF
297     $z4_z5_z6_z7     = IMPLICIT_DEF
298     $z8_z9_z10_z11   = IMPLICIT_DEF
299     $z12_z13_z14_z15 = IMPLICIT_DEF
300     $z16_z17_z18_z19 = IMPLICIT_DEF
301     $z20_z21_z22_z23 = IMPLICIT_DEF
302     $z24_z25_z26_z27 = IMPLICIT_DEF
303     $z28_z29_z30_z31 = IMPLICIT_DEF
305     $z0_z4_z8_z12 = COPY %0
306     RET_ReallyLR