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