xref: /llvm-project/llvm/test/CodeGen/AMDGPU/si-fold-aligned-vgprs.mir (revision e7900e695e7dfb36be8651d914a31f42a5d6c634)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx908 -run-pass=si-fold-operands -verify-machineinstrs -o - %s | FileCheck --check-prefix=GFX908 %s
3# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -run-pass=si-fold-operands -verify-machineinstrs -o - %s | FileCheck --check-prefix=GFX90A %s
4
5# Should fold all copies for gfx908. In case of gfx90a, the folding must happen only for the aligned cases.
6
7---
8name:            aligned_vgpr_64
9tracksRegLiveness: true
10body:             |
11  bb.0:
12    liveins: $vgpr0_vgpr1
13    ; GFX908-LABEL: name: aligned_vgpr_64
14    ; GFX908: liveins: $vgpr0_vgpr1
15    ; GFX908-NEXT: {{  $}}
16    ; GFX908-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
17    ; GFX908-NEXT: [[DEF:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF
18    ; GFX908-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]], 0, 0, implicit $exec
19    ;
20    ; GFX90A-LABEL: name: aligned_vgpr_64
21    ; GFX90A: liveins: $vgpr0_vgpr1
22    ; GFX90A-NEXT: {{  $}}
23    ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
24    ; GFX90A-NEXT: [[DEF:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF
25    ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]], 0, 0, implicit $exec
26    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
27    %1:vreg_64_align2 = IMPLICIT_DEF
28    %2:vreg_64_align2 = COPY killed %1
29    GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec
30...
31
32---
33name:            unaligned_vgpr_64
34tracksRegLiveness: true
35body:             |
36  bb.0:
37    liveins: $vgpr0_vgpr1
38    ; GFX908-LABEL: name: unaligned_vgpr_64
39    ; GFX908: liveins: $vgpr0_vgpr1
40    ; GFX908-NEXT: {{  $}}
41    ; GFX908-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
42    ; GFX908-NEXT: [[DEF:%[0-9]+]]:vreg_64 = IMPLICIT_DEF
43    ; GFX908-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]], 0, 0, implicit $exec
44    ;
45    ; GFX90A-LABEL: name: unaligned_vgpr_64
46    ; GFX90A: liveins: $vgpr0_vgpr1
47    ; GFX90A-NEXT: {{  $}}
48    ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
49    ; GFX90A-NEXT: [[DEF:%[0-9]+]]:vreg_64 = IMPLICIT_DEF
50    ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vreg_64_align2 = COPY killed [[DEF]]
51    ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec
52    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
53    %1:vreg_64 = IMPLICIT_DEF
54    %2:vreg_64_align2 = COPY killed %1
55    GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec
56...
57
58---
59name:            aligned_vgpr_96_sub0_subg1
60tracksRegLiveness: true
61body:             |
62  bb.0:
63    liveins: $vgpr0_vgpr1
64    ; GFX908-LABEL: name: aligned_vgpr_96_sub0_subg1
65    ; GFX908: liveins: $vgpr0_vgpr1
66    ; GFX908-NEXT: {{  $}}
67    ; GFX908-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
68    ; GFX908-NEXT: [[DEF:%[0-9]+]]:vreg_96_align2 = IMPLICIT_DEF
69    ; GFX908-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]].sub0_sub1, 0, 0, implicit $exec
70    ;
71    ; GFX90A-LABEL: name: aligned_vgpr_96_sub0_subg1
72    ; GFX90A: liveins: $vgpr0_vgpr1
73    ; GFX90A-NEXT: {{  $}}
74    ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
75    ; GFX90A-NEXT: [[DEF:%[0-9]+]]:vreg_96_align2 = IMPLICIT_DEF
76    ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]].sub0_sub1, 0, 0, implicit $exec
77    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
78    %1:vreg_96_align2 = IMPLICIT_DEF
79    %2:vreg_64_align2 = COPY killed %1.sub0_sub1:vreg_96_align2
80    GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec
81...
82
83---
84name:            unaligned_vgpr_96_sub1_sub2
85tracksRegLiveness: true
86body:             |
87  bb.0:
88    liveins: $vgpr0_vgpr1
89    ; GFX908-LABEL: name: unaligned_vgpr_96_sub1_sub2
90    ; GFX908: liveins: $vgpr0_vgpr1
91    ; GFX908-NEXT: {{  $}}
92    ; GFX908-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
93    ; GFX908-NEXT: [[DEF:%[0-9]+]]:vreg_96_align2 = IMPLICIT_DEF
94    ; GFX908-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]].sub1_sub2, 0, 0, implicit $exec
95    ;
96    ; GFX90A-LABEL: name: unaligned_vgpr_96_sub1_sub2
97    ; GFX90A: liveins: $vgpr0_vgpr1
98    ; GFX90A-NEXT: {{  $}}
99    ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
100    ; GFX90A-NEXT: [[DEF:%[0-9]+]]:vreg_96_align2 = IMPLICIT_DEF
101    ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vreg_64_align2 = COPY killed [[DEF]].sub1_sub2
102    ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec
103    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
104    %1:vreg_96_align2 = IMPLICIT_DEF
105    %2:vreg_64_align2 = COPY killed %1.sub1_sub2:vreg_96_align2
106    GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec
107...
108
109---
110name:            aligned_vgpr_96
111tracksRegLiveness: true
112body:             |
113  bb.0:
114    liveins: $vgpr0_vgpr1
115    ; GFX908-LABEL: name: aligned_vgpr_96
116    ; GFX908: liveins: $vgpr0_vgpr1
117    ; GFX908-NEXT: {{  $}}
118    ; GFX908-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
119    ; GFX908-NEXT: [[DEF:%[0-9]+]]:vreg_96_align2 = IMPLICIT_DEF
120    ; GFX908-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[DEF]], 0, 0, implicit $exec
121    ;
122    ; GFX90A-LABEL: name: aligned_vgpr_96
123    ; GFX90A: liveins: $vgpr0_vgpr1
124    ; GFX90A-NEXT: {{  $}}
125    ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
126    ; GFX90A-NEXT: [[DEF:%[0-9]+]]:vreg_96_align2 = IMPLICIT_DEF
127    ; GFX90A-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[DEF]], 0, 0, implicit $exec
128    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
129    %1:vreg_96_align2 = IMPLICIT_DEF
130    %2:vreg_96_align2 = COPY killed %1
131    GLOBAL_STORE_DWORDX3 %0, %2, 0, 0, implicit $exec
132...
133
134---
135name:            unaligned_vgpr_96
136tracksRegLiveness: true
137body:             |
138  bb.0:
139    liveins: $vgpr0_vgpr1
140    ; GFX908-LABEL: name: unaligned_vgpr_96
141    ; GFX908: liveins: $vgpr0_vgpr1
142    ; GFX908-NEXT: {{  $}}
143    ; GFX908-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
144    ; GFX908-NEXT: [[DEF:%[0-9]+]]:vreg_96 = IMPLICIT_DEF
145    ; GFX908-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[DEF]], 0, 0, implicit $exec
146    ;
147    ; GFX90A-LABEL: name: unaligned_vgpr_96
148    ; GFX90A: liveins: $vgpr0_vgpr1
149    ; GFX90A-NEXT: {{  $}}
150    ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
151    ; GFX90A-NEXT: [[DEF:%[0-9]+]]:vreg_96 = IMPLICIT_DEF
152    ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vreg_96_align2 = COPY killed [[DEF]]
153    ; GFX90A-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec
154    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
155    %1:vreg_96 = IMPLICIT_DEF
156    %2:vreg_96_align2 = COPY killed %1
157    GLOBAL_STORE_DWORDX3 %0, %2, 0, 0, implicit $exec
158...
159
160---
161name:            aligned_vgpr_128_sub0_sub1
162tracksRegLiveness: true
163body:             |
164  bb.0:
165    liveins: $vgpr0_vgpr1
166    ; GFX908-LABEL: name: aligned_vgpr_128_sub0_sub1
167    ; GFX908: liveins: $vgpr0_vgpr1
168    ; GFX908-NEXT: {{  $}}
169    ; GFX908-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
170    ; GFX908-NEXT: [[DEF:%[0-9]+]]:vreg_128_align2 = IMPLICIT_DEF
171    ; GFX908-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]].sub0_sub1, 0, 0, implicit $exec
172    ;
173    ; GFX90A-LABEL: name: aligned_vgpr_128_sub0_sub1
174    ; GFX90A: liveins: $vgpr0_vgpr1
175    ; GFX90A-NEXT: {{  $}}
176    ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
177    ; GFX90A-NEXT: [[DEF:%[0-9]+]]:vreg_128_align2 = IMPLICIT_DEF
178    ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]].sub0_sub1, 0, 0, implicit $exec
179    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
180    %1:vreg_128_align2 = IMPLICIT_DEF
181    %2:vreg_64_align2 = COPY killed %1.sub0_sub1:vreg_128_align2
182    GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec
183...
184
185---
186name:            aligned_vgpr_128_sub2_sub3
187tracksRegLiveness: true
188body:             |
189  bb.0:
190    liveins: $vgpr0_vgpr1
191    ; GFX908-LABEL: name: aligned_vgpr_128_sub2_sub3
192    ; GFX908: liveins: $vgpr0_vgpr1
193    ; GFX908-NEXT: {{  $}}
194    ; GFX908-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
195    ; GFX908-NEXT: [[DEF:%[0-9]+]]:vreg_128_align2 = IMPLICIT_DEF
196    ; GFX908-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]].sub2_sub3, 0, 0, implicit $exec
197    ;
198    ; GFX90A-LABEL: name: aligned_vgpr_128_sub2_sub3
199    ; GFX90A: liveins: $vgpr0_vgpr1
200    ; GFX90A-NEXT: {{  $}}
201    ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
202    ; GFX90A-NEXT: [[DEF:%[0-9]+]]:vreg_128_align2 = IMPLICIT_DEF
203    ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]].sub2_sub3, 0, 0, implicit $exec
204    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
205    %1:vreg_128_align2 = IMPLICIT_DEF
206    %2:vreg_64_align2 = COPY killed %1.sub2_sub3:vreg_128_align2
207    GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec
208...
209
210---
211name:            unaligned_vgpr_128_sub1_sub2
212tracksRegLiveness: true
213body:             |
214  bb.0:
215    liveins: $vgpr0_vgpr1
216    ; GFX908-LABEL: name: unaligned_vgpr_128_sub1_sub2
217    ; GFX908: liveins: $vgpr0_vgpr1
218    ; GFX908-NEXT: {{  $}}
219    ; GFX908-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
220    ; GFX908-NEXT: [[DEF:%[0-9]+]]:vreg_128_align2 = IMPLICIT_DEF
221    ; GFX908-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[DEF]].sub1_sub2, 0, 0, implicit $exec
222    ;
223    ; GFX90A-LABEL: name: unaligned_vgpr_128_sub1_sub2
224    ; GFX90A: liveins: $vgpr0_vgpr1
225    ; GFX90A-NEXT: {{  $}}
226    ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
227    ; GFX90A-NEXT: [[DEF:%[0-9]+]]:vreg_128_align2 = IMPLICIT_DEF
228    ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vreg_64_align2 = COPY killed [[DEF]].sub1_sub2
229    ; GFX90A-NEXT: GLOBAL_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec
230    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
231    %1:vreg_128_align2 = IMPLICIT_DEF
232    %2:vreg_64_align2 = COPY killed %1.sub1_sub2:vreg_128_align2
233    GLOBAL_STORE_DWORDX2 %0, %2, 0, 0, implicit $exec
234...
235
236---
237name:            aligned_vgpr_128_sub0_sub1_sub2
238tracksRegLiveness: true
239body:             |
240  bb.0:
241    liveins: $vgpr0_vgpr1
242    ; GFX908-LABEL: name: aligned_vgpr_128_sub0_sub1_sub2
243    ; GFX908: liveins: $vgpr0_vgpr1
244    ; GFX908-NEXT: {{  $}}
245    ; GFX908-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
246    ; GFX908-NEXT: [[DEF:%[0-9]+]]:vreg_128_align2 = IMPLICIT_DEF
247    ; GFX908-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[DEF]].sub0_sub1_sub2, 0, 0, implicit $exec
248    ;
249    ; GFX90A-LABEL: name: aligned_vgpr_128_sub0_sub1_sub2
250    ; GFX90A: liveins: $vgpr0_vgpr1
251    ; GFX90A-NEXT: {{  $}}
252    ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
253    ; GFX90A-NEXT: [[DEF:%[0-9]+]]:vreg_128_align2 = IMPLICIT_DEF
254    ; GFX90A-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[DEF]].sub0_sub1_sub2, 0, 0, implicit $exec
255    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
256    %1:vreg_128_align2 = IMPLICIT_DEF
257    %2:vreg_96_align2 = COPY killed %1.sub0_sub1_sub2:vreg_128_align2
258    GLOBAL_STORE_DWORDX3 %0, %2, 0, 0, implicit $exec
259...
260
261---
262name:            unaligned_vgpr_128_sub1_sub2_sub3
263tracksRegLiveness: true
264body:             |
265  bb.0:
266    liveins: $vgpr0_vgpr1
267    ; GFX908-LABEL: name: unaligned_vgpr_128_sub1_sub2_sub3
268    ; GFX908: liveins: $vgpr0_vgpr1
269    ; GFX908-NEXT: {{  $}}
270    ; GFX908-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
271    ; GFX908-NEXT: [[DEF:%[0-9]+]]:vreg_128_align2 = IMPLICIT_DEF
272    ; GFX908-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[DEF]].sub1_sub2_sub3, 0, 0, implicit $exec
273    ;
274    ; GFX90A-LABEL: name: unaligned_vgpr_128_sub1_sub2_sub3
275    ; GFX90A: liveins: $vgpr0_vgpr1
276    ; GFX90A-NEXT: {{  $}}
277    ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
278    ; GFX90A-NEXT: [[DEF:%[0-9]+]]:vreg_128_align2 = IMPLICIT_DEF
279    ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vreg_96_align2 = COPY killed [[DEF]].sub1_sub2_sub3
280    ; GFX90A-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec
281    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
282    %1:vreg_128_align2 = IMPLICIT_DEF
283    %2:vreg_96_align2 = COPY killed %1.sub1_sub2_sub3:vreg_128_align2
284    GLOBAL_STORE_DWORDX3 %0, %2, 0, 0, implicit $exec
285...
286
287---
288name:            aligned_vgpr_128
289tracksRegLiveness: true
290body:             |
291  bb.0:
292    liveins: $vgpr0_vgpr1
293    ; GFX908-LABEL: name: aligned_vgpr_128
294    ; GFX908: liveins: $vgpr0_vgpr1
295    ; GFX908-NEXT: {{  $}}
296    ; GFX908-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
297    ; GFX908-NEXT: [[DEF:%[0-9]+]]:vreg_128_align2 = IMPLICIT_DEF
298    ; GFX908-NEXT: GLOBAL_STORE_DWORDX4 [[COPY]], [[DEF]], 0, 0, implicit $exec
299    ;
300    ; GFX90A-LABEL: name: aligned_vgpr_128
301    ; GFX90A: liveins: $vgpr0_vgpr1
302    ; GFX90A-NEXT: {{  $}}
303    ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
304    ; GFX90A-NEXT: [[DEF:%[0-9]+]]:vreg_128_align2 = IMPLICIT_DEF
305    ; GFX90A-NEXT: GLOBAL_STORE_DWORDX4 [[COPY]], [[DEF]], 0, 0, implicit $exec
306    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
307    %1:vreg_128_align2 = IMPLICIT_DEF
308    %2:vreg_128_align2 = COPY killed %1
309    GLOBAL_STORE_DWORDX4 %0, %2, 0, 0, implicit $exec
310...
311
312---
313name:            unaligned_vgpr_128
314tracksRegLiveness: true
315body:             |
316  bb.0:
317    liveins: $vgpr0_vgpr1
318    ; GFX908-LABEL: name: unaligned_vgpr_128
319    ; GFX908: liveins: $vgpr0_vgpr1
320    ; GFX908-NEXT: {{  $}}
321    ; GFX908-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
322    ; GFX908-NEXT: [[DEF:%[0-9]+]]:vreg_128 = IMPLICIT_DEF
323    ; GFX908-NEXT: GLOBAL_STORE_DWORDX4 [[COPY]], [[DEF]], 0, 0, implicit $exec
324    ;
325    ; GFX90A-LABEL: name: unaligned_vgpr_128
326    ; GFX90A: liveins: $vgpr0_vgpr1
327    ; GFX90A-NEXT: {{  $}}
328    ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vreg_64_align2 = COPY $vgpr0_vgpr1
329    ; GFX90A-NEXT: [[DEF:%[0-9]+]]:vreg_128 = IMPLICIT_DEF
330    ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vreg_128_align2 = COPY killed [[DEF]]
331    ; GFX90A-NEXT: GLOBAL_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec
332    %0:vreg_64_align2 = COPY $vgpr0_vgpr1
333    %1:vreg_128 = IMPLICIT_DEF
334    %2:vreg_128_align2 = COPY killed %1
335    GLOBAL_STORE_DWORDX4 %0, %2, 0, 0, implicit $exec
336...
337