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