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]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
206    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
207    ; GFX7: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store 16)
208    ; GFX8-LABEL: name: store_flat_s128
209    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
210    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
211    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
212    ; GFX8: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store 16)
213    ; GFX9-LABEL: name: store_flat_s128
214    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
215    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
216    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
217    ; GFX9: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store 16)
218    ; GFX10-LABEL: name: store_flat_s128
219    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
220    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
221    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
222    ; GFX10: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store 16)
223    %0:vgpr(p1) = COPY $vgpr0_vgpr1
224    %1:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
225    G_STORE %1, %0 :: (store 16, align 16, addrspace 0)
226
227...
228
229---
230
231name: store_flat_v2s32
232legalized:       true
233tracksRegLiveness: true
234regBankSelected: true
235
236body: |
237  bb.0:
238    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
239
240    ; GFX7-LABEL: name: store_flat_v2s32
241    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
242    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
243    ; GFX7: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
244    ; GFX7: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
245    ; GFX8-LABEL: name: store_flat_v2s32
246    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
247    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
248    ; GFX8: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
249    ; GFX8: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
250    ; GFX9-LABEL: name: store_flat_v2s32
251    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
252    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
253    ; GFX9: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
254    ; GFX9: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
255    ; GFX10-LABEL: name: store_flat_v2s32
256    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
257    ; GFX10: $vcc_hi = IMPLICIT_DEF
258    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
259    ; GFX10: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
260    ; GFX10: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
261    %0:vgpr(p1) = COPY $vgpr0_vgpr1
262    %1:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
263    G_STORE %1, %0 :: (store 8, align 8, addrspace 0)
264
265...
266---
267
268name: store_flat_v3s32
269legalized:       true
270tracksRegLiveness: true
271regBankSelected: true
272
273body: |
274  bb.0:
275    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
276
277    ; GFX7-LABEL: name: store_flat_v3s32
278    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
279    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
280    ; GFX7: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
281    ; GFX7: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 12, align 16)
282    ; GFX8-LABEL: name: store_flat_v3s32
283    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
284    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
285    ; GFX8: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
286    ; GFX8: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 12, align 16)
287    ; GFX9-LABEL: name: store_flat_v3s32
288    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
289    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
290    ; GFX9: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
291    ; GFX9: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 12, align 16)
292    ; GFX10-LABEL: name: store_flat_v3s32
293    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
294    ; GFX10: $vcc_hi = IMPLICIT_DEF
295    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
296    ; GFX10: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
297    ; GFX10: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 12, align 16)
298    %0:vgpr(p1) = COPY $vgpr0_vgpr1
299    %1:vgpr(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
300    G_STORE %1, %0 :: (store 12, align 16, addrspace 0)
301
302...
303---
304
305name: store_flat_v4s32
306legalized:       true
307tracksRegLiveness: true
308regBankSelected: true
309
310body: |
311  bb.0:
312    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
313
314    ; GFX7-LABEL: name: store_flat_v4s32
315    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
316    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
317    ; GFX7: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
318    ; GFX7: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
319    ; GFX8-LABEL: name: store_flat_v4s32
320    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
321    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
322    ; GFX8: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
323    ; GFX8: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
324    ; GFX9-LABEL: name: store_flat_v4s32
325    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
326    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
327    ; GFX9: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
328    ; GFX9: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
329    ; GFX10-LABEL: name: store_flat_v4s32
330    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
331    ; GFX10: $vcc_hi = IMPLICIT_DEF
332    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
333    ; GFX10: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
334    ; GFX10: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 16)
335    %0:vgpr(p1) = COPY $vgpr0_vgpr1
336    %1:vgpr(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
337    G_STORE %1, %0 :: (store 16, align 16, addrspace 0)
338
339...
340
341---
342
343name: store_flat_v2s16
344legalized:       true
345tracksRegLiveness: true
346regBankSelected: true
347
348body: |
349  bb.0:
350    liveins:  $vgpr0_vgpr1, $vgpr2
351
352    ; GFX7-LABEL: name: store_flat_v2s16
353    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
354    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
355    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
356    ; GFX7: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
357    ; GFX8-LABEL: name: store_flat_v2s16
358    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
359    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
360    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
361    ; GFX8: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
362    ; GFX9-LABEL: name: store_flat_v2s16
363    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
364    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
365    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
366    ; GFX9: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
367    ; GFX10-LABEL: name: store_flat_v2s16
368    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
369    ; GFX10: $vcc_hi = IMPLICIT_DEF
370    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
371    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
372    ; GFX10: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
373    %0:vgpr(p1) = COPY $vgpr0_vgpr1
374    %1:vgpr(<2 x s16>) = COPY $vgpr2
375    G_STORE %1, %0 :: (store 4, align 4, addrspace 0)
376
377...
378
379---
380
381name: store_flat_v4s16
382legalized:       true
383tracksRegLiveness: true
384regBankSelected: true
385
386body: |
387  bb.0:
388    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
389
390    ; GFX7-LABEL: name: store_flat_v4s16
391    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
392    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
393    ; GFX7: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
394    ; GFX7: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
395    ; GFX8-LABEL: name: store_flat_v4s16
396    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
397    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
398    ; GFX8: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
399    ; GFX8: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
400    ; GFX9-LABEL: name: store_flat_v4s16
401    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
402    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
403    ; GFX9: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
404    ; GFX9: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
405    ; GFX10-LABEL: name: store_flat_v4s16
406    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
407    ; GFX10: $vcc_hi = IMPLICIT_DEF
408    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
409    ; GFX10: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
410    ; GFX10: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
411    %0:vgpr(p1) = COPY $vgpr0_vgpr1
412    %1:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
413    G_STORE %1, %0 :: (store 8, align 8, addrspace 0)
414
415...
416
417---
418
419name: store_flat_v6s16
420legalized:       true
421tracksRegLiveness: true
422regBankSelected: true
423
424body: |
425  bb.0:
426    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
427
428    ; GFX7-LABEL: name: store_flat_v6s16
429    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
430    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
431    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
432    ; GFX7: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store 12, align 16)
433    ; GFX8-LABEL: name: store_flat_v6s16
434    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
435    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
436    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
437    ; GFX8: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store 12, align 16)
438    ; GFX9-LABEL: name: store_flat_v6s16
439    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
440    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
441    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
442    ; GFX9: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store 12, align 16)
443    ; GFX10-LABEL: name: store_flat_v6s16
444    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
445    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
446    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
447    ; GFX10: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store 12, align 16)
448    %0:vgpr(p1) = COPY $vgpr0_vgpr1
449    %1:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
450    G_STORE %1, %0 :: (store 12, align 16, addrspace 0)
451
452...
453---
454
455name: store_flat_v8s16
456legalized:       true
457tracksRegLiveness: true
458regBankSelected: true
459
460body: |
461  bb.0:
462    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
463
464    ; GFX7-LABEL: name: store_flat_v8s16
465    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
466    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
467    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
468    ; GFX7: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store 16)
469    ; GFX8-LABEL: name: store_flat_v8s16
470    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
471    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
472    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
473    ; GFX8: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store 16)
474    ; GFX9-LABEL: name: store_flat_v8s16
475    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
476    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
477    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
478    ; GFX9: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store 16)
479    ; GFX10-LABEL: name: store_flat_v8s16
480    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
481    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
482    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
483    ; GFX10: G_STORE [[COPY1]](<8 x s16>), [[COPY]](p1) :: (store 16)
484    %0:vgpr(p1) = COPY $vgpr0_vgpr1
485    %1:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
486    G_STORE %1, %0 :: (store 16, align 16, addrspace 0)
487
488...
489
490---
491
492name: store_flat_v2s64
493legalized:       true
494tracksRegLiveness: true
495regBankSelected: true
496
497body: |
498  bb.0:
499    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
500
501    ; GFX7-LABEL: name: store_flat_v2s64
502    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
503    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
504    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
505    ; GFX7: G_STORE [[COPY1]](<2 x s64>), [[COPY]](p1) :: (store 16)
506    ; GFX8-LABEL: name: store_flat_v2s64
507    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
508    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
509    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
510    ; GFX8: G_STORE [[COPY1]](<2 x s64>), [[COPY]](p1) :: (store 16)
511    ; GFX9-LABEL: name: store_flat_v2s64
512    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
513    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
514    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
515    ; GFX9: G_STORE [[COPY1]](<2 x s64>), [[COPY]](p1) :: (store 16)
516    ; GFX10-LABEL: name: store_flat_v2s64
517    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
518    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
519    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
520    ; GFX10: G_STORE [[COPY1]](<2 x s64>), [[COPY]](p1) :: (store 16)
521    %0:vgpr(p1) = COPY $vgpr0_vgpr1
522    %1:vgpr(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
523    G_STORE %1, %0 :: (store 16, align 16, addrspace 0)
524
525...
526
527---
528
529name: store_flat_p1
530legalized:       true
531tracksRegLiveness: true
532regBankSelected: true
533
534body: |
535  bb.0:
536    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
537
538    ; GFX7-LABEL: name: store_flat_p1
539    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
540    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
541    ; GFX7: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
542    ; GFX7: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
543    ; GFX8-LABEL: name: store_flat_p1
544    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
545    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
546    ; GFX8: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
547    ; GFX8: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
548    ; GFX9-LABEL: name: store_flat_p1
549    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
550    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
551    ; GFX9: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
552    ; GFX9: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
553    ; GFX10-LABEL: name: store_flat_p1
554    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
555    ; GFX10: $vcc_hi = IMPLICIT_DEF
556    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
557    ; GFX10: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
558    ; GFX10: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 8)
559    %0:vgpr(p1) = COPY $vgpr0_vgpr1
560    %1:vgpr(p1) = COPY $vgpr2_vgpr3
561    G_STORE %1, %0 :: (store 8, align 8, addrspace 0)
562
563...
564
565---
566
567name: store_flat_v2p1
568legalized:       true
569tracksRegLiveness: true
570regBankSelected: true
571
572body: |
573  bb.0:
574    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
575
576    ; GFX7-LABEL: name: store_flat_v2p1
577    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
578    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
579    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
580    ; GFX7: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store 16)
581    ; GFX8-LABEL: name: store_flat_v2p1
582    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
583    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
584    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
585    ; GFX8: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store 16)
586    ; GFX9-LABEL: name: store_flat_v2p1
587    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
588    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
589    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
590    ; GFX9: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store 16)
591    ; GFX10-LABEL: name: store_flat_v2p1
592    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
593    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
594    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
595    ; GFX10: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store 16)
596    %0:vgpr(p1) = COPY $vgpr0_vgpr1
597    %1:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
598    G_STORE %1, %0 :: (store 16, align 16, addrspace 0)
599
600...
601
602---
603
604name: store_flat_p3
605legalized:       true
606tracksRegLiveness: true
607regBankSelected: true
608
609body: |
610  bb.0:
611    liveins:  $vgpr0_vgpr1, $vgpr2
612
613    ; GFX7-LABEL: name: store_flat_p3
614    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
615    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
616    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
617    ; GFX7: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
618    ; GFX8-LABEL: name: store_flat_p3
619    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
620    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
621    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
622    ; GFX8: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
623    ; GFX9-LABEL: name: store_flat_p3
624    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
625    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
626    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
627    ; GFX9: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
628    ; GFX10-LABEL: name: store_flat_p3
629    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
630    ; GFX10: $vcc_hi = IMPLICIT_DEF
631    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
632    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
633    ; GFX10: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
634    %0:vgpr(p1) = COPY $vgpr0_vgpr1
635    %1:vgpr(p3) = COPY $vgpr2
636    G_STORE %1, %0 :: (store 4, align 4, addrspace 0)
637
638...
639
640---
641
642name: store_flat_v2p3
643legalized:       true
644tracksRegLiveness: true
645regBankSelected: true
646
647body: |
648  bb.0:
649    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
650
651    ; GFX7-LABEL: name: store_flat_v2p3
652    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
653    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
654    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
655    ; GFX7: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store 8)
656    ; GFX8-LABEL: name: store_flat_v2p3
657    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
658    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
659    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
660    ; GFX8: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store 8)
661    ; GFX9-LABEL: name: store_flat_v2p3
662    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
663    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
664    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
665    ; GFX9: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store 8)
666    ; GFX10-LABEL: name: store_flat_v2p3
667    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
668    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
669    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
670    ; GFX10: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store 8)
671    %0:vgpr(p1) = COPY $vgpr0_vgpr1
672    %1:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
673    G_STORE %1, %0 :: (store 8, align 8, addrspace 0)
674
675...
676---
677
678name: store_atomic_flat_s32
679legalized:       true
680tracksRegLiveness: true
681regBankSelected: true
682
683body: |
684  bb.0:
685    liveins:  $vgpr0_vgpr1, $vgpr2
686
687    ; GFX7-LABEL: name: store_atomic_flat_s32
688    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
689    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
690    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
691    ; GFX7: G_STORE [[COPY1]](s32), [[COPY]](p1) :: (store monotonic 4)
692    ; GFX8-LABEL: name: store_atomic_flat_s32
693    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
694    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
695    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
696    ; GFX8: G_STORE [[COPY1]](s32), [[COPY]](p1) :: (store monotonic 4)
697    ; GFX9-LABEL: name: store_atomic_flat_s32
698    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
699    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
700    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
701    ; GFX9: G_STORE [[COPY1]](s32), [[COPY]](p1) :: (store monotonic 4)
702    ; GFX10-LABEL: name: store_atomic_flat_s32
703    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
704    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
705    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
706    ; GFX10: G_STORE [[COPY1]](s32), [[COPY]](p1) :: (store monotonic 4)
707    %0:vgpr(p1) = COPY $vgpr0_vgpr1
708    %1:vgpr(s32) = COPY $vgpr2
709    G_STORE %1, %0 :: (store monotonic 4, align 4, addrspace 0)
710
711...
712
713---
714
715name: store_atomic_flat_s64
716legalized:       true
717tracksRegLiveness: true
718regBankSelected: true
719
720body: |
721  bb.0:
722    liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
723
724    ; GFX7-LABEL: name: store_atomic_flat_s64
725    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
726    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
727    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
728    ; GFX7: G_STORE [[COPY1]](s64), [[COPY]](p1) :: (store monotonic 8)
729    ; GFX8-LABEL: name: store_atomic_flat_s64
730    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
731    ; GFX8: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
732    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
733    ; GFX8: G_STORE [[COPY1]](s64), [[COPY]](p1) :: (store monotonic 8)
734    ; GFX9-LABEL: name: store_atomic_flat_s64
735    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
736    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
737    ; GFX9: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
738    ; GFX9: G_STORE [[COPY1]](s64), [[COPY]](p1) :: (store monotonic 8)
739    ; GFX10-LABEL: name: store_atomic_flat_s64
740    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
741    ; GFX10: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
742    ; GFX10: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
743    ; GFX10: G_STORE [[COPY1]](s64), [[COPY]](p1) :: (store monotonic 8)
744    %0:vgpr(p1) = COPY $vgpr0_vgpr1
745    %1:vgpr(s64) = COPY $vgpr2_vgpr3
746    G_STORE %1, %0 :: (store monotonic 8, align 8, addrspace 0)
747
748...
749
750---
751
752name: store_flat_s32_gep_2047
753legalized:       true
754tracksRegLiveness: true
755regBankSelected: true
756
757body: |
758  bb.0:
759    liveins:  $vgpr0_vgpr1, $vgpr2
760
761    ; GFX7-LABEL: name: store_flat_s32_gep_2047
762    ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
763    ; GFX7: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
764    ; GFX7: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
765    ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec
766    ; GFX7: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
767    ; GFX7: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, [[V_MOV_B32_e32_1]], %subreg.sub1
768    ; GFX7: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
769    ; GFX7: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
770    ; GFX7: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
771    ; GFX7: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
772    ; 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
773    ; GFX7: %9:vgpr_32, dead %11:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_I32_e64_1]], 0, implicit $exec
774    ; GFX7: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_I32_e64_]], %subreg.sub0, %9, %subreg.sub1
775    ; GFX7: FLAT_STORE_DWORD [[REG_SEQUENCE1]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
776    ; GFX8-LABEL: name: store_flat_s32_gep_2047
777    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
778    ; GFX8: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
779    ; GFX8: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
780    ; GFX8: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec
781    ; GFX8: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
782    ; GFX8: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, [[V_MOV_B32_e32_1]], %subreg.sub1
783    ; GFX8: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
784    ; GFX8: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
785    ; GFX8: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
786    ; GFX8: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
787    ; 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
788    ; GFX8: %9:vgpr_32, dead %11:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_I32_e64_1]], 0, implicit $exec
789    ; GFX8: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_I32_e64_]], %subreg.sub0, %9, %subreg.sub1
790    ; GFX8: FLAT_STORE_DWORD [[REG_SEQUENCE1]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
791    ; GFX9-LABEL: name: store_flat_s32_gep_2047
792    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
793    ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
794    ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
795    ; GFX9: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 2047, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
796    ; GFX10-LABEL: name: store_flat_s32_gep_2047
797    ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
798    ; GFX10: $vcc_hi = IMPLICIT_DEF
799    ; GFX10: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
800    ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
801    ; GFX10: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2047, implicit $exec
802    ; GFX10: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
803    ; GFX10: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_MOV_B32_e32_]], %subreg.sub0, [[V_MOV_B32_e32_1]], %subreg.sub1
804    ; GFX10: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
805    ; GFX10: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0
806    ; GFX10: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
807    ; GFX10: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub1
808    ; 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
809    ; 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
810    ; GFX10: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_I32_e64_]], %subreg.sub0, %9, %subreg.sub1
811    ; GFX10: FLAT_STORE_DWORD [[REG_SEQUENCE1]], [[COPY1]], 0, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4)
812    %0:vgpr(p1) = COPY $vgpr0_vgpr1
813    %1:vgpr(s32) = COPY $vgpr2
814    %2:vgpr(s64) = G_CONSTANT i64 2047
815    %3:vgpr(p1) = G_PTR_ADD %0, %2
816    G_STORE %1, %3 :: (store 4, align 4, addrspace 0)
817
818...
819