1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s
3# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX8 %s
4# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
5# RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s
6
7---
8
9name: store_flat_s32_to_4
10legalized:       true
11tracksRegLiveness: true
12regBankSelected: true
13
14body: |
15  bb.0:
16    liveins:  $vgpr0_vgpr1, $vgpr2
17
18    ; GFX7-LABEL: name: store_flat_s32_to_4
19    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
20    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
21    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
22    ; GFX7: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
23    ; GFX8-LABEL: name: store_flat_s32_to_4
24    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
25    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
26    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
27    ; GFX8: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
28    ; GFX9-LABEL: name: store_flat_s32_to_4
29    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
30    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
31    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
32    ; GFX9: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
33    ; GFX10-LABEL: name: store_flat_s32_to_4
34    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
35    ; GFX10: $vcc_hi = IMPLICIT_DEF
36    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
37    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
38    ; GFX10: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
39    %0:vgpr(p1) = COPY $vgpr0_vgpr1
40    %1:vgpr(s32) = COPY $vgpr2
41    G_STORE %1, %0 :: (store 4, align 4, addrspace 0)
42
43...
44
45---
46name: store_flat_s32_to_2
47legalized:       true
48tracksRegLiveness: true
49regBankSelected: true
50
51body: |
52  bb.0:
53    liveins:  $vgpr0_vgpr1, $vgpr2
54
55    ; GFX7-LABEL: name: store_flat_s32_to_2
56    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
57    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
58    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
59    ; GFX7: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 2)
60    ; GFX8-LABEL: name: store_flat_s32_to_2
61    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
62    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
63    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
64    ; GFX8: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 2)
65    ; GFX9-LABEL: name: store_flat_s32_to_2
66    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
67    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
68    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
69    ; GFX9: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 2)
70    ; GFX10-LABEL: name: store_flat_s32_to_2
71    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
72    ; GFX10: $vcc_hi = IMPLICIT_DEF
73    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
74    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
75    ; GFX10: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 2)
76    %0:vgpr(p1) = COPY $vgpr0_vgpr1
77    %1:vgpr(s32) = COPY $vgpr2
78    G_STORE %1, %0 :: (store 2, align 2, addrspace 0)
79
80...
81
82---
83name: store_flat_s32_to_1
84legalized:       true
85tracksRegLiveness: true
86regBankSelected: true
87
88body: |
89  bb.0:
90    liveins:  $vgpr0_vgpr1, $vgpr2
91
92    ; GFX7-LABEL: name: store_flat_s32_to_1
93    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
94    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
95    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
96    ; GFX7: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 1)
97    ; GFX8-LABEL: name: store_flat_s32_to_1
98    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
99    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
100    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
101    ; GFX8: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 1)
102    ; GFX9-LABEL: name: store_flat_s32_to_1
103    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
104    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
105    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
106    ; GFX9: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 1)
107    ; GFX10-LABEL: name: store_flat_s32_to_1
108    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
109    ; GFX10: $vcc_hi = IMPLICIT_DEF
110    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
111    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
112    ; GFX10: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 1)
113    %0:vgpr(p1) = COPY $vgpr0_vgpr1
114    %1:vgpr(s32) = COPY $vgpr2
115    G_STORE %1, %0 :: (store 1, align 1, addrspace 0)
116
117...
118
119---
120
121name: store_flat_s64
122legalized:       true
123tracksRegLiveness: true
124regBankSelected: true
125
126body: |
127  bb.0:
128    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
129
130    ; GFX7-LABEL: name: store_flat_s64
131    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
132    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
133    ; GFX7: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
134    ; GFX7: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
135    ; GFX8-LABEL: name: store_flat_s64
136    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
137    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
138    ; GFX8: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
139    ; GFX8: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
140    ; GFX9-LABEL: name: store_flat_s64
141    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
142    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
143    ; GFX9: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
144    ; GFX9: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
145    ; GFX10-LABEL: name: store_flat_s64
146    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
147    ; GFX10: $vcc_hi = IMPLICIT_DEF
148    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
149    ; GFX10: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
150    ; GFX10: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
151    %0:vgpr(p1) = COPY $vgpr0_vgpr1
152    %1:vgpr(s64) = COPY $vgpr2_vgpr3
153    G_STORE %1, %0 :: (store 8, align 8, addrspace 0)
154
155...
156---
157
158name: store_flat_s96
159legalized:       true
160tracksRegLiveness: true
161regBankSelected: true
162
163body: |
164  bb.0:
165    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
166
167    ; GFX7-LABEL: name: store_flat_s96
168    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
169    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
170    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
171    ; GFX7: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store 12, align 16)
172    ; GFX8-LABEL: name: store_flat_s96
173    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
174    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
175    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
176    ; GFX8: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store 12, align 16)
177    ; GFX9-LABEL: name: store_flat_s96
178    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
179    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
180    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
181    ; GFX9: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store 12, align 16)
182    ; GFX10-LABEL: name: store_flat_s96
183    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
184    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
185    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
186    ; GFX10: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store 12, align 16)
187    %0:vgpr(p1) = COPY $vgpr0_vgpr1
188    %1:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
189    G_STORE %1, %0 :: (store 12, align 16, addrspace 0)
190
191...
192---
193
194name: store_flat_s128
195legalized:       true
196tracksRegLiveness: true
197regBankSelected: true
198
199body: |
200  bb.0:
201    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
202
203    ; GFX7-LABEL: name: store_flat_s128
204    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
205    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
206    ; GFX7: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
207    ; GFX7: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
208    ; GFX8-LABEL: name: store_flat_s128
209    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
210    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
211    ; GFX8: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
212    ; GFX8: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
213    ; GFX9-LABEL: name: store_flat_s128
214    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
215    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
216    ; GFX9: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
217    ; GFX9: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
218    ; GFX10-LABEL: name: store_flat_s128
219    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
220    ; GFX10: $vcc_hi = IMPLICIT_DEF
221    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
222    ; GFX10: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
223    ; GFX10: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
224    %0:vgpr(p1) = COPY $vgpr0_vgpr1
225    %1:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
226    G_STORE %1, %0 :: (store 16, align 16, addrspace 0)
227
228...
229
230---
231
232name: store_flat_v2s32
233legalized:       true
234tracksRegLiveness: true
235regBankSelected: true
236
237body: |
238  bb.0:
239    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
240
241    ; GFX7-LABEL: name: store_flat_v2s32
242    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
243    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
244    ; GFX7: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
245    ; GFX7: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
246    ; GFX8-LABEL: name: store_flat_v2s32
247    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
248    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
249    ; GFX8: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
250    ; GFX8: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
251    ; GFX9-LABEL: name: store_flat_v2s32
252    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
253    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
254    ; GFX9: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
255    ; GFX9: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
256    ; GFX10-LABEL: name: store_flat_v2s32
257    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
258    ; GFX10: $vcc_hi = IMPLICIT_DEF
259    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
260    ; GFX10: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
261    ; GFX10: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
262    %0:vgpr(p1) = COPY $vgpr0_vgpr1
263    %1:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
264    G_STORE %1, %0 :: (store 8, align 8, addrspace 0)
265
266...
267---
268
269name: store_flat_v3s32
270legalized:       true
271tracksRegLiveness: true
272regBankSelected: true
273
274body: |
275  bb.0:
276    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
277
278    ; GFX7-LABEL: name: store_flat_v3s32
279    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
280    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
281    ; GFX7: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
282    ; GFX7: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 12, align 16)
283    ; GFX8-LABEL: name: store_flat_v3s32
284    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
285    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
286    ; GFX8: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
287    ; GFX8: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 12, align 16)
288    ; GFX9-LABEL: name: store_flat_v3s32
289    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
290    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
291    ; GFX9: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
292    ; GFX9: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 12, align 16)
293    ; GFX10-LABEL: name: store_flat_v3s32
294    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
295    ; GFX10: $vcc_hi = IMPLICIT_DEF
296    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
297    ; GFX10: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
298    ; GFX10: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 12, align 16)
299    %0:vgpr(p1) = COPY $vgpr0_vgpr1
300    %1:vgpr(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
301    G_STORE %1, %0 :: (store 12, align 16, addrspace 0)
302
303...
304---
305
306name: store_flat_v4s32
307legalized:       true
308tracksRegLiveness: true
309regBankSelected: true
310
311body: |
312  bb.0:
313    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
314
315    ; GFX7-LABEL: name: store_flat_v4s32
316    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
317    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
318    ; GFX7: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
319    ; GFX7: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
320    ; GFX8-LABEL: name: store_flat_v4s32
321    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
322    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
323    ; GFX8: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
324    ; GFX8: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
325    ; GFX9-LABEL: name: store_flat_v4s32
326    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
327    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
328    ; GFX9: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
329    ; GFX9: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
330    ; GFX10-LABEL: name: store_flat_v4s32
331    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
332    ; GFX10: $vcc_hi = IMPLICIT_DEF
333    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
334    ; GFX10: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
335    ; GFX10: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
336    %0:vgpr(p1) = COPY $vgpr0_vgpr1
337    %1:vgpr(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
338    G_STORE %1, %0 :: (store 16, align 16, addrspace 0)
339
340...
341
342---
343
344name: store_flat_v2s16
345legalized:       true
346tracksRegLiveness: true
347regBankSelected: true
348
349body: |
350  bb.0:
351    liveins:  $vgpr0_vgpr1, $vgpr2
352
353    ; GFX7-LABEL: name: store_flat_v2s16
354    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
355    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
356    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
357    ; GFX7: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
358    ; GFX8-LABEL: name: store_flat_v2s16
359    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
360    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
361    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
362    ; GFX8: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
363    ; GFX9-LABEL: name: store_flat_v2s16
364    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
365    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
366    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
367    ; GFX9: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
368    ; GFX10-LABEL: name: store_flat_v2s16
369    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
370    ; GFX10: $vcc_hi = IMPLICIT_DEF
371    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
372    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
373    ; GFX10: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
374    %0:vgpr(p1) = COPY $vgpr0_vgpr1
375    %1:vgpr(<2 x s16>) = COPY $vgpr2
376    G_STORE %1, %0 :: (store 4, align 4, addrspace 0)
377
378...
379
380---
381
382name: store_flat_v4s16
383legalized:       true
384tracksRegLiveness: true
385regBankSelected: true
386
387body: |
388  bb.0:
389    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
390
391    ; GFX7-LABEL: name: store_flat_v4s16
392    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
393    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
394    ; GFX7: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
395    ; GFX7: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
396    ; GFX8-LABEL: name: store_flat_v4s16
397    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
398    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
399    ; GFX8: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
400    ; GFX8: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
401    ; GFX9-LABEL: name: store_flat_v4s16
402    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
403    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
404    ; GFX9: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
405    ; GFX9: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
406    ; GFX10-LABEL: name: store_flat_v4s16
407    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
408    ; GFX10: $vcc_hi = IMPLICIT_DEF
409    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
410    ; GFX10: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
411    ; GFX10: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
412    %0:vgpr(p1) = COPY $vgpr0_vgpr1
413    %1:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
414    G_STORE %1, %0 :: (store 8, align 8, addrspace 0)
415
416...
417
418---
419
420name: store_flat_v6s16
421legalized:       true
422tracksRegLiveness: true
423regBankSelected: true
424
425body: |
426  bb.0:
427    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
428
429    ; GFX7-LABEL: name: store_flat_v6s16
430    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
431    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
432    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
433    ; GFX7: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store 12, align 16)
434    ; GFX8-LABEL: name: store_flat_v6s16
435    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
436    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
437    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
438    ; GFX8: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store 12, align 16)
439    ; GFX9-LABEL: name: store_flat_v6s16
440    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
441    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
442    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
443    ; GFX9: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store 12, align 16)
444    ; GFX10-LABEL: name: store_flat_v6s16
445    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
446    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
447    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
448    ; GFX10: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store 12, align 16)
449    %0:vgpr(p1) = COPY $vgpr0_vgpr1
450    %1:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
451    G_STORE %1, %0 :: (store 12, align 16, addrspace 0)
452
453...
454---
455
456name: store_flat_v8s16
457legalized:       true
458tracksRegLiveness: true
459regBankSelected: true
460
461body: |
462  bb.0:
463    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
464
465    ; GFX7-LABEL: name: store_flat_v8s16
466    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
467    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
468    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
469    ; GFX7: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store 16)
470    ; GFX8-LABEL: name: store_flat_v8s16
471    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
472    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
473    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
474    ; GFX8: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store 16)
475    ; GFX9-LABEL: name: store_flat_v8s16
476    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
477    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
478    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
479    ; GFX9: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store 16)
480    ; GFX10-LABEL: name: store_flat_v8s16
481    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
482    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
483    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
484    ; GFX10: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store 16)
485    %0:vgpr(p1) = COPY $vgpr0_vgpr1
486    %1:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
487    G_STORE %1, %0 :: (store 16, align 16, addrspace 0)
488
489...
490
491---
492
493name: store_flat_v2s64
494legalized:       true
495tracksRegLiveness: true
496regBankSelected: true
497
498body: |
499  bb.0:
500    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
501
502    ; GFX7-LABEL: name: store_flat_v2s64
503    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
504    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
505    ; GFX7: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
506    ; GFX7: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
507    ; GFX8-LABEL: name: store_flat_v2s64
508    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
509    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
510    ; GFX8: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
511    ; GFX8: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
512    ; GFX9-LABEL: name: store_flat_v2s64
513    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
514    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
515    ; GFX9: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
516    ; GFX9: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
517    ; GFX10-LABEL: name: store_flat_v2s64
518    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
519    ; GFX10: $vcc_hi = IMPLICIT_DEF
520    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
521    ; GFX10: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
522    ; GFX10: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
523    %0:vgpr(p1) = COPY $vgpr0_vgpr1
524    %1:vgpr(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
525    G_STORE %1, %0 :: (store 16, align 16, addrspace 0)
526
527...
528
529---
530
531name: store_flat_p1
532legalized:       true
533tracksRegLiveness: true
534regBankSelected: true
535
536body: |
537  bb.0:
538    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
539
540    ; GFX7-LABEL: name: store_flat_p1
541    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
542    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
543    ; GFX7: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
544    ; GFX7: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
545    ; GFX8-LABEL: name: store_flat_p1
546    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
547    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
548    ; GFX8: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
549    ; GFX8: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
550    ; GFX9-LABEL: name: store_flat_p1
551    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
552    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
553    ; GFX9: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
554    ; GFX9: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
555    ; GFX10-LABEL: name: store_flat_p1
556    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
557    ; GFX10: $vcc_hi = IMPLICIT_DEF
558    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
559    ; GFX10: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
560    ; GFX10: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
561    %0:vgpr(p1) = COPY $vgpr0_vgpr1
562    %1:vgpr(p1) = COPY $vgpr2_vgpr3
563    G_STORE %1, %0 :: (store 8, align 8, addrspace 0)
564
565...
566
567---
568
569name: store_flat_v2p1
570legalized:       true
571tracksRegLiveness: true
572regBankSelected: true
573
574body: |
575  bb.0:
576    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
577
578    ; GFX7-LABEL: name: store_flat_v2p1
579    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
580    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
581    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
582    ; GFX7: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store 16)
583    ; GFX8-LABEL: name: store_flat_v2p1
584    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
585    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
586    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
587    ; GFX8: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store 16)
588    ; GFX9-LABEL: name: store_flat_v2p1
589    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
590    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
591    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
592    ; GFX9: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store 16)
593    ; GFX10-LABEL: name: store_flat_v2p1
594    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
595    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
596    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
597    ; GFX10: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store 16)
598    %0:vgpr(p1) = COPY $vgpr0_vgpr1
599    %1:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
600    G_STORE %1, %0 :: (store 16, align 16, addrspace 0)
601
602...
603
604---
605
606name: store_flat_p3
607legalized:       true
608tracksRegLiveness: true
609regBankSelected: true
610
611body: |
612  bb.0:
613    liveins:  $vgpr0_vgpr1, $vgpr2
614
615    ; GFX7-LABEL: name: store_flat_p3
616    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
617    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
618    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
619    ; GFX7: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
620    ; GFX8-LABEL: name: store_flat_p3
621    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
622    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
623    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
624    ; GFX8: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
625    ; GFX9-LABEL: name: store_flat_p3
626    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
627    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
628    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
629    ; GFX9: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
630    ; GFX10-LABEL: name: store_flat_p3
631    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
632    ; GFX10: $vcc_hi = IMPLICIT_DEF
633    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
634    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
635    ; GFX10: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
636    %0:vgpr(p1) = COPY $vgpr0_vgpr1
637    %1:vgpr(p3) = COPY $vgpr2
638    G_STORE %1, %0 :: (store 4, align 4, addrspace 0)
639
640...
641
642---
643
644name: store_flat_v2p3
645legalized:       true
646tracksRegLiveness: true
647regBankSelected: true
648
649body: |
650  bb.0:
651    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
652
653    ; GFX7-LABEL: name: store_flat_v2p3
654    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
655    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
656    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
657    ; GFX7: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store 8)
658    ; GFX8-LABEL: name: store_flat_v2p3
659    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
660    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
661    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
662    ; GFX8: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store 8)
663    ; GFX9-LABEL: name: store_flat_v2p3
664    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
665    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
666    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
667    ; GFX9: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store 8)
668    ; GFX10-LABEL: name: store_flat_v2p3
669    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
670    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
671    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
672    ; GFX10: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store 8)
673    %0:vgpr(p1) = COPY $vgpr0_vgpr1
674    %1:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
675    G_STORE %1, %0 :: (store 8, align 8, addrspace 0)
676
677...
678---
679
680name: store_atomic_flat_s32
681legalized:       true
682tracksRegLiveness: true
683regBankSelected: true
684
685body: |
686  bb.0:
687    liveins:  $vgpr0_vgpr1, $vgpr2
688
689    ; GFX7-LABEL: name: store_atomic_flat_s32
690    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
691    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
692    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
693    ; GFX7: G_STORE [[COPY1]](s32), [[COPY]](p1) :: (store monotonic 4)
694    ; GFX8-LABEL: name: store_atomic_flat_s32
695    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
696    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
697    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
698    ; GFX8: G_STORE [[COPY1]](s32), [[COPY]](p1) :: (store monotonic 4)
699    ; GFX9-LABEL: name: store_atomic_flat_s32
700    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
701    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
702    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
703    ; GFX9: G_STORE [[COPY1]](s32), [[COPY]](p1) :: (store monotonic 4)
704    ; GFX10-LABEL: name: store_atomic_flat_s32
705    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
706    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
707    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
708    ; GFX10: G_STORE [[COPY1]](s32), [[COPY]](p1) :: (store monotonic 4)
709    %0:vgpr(p1) = COPY $vgpr0_vgpr1
710    %1:vgpr(s32) = COPY $vgpr2
711    G_STORE %1, %0 :: (store monotonic 4, align 4, addrspace 0)
712
713...
714
715---
716
717name: store_atomic_flat_s64
718legalized:       true
719tracksRegLiveness: true
720regBankSelected: true
721
722body: |
723  bb.0:
724    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
725
726    ; GFX7-LABEL: name: store_atomic_flat_s64
727    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
728    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
729    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
730    ; GFX7: G_STORE [[COPY1]](s64), [[COPY]](p1) :: (store monotonic 8)
731    ; GFX8-LABEL: name: store_atomic_flat_s64
732    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
733    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
734    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
735    ; GFX8: G_STORE [[COPY1]](s64), [[COPY]](p1) :: (store monotonic 8)
736    ; GFX9-LABEL: name: store_atomic_flat_s64
737    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
738    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
739    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
740    ; GFX9: G_STORE [[COPY1]](s64), [[COPY]](p1) :: (store monotonic 8)
741    ; GFX10-LABEL: name: store_atomic_flat_s64
742    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
743    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
744    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
745    ; GFX10: G_STORE [[COPY1]](s64), [[COPY]](p1) :: (store monotonic 8)
746    %0:vgpr(p1) = COPY $vgpr0_vgpr1
747    %1:vgpr(s64) = COPY $vgpr2_vgpr3
748    G_STORE %1, %0 :: (store monotonic 8, align 8, addrspace 0)
749
750...
751
752---
753
754name: store_flat_s32_gep_2047
755legalized:       true
756tracksRegLiveness: true
757regBankSelected: true
758
759body: |
760  bb.0:
761    liveins:  $vgpr0_vgpr1, $vgpr2
762
763    ; GFX7-LABEL: name: store_flat_s32_gep_2047
764    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
765    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
766    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
767    ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec
768    ; GFX7: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
769    ; GFX7: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, [[V_MOV_B32_e32_1]], %subreg.sub1
770    ; GFX7: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
771    ; GFX7: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
772    ; GFX7: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
773    ; GFX7: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
774    ; GFX7: [[V_ADD_I32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_I32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_I32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
775    ; GFX7: %9:vgpr_32, dead %11:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_I32_e64_1]], 0, implicit $exec
776    ; GFX7: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_I32_e64_]], %subreg.sub0, %9, %subreg.sub1
777    ; GFX7: FLAT_STORE_DWORD [[REG_SEQUENCE1]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
778    ; GFX8-LABEL: name: store_flat_s32_gep_2047
779    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
780    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
781    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
782    ; GFX8: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec
783    ; GFX8: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
784    ; GFX8: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, [[V_MOV_B32_e32_1]], %subreg.sub1
785    ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
786    ; GFX8: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
787    ; GFX8: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
788    ; GFX8: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
789    ; GFX8: [[V_ADD_I32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_I32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_I32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
790    ; GFX8: %9:vgpr_32, dead %11:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_I32_e64_1]], 0, implicit $exec
791    ; GFX8: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_I32_e64_]], %subreg.sub0, %9, %subreg.sub1
792    ; GFX8: FLAT_STORE_DWORD [[REG_SEQUENCE1]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
793    ; GFX9-LABEL: name: store_flat_s32_gep_2047
794    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
795    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
796    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
797    ; GFX9: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 2047, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
798    ; GFX10-LABEL: name: store_flat_s32_gep_2047
799    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
800    ; GFX10: $vcc_hi = IMPLICIT_DEF
801    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
802    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
803    ; GFX10: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec
804    ; GFX10: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
805    ; GFX10: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, [[V_MOV_B32_e32_1]], %subreg.sub1
806    ; GFX10: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
807    ; GFX10: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
808    ; GFX10: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
809    ; GFX10: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
810    ; GFX10: [[V_ADD_I32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_I32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADD_I32_e64 [[COPY2]], [[COPY3]], 0, implicit $exec
811    ; GFX10: %9:vgpr_32, dead %11:sreg_32_xm0_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_I32_e64_1]], 0, implicit $exec
812    ; GFX10: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_I32_e64_]], %subreg.sub0, %9, %subreg.sub1
813    ; GFX10: FLAT_STORE_DWORD [[REG_SEQUENCE1]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
814    %0:vgpr(p1) = COPY $vgpr0_vgpr1
815    %1:vgpr(s32) = COPY $vgpr2
816    %2:vgpr(s64) = G_CONSTANT i64 2047
817    %3:vgpr(p1) = G_PTR_ADD %0, %2
818    G_STORE %1, %3 :: (store 4, align 4, addrspace 0)
819
820...
821