[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-store-flat.mir
blobfc6925ee5709c5c549c624f1be5e867c0a3a220b
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 # RUN: llc -amdgpu-global-isel-new-legality -march=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX11 %s
8 ---
10 name: store_flat_s32_to_4
11 legalized:       true
12 tracksRegLiveness: true
13 regBankSelected: true
15 body: |
16   bb.0:
17     liveins:  $vgpr0_vgpr1, $vgpr2
19     ; GFX7-LABEL: name: store_flat_s32_to_4
20     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
21     ; GFX7-NEXT: {{  $}}
22     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
23     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
24     ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32))
25     ;
26     ; GFX8-LABEL: name: store_flat_s32_to_4
27     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
28     ; GFX8-NEXT: {{  $}}
29     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
30     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
31     ; GFX8-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32))
32     ;
33     ; GFX9-LABEL: name: store_flat_s32_to_4
34     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
35     ; GFX9-NEXT: {{  $}}
36     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
37     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
38     ; GFX9-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32))
39     ;
40     ; GFX10-LABEL: name: store_flat_s32_to_4
41     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
42     ; GFX10-NEXT: {{  $}}
43     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
44     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
45     ; GFX10-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32))
46     ;
47     ; GFX11-LABEL: name: store_flat_s32_to_4
48     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2
49     ; GFX11-NEXT: {{  $}}
50     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
51     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
52     ; GFX11-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32))
53     %0:vgpr(p1) = COPY $vgpr0_vgpr1
54     %1:vgpr(s32) = COPY $vgpr2
55     G_STORE %1, %0 :: (store (s32), align 4, addrspace 0)
57 ...
59 ---
60 name: store_flat_s32_to_2
61 legalized:       true
62 tracksRegLiveness: true
63 regBankSelected: true
65 body: |
66   bb.0:
67     liveins:  $vgpr0_vgpr1, $vgpr2
69     ; GFX7-LABEL: name: store_flat_s32_to_2
70     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
71     ; GFX7-NEXT: {{  $}}
72     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
73     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
74     ; GFX7-NEXT: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s16))
75     ;
76     ; GFX8-LABEL: name: store_flat_s32_to_2
77     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
78     ; GFX8-NEXT: {{  $}}
79     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
80     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
81     ; GFX8-NEXT: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s16))
82     ;
83     ; GFX9-LABEL: name: store_flat_s32_to_2
84     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
85     ; GFX9-NEXT: {{  $}}
86     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
87     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
88     ; GFX9-NEXT: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s16))
89     ;
90     ; GFX10-LABEL: name: store_flat_s32_to_2
91     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
92     ; GFX10-NEXT: {{  $}}
93     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
94     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
95     ; GFX10-NEXT: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s16))
96     ;
97     ; GFX11-LABEL: name: store_flat_s32_to_2
98     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2
99     ; GFX11-NEXT: {{  $}}
100     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
101     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
102     ; GFX11-NEXT: FLAT_STORE_SHORT [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s16))
103     %0:vgpr(p1) = COPY $vgpr0_vgpr1
104     %1:vgpr(s32) = COPY $vgpr2
105     G_STORE %1, %0 :: (store (s16), align 2, addrspace 0)
110 name: store_flat_s32_to_1
111 legalized:       true
112 tracksRegLiveness: true
113 regBankSelected: true
115 body: |
116   bb.0:
117     liveins:  $vgpr0_vgpr1, $vgpr2
119     ; GFX7-LABEL: name: store_flat_s32_to_1
120     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
121     ; GFX7-NEXT: {{  $}}
122     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
123     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
124     ; GFX7-NEXT: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8))
125     ;
126     ; GFX8-LABEL: name: store_flat_s32_to_1
127     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
128     ; GFX8-NEXT: {{  $}}
129     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
130     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
131     ; GFX8-NEXT: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8))
132     ;
133     ; GFX9-LABEL: name: store_flat_s32_to_1
134     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
135     ; GFX9-NEXT: {{  $}}
136     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
137     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
138     ; GFX9-NEXT: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8))
139     ;
140     ; GFX10-LABEL: name: store_flat_s32_to_1
141     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
142     ; GFX10-NEXT: {{  $}}
143     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
144     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
145     ; GFX10-NEXT: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8))
146     ;
147     ; GFX11-LABEL: name: store_flat_s32_to_1
148     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2
149     ; GFX11-NEXT: {{  $}}
150     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
151     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
152     ; GFX11-NEXT: FLAT_STORE_BYTE [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s8))
153     %0:vgpr(p1) = COPY $vgpr0_vgpr1
154     %1:vgpr(s32) = COPY $vgpr2
155     G_STORE %1, %0 :: (store (s8), align 1, addrspace 0)
161 name: store_flat_s64
162 legalized:       true
163 tracksRegLiveness: true
164 regBankSelected: true
166 body: |
167   bb.0:
168     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
170     ; GFX7-LABEL: name: store_flat_s64
171     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
172     ; GFX7-NEXT: {{  $}}
173     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
174     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
175     ; GFX7-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s64))
176     ;
177     ; GFX8-LABEL: name: store_flat_s64
178     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
179     ; GFX8-NEXT: {{  $}}
180     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
181     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
182     ; GFX8-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s64))
183     ;
184     ; GFX9-LABEL: name: store_flat_s64
185     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
186     ; GFX9-NEXT: {{  $}}
187     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
188     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
189     ; GFX9-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s64))
190     ;
191     ; GFX10-LABEL: name: store_flat_s64
192     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
193     ; GFX10-NEXT: {{  $}}
194     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
195     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
196     ; GFX10-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s64))
197     ;
198     ; GFX11-LABEL: name: store_flat_s64
199     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
200     ; GFX11-NEXT: {{  $}}
201     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
202     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
203     ; GFX11-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s64))
204     %0:vgpr(p1) = COPY $vgpr0_vgpr1
205     %1:vgpr(s64) = COPY $vgpr2_vgpr3
206     G_STORE %1, %0 :: (store (s64), align 8, addrspace 0)
211 name: store_flat_s96
212 legalized:       true
213 tracksRegLiveness: true
214 regBankSelected: true
216 body: |
217   bb.0:
218     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
220     ; GFX7-LABEL: name: store_flat_s96
221     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
222     ; GFX7-NEXT: {{  $}}
223     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
224     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
225     ; GFX7-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16)
226     ;
227     ; GFX8-LABEL: name: store_flat_s96
228     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
229     ; GFX8-NEXT: {{  $}}
230     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
231     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
232     ; GFX8-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16)
233     ;
234     ; GFX9-LABEL: name: store_flat_s96
235     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
236     ; GFX9-NEXT: {{  $}}
237     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
238     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
239     ; GFX9-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16)
240     ;
241     ; GFX10-LABEL: name: store_flat_s96
242     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
243     ; GFX10-NEXT: {{  $}}
244     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
245     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
246     ; GFX10-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16)
247     ;
248     ; GFX11-LABEL: name: store_flat_s96
249     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
250     ; GFX11-NEXT: {{  $}}
251     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
252     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
253     ; GFX11-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16)
254     %0:vgpr(p1) = COPY $vgpr0_vgpr1
255     %1:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
256     G_STORE %1, %0 :: (store (s96), align 16, addrspace 0)
261 name: store_flat_s128
262 legalized:       true
263 tracksRegLiveness: true
264 regBankSelected: true
266 body: |
267   bb.0:
268     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
270     ; GFX7-LABEL: name: store_flat_s128
271     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
272     ; GFX7-NEXT: {{  $}}
273     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
274     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
275     ; GFX7-NEXT: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128))
276     ;
277     ; GFX8-LABEL: name: store_flat_s128
278     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
279     ; GFX8-NEXT: {{  $}}
280     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
281     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
282     ; GFX8-NEXT: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128))
283     ;
284     ; GFX9-LABEL: name: store_flat_s128
285     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
286     ; GFX9-NEXT: {{  $}}
287     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
288     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
289     ; GFX9-NEXT: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128))
290     ;
291     ; GFX10-LABEL: name: store_flat_s128
292     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
293     ; GFX10-NEXT: {{  $}}
294     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
295     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
296     ; GFX10-NEXT: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128))
297     ;
298     ; GFX11-LABEL: name: store_flat_s128
299     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
300     ; GFX11-NEXT: {{  $}}
301     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
302     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
303     ; GFX11-NEXT: G_STORE [[COPY1]](s128), [[COPY]](p1) :: (store (s128))
304     %0:vgpr(p1) = COPY $vgpr0_vgpr1
305     %1:vgpr(s128) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
306     G_STORE %1, %0 :: (store (s128), align 16, addrspace 0)
312 name: store_flat_v2s32
313 legalized:       true
314 tracksRegLiveness: true
315 regBankSelected: true
317 body: |
318   bb.0:
319     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
321     ; GFX7-LABEL: name: store_flat_v2s32
322     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
323     ; GFX7-NEXT: {{  $}}
324     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
325     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
326     ; GFX7-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s32>))
327     ;
328     ; GFX8-LABEL: name: store_flat_v2s32
329     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
330     ; GFX8-NEXT: {{  $}}
331     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
332     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
333     ; GFX8-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s32>))
334     ;
335     ; GFX9-LABEL: name: store_flat_v2s32
336     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
337     ; GFX9-NEXT: {{  $}}
338     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
339     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
340     ; GFX9-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s32>))
341     ;
342     ; GFX10-LABEL: name: store_flat_v2s32
343     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
344     ; GFX10-NEXT: {{  $}}
345     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
346     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
347     ; GFX10-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s32>))
348     ;
349     ; GFX11-LABEL: name: store_flat_v2s32
350     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
351     ; GFX11-NEXT: {{  $}}
352     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
353     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
354     ; GFX11-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s32>))
355     %0:vgpr(p1) = COPY $vgpr0_vgpr1
356     %1:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
357     G_STORE %1, %0 :: (store (<2 x s32>), align 8, addrspace 0)
362 name: store_flat_v3s32
363 legalized:       true
364 tracksRegLiveness: true
365 regBankSelected: true
367 body: |
368   bb.0:
369     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
371     ; GFX7-LABEL: name: store_flat_v3s32
372     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
373     ; GFX7-NEXT: {{  $}}
374     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
375     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
376     ; GFX7-NEXT: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<3 x s32>), align 16)
377     ;
378     ; GFX8-LABEL: name: store_flat_v3s32
379     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
380     ; GFX8-NEXT: {{  $}}
381     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
382     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
383     ; GFX8-NEXT: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<3 x s32>), align 16)
384     ;
385     ; GFX9-LABEL: name: store_flat_v3s32
386     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
387     ; GFX9-NEXT: {{  $}}
388     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
389     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
390     ; GFX9-NEXT: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<3 x s32>), align 16)
391     ;
392     ; GFX10-LABEL: name: store_flat_v3s32
393     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
394     ; GFX10-NEXT: {{  $}}
395     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
396     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
397     ; GFX10-NEXT: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<3 x s32>), align 16)
398     ;
399     ; GFX11-LABEL: name: store_flat_v3s32
400     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
401     ; GFX11-NEXT: {{  $}}
402     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
403     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
404     ; GFX11-NEXT: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<3 x s32>), align 16)
405     %0:vgpr(p1) = COPY $vgpr0_vgpr1
406     %1:vgpr(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
407     G_STORE %1, %0 :: (store (<3 x s32>), align 16, addrspace 0)
412 name: store_flat_v4s32
413 legalized:       true
414 tracksRegLiveness: true
415 regBankSelected: true
417 body: |
418   bb.0:
419     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
421     ; GFX7-LABEL: name: store_flat_v4s32
422     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
423     ; GFX7-NEXT: {{  $}}
424     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
425     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
426     ; GFX7-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s32>))
427     ;
428     ; GFX8-LABEL: name: store_flat_v4s32
429     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
430     ; GFX8-NEXT: {{  $}}
431     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
432     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
433     ; GFX8-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s32>))
434     ;
435     ; GFX9-LABEL: name: store_flat_v4s32
436     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
437     ; GFX9-NEXT: {{  $}}
438     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
439     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
440     ; GFX9-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s32>))
441     ;
442     ; GFX10-LABEL: name: store_flat_v4s32
443     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
444     ; GFX10-NEXT: {{  $}}
445     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
446     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
447     ; GFX10-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s32>))
448     ;
449     ; GFX11-LABEL: name: store_flat_v4s32
450     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
451     ; GFX11-NEXT: {{  $}}
452     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
453     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
454     ; GFX11-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s32>))
455     %0:vgpr(p1) = COPY $vgpr0_vgpr1
456     %1:vgpr(<4 x s32>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
457     G_STORE %1, %0 :: (store (<4 x s32>), align 16, addrspace 0)
463 name: store_flat_v2s16
464 legalized:       true
465 tracksRegLiveness: true
466 regBankSelected: true
468 body: |
469   bb.0:
470     liveins:  $vgpr0_vgpr1, $vgpr2
472     ; GFX7-LABEL: name: store_flat_v2s16
473     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
474     ; GFX7-NEXT: {{  $}}
475     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
476     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
477     ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>))
478     ;
479     ; GFX8-LABEL: name: store_flat_v2s16
480     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
481     ; GFX8-NEXT: {{  $}}
482     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
483     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
484     ; GFX8-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>))
485     ;
486     ; GFX9-LABEL: name: store_flat_v2s16
487     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
488     ; GFX9-NEXT: {{  $}}
489     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
490     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
491     ; GFX9-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>))
492     ;
493     ; GFX10-LABEL: name: store_flat_v2s16
494     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
495     ; GFX10-NEXT: {{  $}}
496     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
497     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
498     ; GFX10-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>))
499     ;
500     ; GFX11-LABEL: name: store_flat_v2s16
501     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2
502     ; GFX11-NEXT: {{  $}}
503     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
504     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
505     ; GFX11-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s16>))
506     %0:vgpr(p1) = COPY $vgpr0_vgpr1
507     %1:vgpr(<2 x s16>) = COPY $vgpr2
508     G_STORE %1, %0 :: (store (<2 x s16>), align 4, addrspace 0)
514 name: store_flat_v4s16
515 legalized:       true
516 tracksRegLiveness: true
517 regBankSelected: true
519 body: |
520   bb.0:
521     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
523     ; GFX7-LABEL: name: store_flat_v4s16
524     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
525     ; GFX7-NEXT: {{  $}}
526     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
527     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
528     ; GFX7-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s16>))
529     ;
530     ; GFX8-LABEL: name: store_flat_v4s16
531     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
532     ; GFX8-NEXT: {{  $}}
533     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
534     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
535     ; GFX8-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s16>))
536     ;
537     ; GFX9-LABEL: name: store_flat_v4s16
538     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
539     ; GFX9-NEXT: {{  $}}
540     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
541     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
542     ; GFX9-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s16>))
543     ;
544     ; GFX10-LABEL: name: store_flat_v4s16
545     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
546     ; GFX10-NEXT: {{  $}}
547     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
548     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
549     ; GFX10-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s16>))
550     ;
551     ; GFX11-LABEL: name: store_flat_v4s16
552     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
553     ; GFX11-NEXT: {{  $}}
554     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
555     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
556     ; GFX11-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<4 x s16>))
557     %0:vgpr(p1) = COPY $vgpr0_vgpr1
558     %1:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
559     G_STORE %1, %0 :: (store (<4 x s16>), align 8, addrspace 0)
565 name: store_flat_v6s16
566 legalized:       true
567 tracksRegLiveness: true
568 regBankSelected: true
570 body: |
571   bb.0:
572     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
574     ; GFX7-LABEL: name: store_flat_v6s16
575     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
576     ; GFX7-NEXT: {{  $}}
577     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
578     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
579     ; GFX7-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16)
580     ;
581     ; GFX8-LABEL: name: store_flat_v6s16
582     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
583     ; GFX8-NEXT: {{  $}}
584     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
585     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
586     ; GFX8-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16)
587     ;
588     ; GFX9-LABEL: name: store_flat_v6s16
589     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
590     ; GFX9-NEXT: {{  $}}
591     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
592     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
593     ; GFX9-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16)
594     ;
595     ; GFX10-LABEL: name: store_flat_v6s16
596     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
597     ; GFX10-NEXT: {{  $}}
598     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
599     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
600     ; GFX10-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16)
601     ;
602     ; GFX11-LABEL: name: store_flat_v6s16
603     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
604     ; GFX11-NEXT: {{  $}}
605     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
606     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
607     ; GFX11-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16)
608     %0:vgpr(p1) = COPY $vgpr0_vgpr1
609     %1:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
610     G_STORE %1, %0 :: (store (<6 x s16>), align 16, addrspace 0)
615 name: store_flat_v8s16
616 legalized:       true
617 tracksRegLiveness: true
618 regBankSelected: true
620 body: |
621   bb.0:
622     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
624     ; GFX7-LABEL: name: store_flat_v8s16
625     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
626     ; GFX7-NEXT: {{  $}}
627     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
628     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
629     ; GFX7-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<8 x s16>))
630     ;
631     ; GFX8-LABEL: name: store_flat_v8s16
632     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
633     ; GFX8-NEXT: {{  $}}
634     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
635     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
636     ; GFX8-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<8 x s16>))
637     ;
638     ; GFX9-LABEL: name: store_flat_v8s16
639     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
640     ; GFX9-NEXT: {{  $}}
641     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
642     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
643     ; GFX9-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<8 x s16>))
644     ;
645     ; GFX10-LABEL: name: store_flat_v8s16
646     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
647     ; GFX10-NEXT: {{  $}}
648     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
649     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
650     ; GFX10-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<8 x s16>))
651     ;
652     ; GFX11-LABEL: name: store_flat_v8s16
653     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
654     ; GFX11-NEXT: {{  $}}
655     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
656     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
657     ; GFX11-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<8 x s16>))
658     %0:vgpr(p1) = COPY $vgpr0_vgpr1
659     %1:vgpr(<8 x s16>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
660     G_STORE %1, %0 :: (store (<8 x s16>), align 16, addrspace 0)
666 name: store_flat_v2s64
667 legalized:       true
668 tracksRegLiveness: true
669 regBankSelected: true
671 body: |
672   bb.0:
673     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
675     ; GFX7-LABEL: name: store_flat_v2s64
676     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
677     ; GFX7-NEXT: {{  $}}
678     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
679     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
680     ; GFX7-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s64>))
681     ;
682     ; GFX8-LABEL: name: store_flat_v2s64
683     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
684     ; GFX8-NEXT: {{  $}}
685     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
686     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
687     ; GFX8-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s64>))
688     ;
689     ; GFX9-LABEL: name: store_flat_v2s64
690     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
691     ; GFX9-NEXT: {{  $}}
692     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
693     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
694     ; GFX9-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s64>))
695     ;
696     ; GFX10-LABEL: name: store_flat_v2s64
697     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
698     ; GFX10-NEXT: {{  $}}
699     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
700     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
701     ; GFX10-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s64>))
702     ;
703     ; GFX11-LABEL: name: store_flat_v2s64
704     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
705     ; GFX11-NEXT: {{  $}}
706     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
707     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr2_vgpr3_vgpr4_vgpr5
708     ; GFX11-NEXT: FLAT_STORE_DWORDX4 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<2 x s64>))
709     %0:vgpr(p1) = COPY $vgpr0_vgpr1
710     %1:vgpr(<2 x s64>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
711     G_STORE %1, %0 :: (store (<2 x s64>), align 16, addrspace 0)
717 name: store_flat_p1
718 legalized:       true
719 tracksRegLiveness: true
720 regBankSelected: true
722 body: |
723   bb.0:
724     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
726     ; GFX7-LABEL: name: store_flat_p1
727     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
728     ; GFX7-NEXT: {{  $}}
729     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
730     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
731     ; GFX7-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p1))
732     ;
733     ; GFX8-LABEL: name: store_flat_p1
734     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
735     ; GFX8-NEXT: {{  $}}
736     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
737     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
738     ; GFX8-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p1))
739     ;
740     ; GFX9-LABEL: name: store_flat_p1
741     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
742     ; GFX9-NEXT: {{  $}}
743     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
744     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
745     ; GFX9-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p1))
746     ;
747     ; GFX10-LABEL: name: store_flat_p1
748     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
749     ; GFX10-NEXT: {{  $}}
750     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
751     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
752     ; GFX10-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p1))
753     ;
754     ; GFX11-LABEL: name: store_flat_p1
755     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
756     ; GFX11-NEXT: {{  $}}
757     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
758     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
759     ; GFX11-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p1))
760     %0:vgpr(p1) = COPY $vgpr0_vgpr1
761     %1:vgpr(p1) = COPY $vgpr2_vgpr3
762     G_STORE %1, %0 :: (store (p1), align 8, addrspace 0)
768 name: store_flat_v2p1
769 legalized:       true
770 tracksRegLiveness: true
771 regBankSelected: true
773 body: |
774   bb.0:
775     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
777     ; GFX7-LABEL: name: store_flat_v2p1
778     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
779     ; GFX7-NEXT: {{  $}}
780     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
781     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
782     ; GFX7-NEXT: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>))
783     ;
784     ; GFX8-LABEL: name: store_flat_v2p1
785     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
786     ; GFX8-NEXT: {{  $}}
787     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
788     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
789     ; GFX8-NEXT: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>))
790     ;
791     ; GFX9-LABEL: name: store_flat_v2p1
792     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
793     ; GFX9-NEXT: {{  $}}
794     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
795     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
796     ; GFX9-NEXT: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>))
797     ;
798     ; GFX10-LABEL: name: store_flat_v2p1
799     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
800     ; GFX10-NEXT: {{  $}}
801     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
802     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
803     ; GFX10-NEXT: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>))
804     ;
805     ; GFX11-LABEL: name: store_flat_v2p1
806     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5
807     ; GFX11-NEXT: {{  $}}
808     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
809     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
810     ; GFX11-NEXT: G_STORE [[COPY1]](<2 x p1>), [[COPY]](p1) :: (store (<2 x p1>))
811     %0:vgpr(p1) = COPY $vgpr0_vgpr1
812     %1:vgpr(<2 x p1>) = COPY $vgpr2_vgpr3_vgpr4_vgpr5
813     G_STORE %1, %0 :: (store (<2 x p1>), align 16, addrspace 0)
819 name: store_flat_p3
820 legalized:       true
821 tracksRegLiveness: true
822 regBankSelected: true
824 body: |
825   bb.0:
826     liveins:  $vgpr0_vgpr1, $vgpr2
828     ; GFX7-LABEL: name: store_flat_p3
829     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
830     ; GFX7-NEXT: {{  $}}
831     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
832     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
833     ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3))
834     ;
835     ; GFX8-LABEL: name: store_flat_p3
836     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
837     ; GFX8-NEXT: {{  $}}
838     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
839     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
840     ; GFX8-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3))
841     ;
842     ; GFX9-LABEL: name: store_flat_p3
843     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
844     ; GFX9-NEXT: {{  $}}
845     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
846     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
847     ; GFX9-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3))
848     ;
849     ; GFX10-LABEL: name: store_flat_p3
850     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
851     ; GFX10-NEXT: {{  $}}
852     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
853     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
854     ; GFX10-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3))
855     ;
856     ; GFX11-LABEL: name: store_flat_p3
857     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2
858     ; GFX11-NEXT: {{  $}}
859     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
860     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
861     ; GFX11-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (p3))
862     %0:vgpr(p1) = COPY $vgpr0_vgpr1
863     %1:vgpr(p3) = COPY $vgpr2
864     G_STORE %1, %0 :: (store (p3), align 4, addrspace 0)
870 name: store_flat_v2p3
871 legalized:       true
872 tracksRegLiveness: true
873 regBankSelected: true
875 body: |
876   bb.0:
877     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
879     ; GFX7-LABEL: name: store_flat_v2p3
880     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
881     ; GFX7-NEXT: {{  $}}
882     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
883     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
884     ; GFX7-NEXT: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>))
885     ;
886     ; GFX8-LABEL: name: store_flat_v2p3
887     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
888     ; GFX8-NEXT: {{  $}}
889     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
890     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
891     ; GFX8-NEXT: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>))
892     ;
893     ; GFX9-LABEL: name: store_flat_v2p3
894     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
895     ; GFX9-NEXT: {{  $}}
896     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
897     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
898     ; GFX9-NEXT: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>))
899     ;
900     ; GFX10-LABEL: name: store_flat_v2p3
901     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
902     ; GFX10-NEXT: {{  $}}
903     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
904     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
905     ; GFX10-NEXT: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>))
906     ;
907     ; GFX11-LABEL: name: store_flat_v2p3
908     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
909     ; GFX11-NEXT: {{  $}}
910     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
911     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
912     ; GFX11-NEXT: G_STORE [[COPY1]](<2 x p3>), [[COPY]](p1) :: (store (<2 x p3>))
913     %0:vgpr(p1) = COPY $vgpr0_vgpr1
914     %1:vgpr(<2 x p3>) = COPY $vgpr2_vgpr3
915     G_STORE %1, %0 :: (store (<2 x p3>), align 8, addrspace 0)
920 name: store_atomic_flat_s32
921 legalized:       true
922 tracksRegLiveness: true
923 regBankSelected: true
925 body: |
926   bb.0:
927     liveins:  $vgpr0_vgpr1, $vgpr2
929     ; GFX7-LABEL: name: store_atomic_flat_s32
930     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
931     ; GFX7-NEXT: {{  $}}
932     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
933     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
934     ; GFX7-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s32))
935     ;
936     ; GFX8-LABEL: name: store_atomic_flat_s32
937     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
938     ; GFX8-NEXT: {{  $}}
939     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
940     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
941     ; GFX8-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s32))
942     ;
943     ; GFX9-LABEL: name: store_atomic_flat_s32
944     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
945     ; GFX9-NEXT: {{  $}}
946     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
947     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
948     ; GFX9-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s32))
949     ;
950     ; GFX10-LABEL: name: store_atomic_flat_s32
951     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
952     ; GFX10-NEXT: {{  $}}
953     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
954     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
955     ; GFX10-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s32))
956     ;
957     ; GFX11-LABEL: name: store_atomic_flat_s32
958     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2
959     ; GFX11-NEXT: {{  $}}
960     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
961     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
962     ; GFX11-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s32))
963     %0:vgpr(p1) = COPY $vgpr0_vgpr1
964     %1:vgpr(s32) = COPY $vgpr2
965     G_STORE %1, %0 :: (store monotonic (s32), align 4, addrspace 0)
971 name: store_atomic_flat_s64
972 legalized:       true
973 tracksRegLiveness: true
974 regBankSelected: true
976 body: |
977   bb.0:
978     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3
980     ; GFX7-LABEL: name: store_atomic_flat_s64
981     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
982     ; GFX7-NEXT: {{  $}}
983     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
984     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
985     ; GFX7-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s64))
986     ;
987     ; GFX8-LABEL: name: store_atomic_flat_s64
988     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
989     ; GFX8-NEXT: {{  $}}
990     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
991     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
992     ; GFX8-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s64))
993     ;
994     ; GFX9-LABEL: name: store_atomic_flat_s64
995     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
996     ; GFX9-NEXT: {{  $}}
997     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
998     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
999     ; GFX9-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s64))
1000     ;
1001     ; GFX10-LABEL: name: store_atomic_flat_s64
1002     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
1003     ; GFX10-NEXT: {{  $}}
1004     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
1005     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
1006     ; GFX10-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s64))
1007     ;
1008     ; GFX11-LABEL: name: store_atomic_flat_s64
1009     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
1010     ; GFX11-NEXT: {{  $}}
1011     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
1012     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vreg_64 = COPY $vgpr2_vgpr3
1013     ; GFX11-NEXT: FLAT_STORE_DWORDX2 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store monotonic (s64))
1014     %0:vgpr(p1) = COPY $vgpr0_vgpr1
1015     %1:vgpr(s64) = COPY $vgpr2_vgpr3
1016     G_STORE %1, %0 :: (store monotonic (s64), align 8, addrspace 0)
1022 name: store_flat_s32_gep_2047
1023 legalized:       true
1024 tracksRegLiveness: true
1025 regBankSelected: true
1027 body: |
1028   bb.0:
1029     liveins:  $vgpr0_vgpr1, $vgpr2
1031     ; GFX7-LABEL: name: store_flat_s32_gep_2047
1032     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
1033     ; GFX7-NEXT: {{  $}}
1034     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
1035     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
1036     ; GFX7-NEXT: [[V_MOV_B:%[0-9]+]]:vreg_64 = V_MOV_B64_PSEUDO 2047, implicit $exec
1037     ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
1038     ; GFX7-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub0
1039     ; GFX7-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
1040     ; GFX7-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub1
1041     ; 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
1042     ; GFX7-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
1043     ; GFX7-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
1044     ; GFX7-NEXT: FLAT_STORE_DWORD [[REG_SEQUENCE]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32))
1045     ;
1046     ; GFX8-LABEL: name: store_flat_s32_gep_2047
1047     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2
1048     ; GFX8-NEXT: {{  $}}
1049     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
1050     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
1051     ; GFX8-NEXT: [[V_MOV_B:%[0-9]+]]:vreg_64 = V_MOV_B64_PSEUDO 2047, implicit $exec
1052     ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
1053     ; GFX8-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub0
1054     ; GFX8-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
1055     ; GFX8-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub1
1056     ; 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
1057     ; GFX8-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
1058     ; GFX8-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
1059     ; GFX8-NEXT: FLAT_STORE_DWORD [[REG_SEQUENCE]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32))
1060     ;
1061     ; GFX9-LABEL: name: store_flat_s32_gep_2047
1062     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
1063     ; GFX9-NEXT: {{  $}}
1064     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
1065     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
1066     ; GFX9-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 2047, 0, implicit $exec, implicit $flat_scr :: (store (s32))
1067     ;
1068     ; GFX10-LABEL: name: store_flat_s32_gep_2047
1069     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
1070     ; GFX10-NEXT: {{  $}}
1071     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
1072     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
1073     ; GFX10-NEXT: [[V_MOV_B:%[0-9]+]]:vreg_64 = V_MOV_B64_PSEUDO 2047, implicit $exec
1074     ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
1075     ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub0
1076     ; GFX10-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
1077     ; GFX10-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[V_MOV_B]].sub1
1078     ; 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
1079     ; GFX10-NEXT: [[V_ADDC_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADDC_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_ADDC_U32_e64 [[COPY4]], [[COPY5]], killed [[V_ADD_CO_U32_e64_1]], 0, implicit $exec
1080     ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_]], %subreg.sub0, [[V_ADDC_U32_e64_]], %subreg.sub1
1081     ; GFX10-NEXT: FLAT_STORE_DWORD [[REG_SEQUENCE]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (s32))
1082     ;
1083     ; GFX11-LABEL: name: store_flat_s32_gep_2047
1084     ; GFX11: liveins: $vgpr0_vgpr1, $vgpr2
1085     ; GFX11-NEXT: {{  $}}
1086     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
1087     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
1088     ; GFX11-NEXT: FLAT_STORE_DWORD [[COPY]], [[COPY1]], 2047, 0, implicit $exec, implicit $flat_scr :: (store (s32))
1089     %0:vgpr(p1) = COPY $vgpr0_vgpr1
1090     %1:vgpr(s32) = COPY $vgpr2
1091     %2:vgpr(s64) = G_CONSTANT i64 2047
1092     %3:vgpr(p1) = G_PTR_ADD %0, %2
1093     G_STORE %1, %3 :: (store (s32), align 4, addrspace 0)