Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-store-local.mir
blob1b7c0fcb767142bddf16241bc3ca45c3884a7c3e
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -disable-gisel-legality-check -o - %s | FileCheck -check-prefix=GFX6 %s
3 # RUN: llc -mtriple=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s
4 # RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s
5 # RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
6 # RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -mattr=+cumode -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s
7 # RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
9 ---
11 name: store_local_s32_to_4
12 legalized:       true
13 regBankSelected: true
14 tracksRegLiveness: true
15 machineFunctionInfo:
16   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
17   stackPtrOffsetReg: $sgpr32
19 body: |
20   bb.0:
21     liveins: $vgpr0, $vgpr1
23     ; GFX6-LABEL: name: store_local_s32_to_4
24     ; GFX6: liveins: $vgpr0, $vgpr1
25     ; GFX6-NEXT: {{  $}}
26     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
27     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
28     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
29     ; GFX6-NEXT: DS_WRITE_B32 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (s32), addrspace 3)
30     ; GFX7-LABEL: name: store_local_s32_to_4
31     ; GFX7: liveins: $vgpr0, $vgpr1
32     ; GFX7-NEXT: {{  $}}
33     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
34     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
35     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
36     ; GFX7-NEXT: DS_WRITE_B32 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (s32), addrspace 3)
37     ; GFX9-LABEL: name: store_local_s32_to_4
38     ; GFX9: liveins: $vgpr0, $vgpr1
39     ; GFX9-NEXT: {{  $}}
40     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
41     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
42     ; GFX9-NEXT: DS_WRITE_B32_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (s32), addrspace 3)
43     ; GFX10-LABEL: name: store_local_s32_to_4
44     ; GFX10: liveins: $vgpr0, $vgpr1
45     ; GFX10-NEXT: {{  $}}
46     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
47     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
48     ; GFX10-NEXT: DS_WRITE_B32_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (s32), addrspace 3)
49     %0:vgpr(s32) = COPY $vgpr0
50     %1:vgpr(p3) = COPY $vgpr1
51     G_STORE %0, %1 :: (store (s32), align 4, addrspace 3)
53 ...
55 ---
57 name: store_local_s32_to_2
58 legalized:       true
59 regBankSelected: true
60 tracksRegLiveness: true
61 machineFunctionInfo:
62   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
63   stackPtrOffsetReg: $sgpr32
65 body: |
66   bb.0:
67     liveins: $vgpr0, $vgpr1
69     ; GFX6-LABEL: name: store_local_s32_to_2
70     ; GFX6: liveins: $vgpr0, $vgpr1
71     ; GFX6-NEXT: {{  $}}
72     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
73     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
74     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
75     ; GFX6-NEXT: DS_WRITE_B16 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (s16), addrspace 3)
76     ; GFX7-LABEL: name: store_local_s32_to_2
77     ; GFX7: liveins: $vgpr0, $vgpr1
78     ; GFX7-NEXT: {{  $}}
79     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
80     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
81     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
82     ; GFX7-NEXT: DS_WRITE_B16 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (s16), addrspace 3)
83     ; GFX9-LABEL: name: store_local_s32_to_2
84     ; GFX9: liveins: $vgpr0, $vgpr1
85     ; GFX9-NEXT: {{  $}}
86     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
87     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
88     ; GFX9-NEXT: DS_WRITE_B16_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (s16), addrspace 3)
89     ; GFX10-LABEL: name: store_local_s32_to_2
90     ; GFX10: liveins: $vgpr0, $vgpr1
91     ; GFX10-NEXT: {{  $}}
92     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
93     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
94     ; GFX10-NEXT: DS_WRITE_B16_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (s16), addrspace 3)
95     %0:vgpr(s32) = COPY $vgpr0
96     %1:vgpr(p3) = COPY $vgpr1
97     G_STORE %0, %1 :: (store (s16), align 2, addrspace 3)
99 ...
103 name: store_local_s32_to_1
104 legalized:       true
105 regBankSelected: true
106 tracksRegLiveness: true
107 machineFunctionInfo:
108   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
109   stackPtrOffsetReg: $sgpr32
111 body: |
112   bb.0:
113     liveins: $vgpr0, $vgpr1
115     ; GFX6-LABEL: name: store_local_s32_to_1
116     ; GFX6: liveins: $vgpr0, $vgpr1
117     ; GFX6-NEXT: {{  $}}
118     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
119     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
120     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
121     ; GFX6-NEXT: DS_WRITE_B8 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (s8), addrspace 3)
122     ; GFX7-LABEL: name: store_local_s32_to_1
123     ; GFX7: liveins: $vgpr0, $vgpr1
124     ; GFX7-NEXT: {{  $}}
125     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
126     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
127     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
128     ; GFX7-NEXT: DS_WRITE_B8 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (s8), addrspace 3)
129     ; GFX9-LABEL: name: store_local_s32_to_1
130     ; GFX9: liveins: $vgpr0, $vgpr1
131     ; GFX9-NEXT: {{  $}}
132     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
133     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
134     ; GFX9-NEXT: DS_WRITE_B8_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (s8), addrspace 3)
135     ; GFX10-LABEL: name: store_local_s32_to_1
136     ; GFX10: liveins: $vgpr0, $vgpr1
137     ; GFX10-NEXT: {{  $}}
138     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
139     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
140     ; GFX10-NEXT: DS_WRITE_B8_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (s8), addrspace 3)
141     %0:vgpr(s32) = COPY $vgpr0
142     %1:vgpr(p3) = COPY $vgpr1
143     G_STORE %0, %1 :: (store (s8), align 1, addrspace 3)
149 name: store_local_v2s16
150 legalized:       true
151 regBankSelected: true
152 tracksRegLiveness: true
153 machineFunctionInfo:
154   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
155   stackPtrOffsetReg: $sgpr32
157 body: |
158   bb.0:
159     liveins: $vgpr0, $vgpr1
161     ; GFX6-LABEL: name: store_local_v2s16
162     ; GFX6: liveins: $vgpr0, $vgpr1
163     ; GFX6-NEXT: {{  $}}
164     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
165     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
166     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
167     ; GFX6-NEXT: DS_WRITE_B32 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (<2 x s16>), addrspace 3)
168     ; GFX7-LABEL: name: store_local_v2s16
169     ; GFX7: liveins: $vgpr0, $vgpr1
170     ; GFX7-NEXT: {{  $}}
171     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
172     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
173     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
174     ; GFX7-NEXT: DS_WRITE_B32 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (<2 x s16>), addrspace 3)
175     ; GFX9-LABEL: name: store_local_v2s16
176     ; GFX9: liveins: $vgpr0, $vgpr1
177     ; GFX9-NEXT: {{  $}}
178     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
179     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
180     ; GFX9-NEXT: DS_WRITE_B32_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (<2 x s16>), addrspace 3)
181     ; GFX10-LABEL: name: store_local_v2s16
182     ; GFX10: liveins: $vgpr0, $vgpr1
183     ; GFX10-NEXT: {{  $}}
184     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
185     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
186     ; GFX10-NEXT: DS_WRITE_B32_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (<2 x s16>), addrspace 3)
187     %0:vgpr(<2 x s16>) = COPY $vgpr0
188     %1:vgpr(p3) = COPY $vgpr1
189     G_STORE %0, %1 :: (store (<2 x s16>), align 4, addrspace 3)
195 name: store_local_p3
196 legalized:       true
197 regBankSelected: true
198 tracksRegLiveness: true
199 machineFunctionInfo:
200   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
201   stackPtrOffsetReg: $sgpr32
203 body: |
204   bb.0:
205     liveins: $vgpr0, $vgpr1
207     ; GFX6-LABEL: name: store_local_p3
208     ; GFX6: liveins: $vgpr0, $vgpr1
209     ; GFX6-NEXT: {{  $}}
210     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
211     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
212     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
213     ; GFX6-NEXT: DS_WRITE_B32 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (p3), addrspace 3)
214     ; GFX7-LABEL: name: store_local_p3
215     ; GFX7: liveins: $vgpr0, $vgpr1
216     ; GFX7-NEXT: {{  $}}
217     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
218     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
219     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
220     ; GFX7-NEXT: DS_WRITE_B32 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (p3), addrspace 3)
221     ; GFX9-LABEL: name: store_local_p3
222     ; GFX9: liveins: $vgpr0, $vgpr1
223     ; GFX9-NEXT: {{  $}}
224     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
225     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
226     ; GFX9-NEXT: DS_WRITE_B32_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (p3), addrspace 3)
227     ; GFX10-LABEL: name: store_local_p3
228     ; GFX10: liveins: $vgpr0, $vgpr1
229     ; GFX10-NEXT: {{  $}}
230     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
231     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
232     ; GFX10-NEXT: DS_WRITE_B32_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (p3), addrspace 3)
233     %0:vgpr(p3) = COPY $vgpr0
234     %1:vgpr(p3) = COPY $vgpr1
235     G_STORE %0, %1 :: (store (p3), align 4, addrspace 3)
241 name: store_local_s32_to_1_constant_4095
242 legalized:       true
243 regBankSelected: true
244 tracksRegLiveness: true
246 body: |
247   bb.0:
249     ; GFX6-LABEL: name: store_local_s32_to_1_constant_4095
250     ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
251     ; GFX6-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
252     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
253     ; GFX6-NEXT: DS_WRITE_B8 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $m0, implicit $exec :: (store (s8), addrspace 3)
254     ; GFX7-LABEL: name: store_local_s32_to_1_constant_4095
255     ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
256     ; GFX7-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
257     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
258     ; GFX7-NEXT: DS_WRITE_B8 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $m0, implicit $exec :: (store (s8), addrspace 3)
259     ; GFX9-LABEL: name: store_local_s32_to_1_constant_4095
260     ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
261     ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
262     ; GFX9-NEXT: DS_WRITE_B8_gfx9 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $exec :: (store (s8), addrspace 3)
263     ; GFX10-LABEL: name: store_local_s32_to_1_constant_4095
264     ; GFX10: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4095, implicit $exec
265     ; GFX10-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
266     ; GFX10-NEXT: DS_WRITE_B8_gfx9 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $exec :: (store (s8), addrspace 3)
267     %0:vgpr(p3) = G_CONSTANT i32 4095
268     %1:vgpr(s32) = G_CONSTANT i32 0
269     G_STORE %1, %0 :: (store (s8), align 1, addrspace 3)
275 name: store_local_s32_to_1_constant_4096
276 legalized:       true
277 regBankSelected: true
278 tracksRegLiveness: true
279 machineFunctionInfo:
280   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
281   stackPtrOffsetReg: $sgpr32
282 stack:
283   - { id: 0, size: 4096, alignment: 4 }
285 body: |
286   bb.0:
288     ; GFX6-LABEL: name: store_local_s32_to_1_constant_4096
289     ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
290     ; GFX6-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
291     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
292     ; GFX6-NEXT: DS_WRITE_B8 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $m0, implicit $exec :: (store (s8), addrspace 3)
293     ; GFX7-LABEL: name: store_local_s32_to_1_constant_4096
294     ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
295     ; GFX7-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
296     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
297     ; GFX7-NEXT: DS_WRITE_B8 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $m0, implicit $exec :: (store (s8), addrspace 3)
298     ; GFX9-LABEL: name: store_local_s32_to_1_constant_4096
299     ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
300     ; GFX9-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
301     ; GFX9-NEXT: DS_WRITE_B8_gfx9 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $exec :: (store (s8), addrspace 3)
302     ; GFX10-LABEL: name: store_local_s32_to_1_constant_4096
303     ; GFX10: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4096, implicit $exec
304     ; GFX10-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
305     ; GFX10-NEXT: DS_WRITE_B8_gfx9 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_1]], 0, 0, implicit $exec :: (store (s8), addrspace 3)
306     %0:vgpr(p3) = G_CONSTANT i32 4096
307     %1:vgpr(s32) = G_CONSTANT i32 0
308     G_STORE %1, %0 :: (store (s8), align 1, addrspace 3)
314 name: store_local_s64_align4
315 legalized:       true
316 regBankSelected: true
317 tracksRegLiveness: true
318 machineFunctionInfo:
319   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
320   stackPtrOffsetReg: $sgpr32
322 body: |
323   bb.0:
324     liveins: $vgpr0_vgpr1, $vgpr2
326     ; GFX6-LABEL: name: store_local_s64_align4
327     ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
328     ; GFX6-NEXT: {{  $}}
329     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
330     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(p3) = COPY $vgpr2
331     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
332     ; GFX6-NEXT: G_STORE [[COPY]](s64), [[COPY1]](p3) :: (store (s64), align 4, addrspace 3)
333     ; GFX7-LABEL: name: store_local_s64_align4
334     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
335     ; GFX7-NEXT: {{  $}}
336     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
337     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
338     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
339     ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
340     ; GFX7-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
341     ; GFX7-NEXT: DS_WRITE2_B32 [[COPY1]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $m0, implicit $exec :: (store (s64), align 4, addrspace 3)
342     ; GFX9-LABEL: name: store_local_s64_align4
343     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
344     ; GFX9-NEXT: {{  $}}
345     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
346     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
347     ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
348     ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
349     ; GFX9-NEXT: DS_WRITE2_B32_gfx9 [[COPY1]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $exec :: (store (s64), align 4, addrspace 3)
350     ; GFX10-LABEL: name: store_local_s64_align4
351     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
352     ; GFX10-NEXT: {{  $}}
353     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
354     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
355     ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
356     ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
357     ; GFX10-NEXT: DS_WRITE2_B32_gfx9 [[COPY1]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $exec :: (store (s64), align 4, addrspace 3)
358     %0:vgpr(s64) = COPY $vgpr0_vgpr1
359     %1:vgpr(p3) = COPY $vgpr2
360     G_STORE %0, %1 :: (store (s64), align 4, addrspace 3)
366 name: store_local_p1_align4
367 legalized:       true
368 regBankSelected: true
369 tracksRegLiveness: true
370 machineFunctionInfo:
371   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
372   stackPtrOffsetReg: $sgpr32
374 body: |
375   bb.0:
376     liveins: $vgpr0_vgpr1, $vgpr2
378     ; GFX6-LABEL: name: store_local_p1_align4
379     ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
380     ; GFX6-NEXT: {{  $}}
381     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
382     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(p3) = COPY $vgpr2
383     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
384     ; GFX6-NEXT: G_STORE [[COPY]](p1), [[COPY1]](p3) :: (store (p1), align 4, addrspace 3)
385     ; GFX7-LABEL: name: store_local_p1_align4
386     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
387     ; GFX7-NEXT: {{  $}}
388     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
389     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
390     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
391     ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
392     ; GFX7-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
393     ; GFX7-NEXT: DS_WRITE2_B32 [[COPY1]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $m0, implicit $exec :: (store (p1), align 4, addrspace 3)
394     ; GFX9-LABEL: name: store_local_p1_align4
395     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
396     ; GFX9-NEXT: {{  $}}
397     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
398     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
399     ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
400     ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
401     ; GFX9-NEXT: DS_WRITE2_B32_gfx9 [[COPY1]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $exec :: (store (p1), align 4, addrspace 3)
402     ; GFX10-LABEL: name: store_local_p1_align4
403     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
404     ; GFX10-NEXT: {{  $}}
405     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
406     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
407     ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
408     ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
409     ; GFX10-NEXT: DS_WRITE2_B32_gfx9 [[COPY1]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $exec :: (store (p1), align 4, addrspace 3)
410     %0:vgpr(p1) = COPY $vgpr0_vgpr1
411     %1:vgpr(p3) = COPY $vgpr2
412     G_STORE %0, %1 :: (store (p1), align 4, addrspace 3)
418 name: store_local_v2s32_align4
419 legalized:       true
420 regBankSelected: true
421 tracksRegLiveness: true
422 machineFunctionInfo:
423   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
424   stackPtrOffsetReg: $sgpr32
426 body: |
427   bb.0:
428     liveins: $vgpr0_vgpr1, $vgpr2
430     ; GFX6-LABEL: name: store_local_v2s32_align4
431     ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
432     ; GFX6-NEXT: {{  $}}
433     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
434     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(p3) = COPY $vgpr2
435     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
436     ; GFX6-NEXT: G_STORE [[COPY]](<2 x s32>), [[COPY1]](p3) :: (store (<2 x s32>), align 4, addrspace 3)
437     ; GFX7-LABEL: name: store_local_v2s32_align4
438     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
439     ; GFX7-NEXT: {{  $}}
440     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
441     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
442     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
443     ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
444     ; GFX7-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
445     ; GFX7-NEXT: DS_WRITE2_B32 [[COPY1]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $m0, implicit $exec :: (store (<2 x s32>), align 4, addrspace 3)
446     ; GFX9-LABEL: name: store_local_v2s32_align4
447     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
448     ; GFX9-NEXT: {{  $}}
449     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
450     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
451     ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
452     ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
453     ; GFX9-NEXT: DS_WRITE2_B32_gfx9 [[COPY1]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $exec :: (store (<2 x s32>), align 4, addrspace 3)
454     ; GFX10-LABEL: name: store_local_v2s32_align4
455     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
456     ; GFX10-NEXT: {{  $}}
457     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
458     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
459     ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
460     ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
461     ; GFX10-NEXT: DS_WRITE2_B32_gfx9 [[COPY1]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $exec :: (store (<2 x s32>), align 4, addrspace 3)
462     %0:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
463     %1:vgpr(p3) = COPY $vgpr2
464     G_STORE %0, %1 :: (store (<2 x s32>), align 4, addrspace 3)
470 name: store_local_v4s16_align4
471 legalized:       true
472 regBankSelected: true
473 tracksRegLiveness: true
474 machineFunctionInfo:
475   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
476   stackPtrOffsetReg: $sgpr32
478 body: |
479   bb.0:
480     liveins: $vgpr0_vgpr1, $vgpr2
482     ; GFX6-LABEL: name: store_local_v4s16_align4
483     ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
484     ; GFX6-NEXT: {{  $}}
485     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
486     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(p3) = COPY $vgpr2
487     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
488     ; GFX6-NEXT: G_STORE [[COPY]](<4 x s16>), [[COPY1]](p3) :: (store (<4 x s16>), align 4, addrspace 3)
489     ; GFX7-LABEL: name: store_local_v4s16_align4
490     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
491     ; GFX7-NEXT: {{  $}}
492     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
493     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
494     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
495     ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
496     ; GFX7-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
497     ; GFX7-NEXT: DS_WRITE2_B32 [[COPY1]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $m0, implicit $exec :: (store (<4 x s16>), align 4, addrspace 3)
498     ; GFX9-LABEL: name: store_local_v4s16_align4
499     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
500     ; GFX9-NEXT: {{  $}}
501     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
502     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
503     ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
504     ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
505     ; GFX9-NEXT: DS_WRITE2_B32_gfx9 [[COPY1]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $exec :: (store (<4 x s16>), align 4, addrspace 3)
506     ; GFX10-LABEL: name: store_local_v4s16_align4
507     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
508     ; GFX10-NEXT: {{  $}}
509     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
510     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
511     ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
512     ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
513     ; GFX10-NEXT: DS_WRITE2_B32_gfx9 [[COPY1]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $exec :: (store (<4 x s16>), align 4, addrspace 3)
514     %0:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
515     %1:vgpr(p3) = COPY $vgpr2
516     G_STORE %0, %1 :: (store (<4 x s16>), align 4, addrspace 3)
522 name: store_local_s64_align8
523 legalized:       true
524 regBankSelected: true
525 tracksRegLiveness: true
526 machineFunctionInfo:
527   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
528   stackPtrOffsetReg: $sgpr32
530 body: |
531   bb.0:
532     liveins: $vgpr0_vgpr1, $vgpr2
534     ; GFX6-LABEL: name: store_local_s64_align8
535     ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
536     ; GFX6-NEXT: {{  $}}
537     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
538     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
539     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
540     ; GFX6-NEXT: DS_WRITE_B64 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (s64), addrspace 3)
541     ; GFX7-LABEL: name: store_local_s64_align8
542     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
543     ; GFX7-NEXT: {{  $}}
544     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
545     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
546     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
547     ; GFX7-NEXT: DS_WRITE_B64 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (s64), addrspace 3)
548     ; GFX9-LABEL: name: store_local_s64_align8
549     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
550     ; GFX9-NEXT: {{  $}}
551     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
552     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
553     ; GFX9-NEXT: DS_WRITE_B64_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (s64), addrspace 3)
554     ; GFX10-LABEL: name: store_local_s64_align8
555     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
556     ; GFX10-NEXT: {{  $}}
557     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
558     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
559     ; GFX10-NEXT: DS_WRITE_B64_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (s64), addrspace 3)
560     %0:vgpr(s64) = COPY $vgpr0_vgpr1
561     %1:vgpr(p3) = COPY $vgpr2
562     G_STORE %0, %1 :: (store (s64), align 8, addrspace 3)
568 name: store_local_p1_align8
569 legalized:       true
570 regBankSelected: true
571 tracksRegLiveness: true
572 machineFunctionInfo:
573   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
574   stackPtrOffsetReg: $sgpr32
576 body: |
577   bb.0:
578     liveins: $vgpr0_vgpr1, $vgpr2
580     ; GFX6-LABEL: name: store_local_p1_align8
581     ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
582     ; GFX6-NEXT: {{  $}}
583     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
584     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
585     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
586     ; GFX6-NEXT: DS_WRITE_B64 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (p1), addrspace 3)
587     ; GFX7-LABEL: name: store_local_p1_align8
588     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
589     ; GFX7-NEXT: {{  $}}
590     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
591     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
592     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
593     ; GFX7-NEXT: DS_WRITE_B64 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (p1), addrspace 3)
594     ; GFX9-LABEL: name: store_local_p1_align8
595     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
596     ; GFX9-NEXT: {{  $}}
597     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
598     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
599     ; GFX9-NEXT: DS_WRITE_B64_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (p1), addrspace 3)
600     ; GFX10-LABEL: name: store_local_p1_align8
601     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
602     ; GFX10-NEXT: {{  $}}
603     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
604     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
605     ; GFX10-NEXT: DS_WRITE_B64_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (p1), addrspace 3)
606     %0:vgpr(p1) = COPY $vgpr0_vgpr1
607     %1:vgpr(p3) = COPY $vgpr2
608     G_STORE %0, %1 :: (store (p1), align 8, addrspace 3)
614 name: store_local_v2s32_align8
615 legalized:       true
616 regBankSelected: true
617 tracksRegLiveness: true
618 machineFunctionInfo:
619   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
620   stackPtrOffsetReg: $sgpr32
622 body: |
623   bb.0:
624     liveins: $vgpr0_vgpr1, $vgpr2
626     ; GFX6-LABEL: name: store_local_v2s32_align8
627     ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
628     ; GFX6-NEXT: {{  $}}
629     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
630     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
631     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
632     ; GFX6-NEXT: DS_WRITE_B64 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (<2 x s32>), addrspace 3)
633     ; GFX7-LABEL: name: store_local_v2s32_align8
634     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
635     ; GFX7-NEXT: {{  $}}
636     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
637     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
638     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
639     ; GFX7-NEXT: DS_WRITE_B64 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (<2 x s32>), addrspace 3)
640     ; GFX9-LABEL: name: store_local_v2s32_align8
641     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
642     ; GFX9-NEXT: {{  $}}
643     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
644     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
645     ; GFX9-NEXT: DS_WRITE_B64_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (<2 x s32>), addrspace 3)
646     ; GFX10-LABEL: name: store_local_v2s32_align8
647     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
648     ; GFX10-NEXT: {{  $}}
649     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
650     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
651     ; GFX10-NEXT: DS_WRITE_B64_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (<2 x s32>), addrspace 3)
652     %0:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
653     %1:vgpr(p3) = COPY $vgpr2
654     G_STORE %0, %1 :: (store (<2 x s32>), align 8, addrspace 3)
660 name: store_local_v4s16_align8
661 legalized:       true
662 regBankSelected: true
663 tracksRegLiveness: true
664 machineFunctionInfo:
665   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
666   stackPtrOffsetReg: $sgpr32
668 body: |
669   bb.0:
670     liveins: $vgpr0_vgpr1, $vgpr2
672     ; GFX6-LABEL: name: store_local_v4s16_align8
673     ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
674     ; GFX6-NEXT: {{  $}}
675     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
676     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
677     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
678     ; GFX6-NEXT: DS_WRITE_B64 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (<4 x s16>), addrspace 3)
679     ; GFX7-LABEL: name: store_local_v4s16_align8
680     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
681     ; GFX7-NEXT: {{  $}}
682     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
683     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
684     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
685     ; GFX7-NEXT: DS_WRITE_B64 [[COPY1]], [[COPY]], 0, 0, implicit $m0, implicit $exec :: (store (<4 x s16>), addrspace 3)
686     ; GFX9-LABEL: name: store_local_v4s16_align8
687     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
688     ; GFX9-NEXT: {{  $}}
689     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
690     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
691     ; GFX9-NEXT: DS_WRITE_B64_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (<4 x s16>), addrspace 3)
692     ; GFX10-LABEL: name: store_local_v4s16_align8
693     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
694     ; GFX10-NEXT: {{  $}}
695     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
696     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
697     ; GFX10-NEXT: DS_WRITE_B64_gfx9 [[COPY1]], [[COPY]], 0, 0, implicit $exec :: (store (<4 x s16>), addrspace 3)
698     %0:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
699     %1:vgpr(p3) = COPY $vgpr2
700     G_STORE %0, %1 :: (store (<4 x s16>), align 8, addrspace 3)
706 name: store_local_s64_align4_from_1_gep_1016
707 legalized:       true
708 regBankSelected: true
709 tracksRegLiveness: true
710 machineFunctionInfo:
711   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
712   stackPtrOffsetReg: $sgpr32
714 body: |
715   bb.0:
716     liveins:  $vgpr0_vgpr1, $vgpr2
718     ; GFX6-LABEL: name: store_local_s64_align4_from_1_gep_1016
719     ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
720     ; GFX6-NEXT: {{  $}}
721     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
722     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(p3) = COPY $vgpr2
723     ; GFX6-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1016
724     ; GFX6-NEXT: [[PTR_ADD:%[0-9]+]]:vgpr(p3) = G_PTR_ADD [[COPY1]], [[C]](s32)
725     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
726     ; GFX6-NEXT: G_STORE [[COPY]](s64), [[PTR_ADD]](p3) :: (store (s64), align 4, addrspace 3)
727     ; GFX7-LABEL: name: store_local_s64_align4_from_1_gep_1016
728     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
729     ; GFX7-NEXT: {{  $}}
730     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
731     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
732     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
733     ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
734     ; GFX7-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
735     ; GFX7-NEXT: DS_WRITE2_B32 [[COPY1]], [[COPY3]], [[COPY2]], 254, 255, 0, implicit $m0, implicit $exec :: (store (s64), align 4, addrspace 3)
736     ; GFX9-LABEL: name: store_local_s64_align4_from_1_gep_1016
737     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
738     ; GFX9-NEXT: {{  $}}
739     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
740     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
741     ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
742     ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
743     ; GFX9-NEXT: DS_WRITE2_B32_gfx9 [[COPY1]], [[COPY3]], [[COPY2]], 254, 255, 0, implicit $exec :: (store (s64), align 4, addrspace 3)
744     ; GFX10-LABEL: name: store_local_s64_align4_from_1_gep_1016
745     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
746     ; GFX10-NEXT: {{  $}}
747     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
748     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
749     ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
750     ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
751     ; GFX10-NEXT: DS_WRITE2_B32_gfx9 [[COPY1]], [[COPY3]], [[COPY2]], 254, 255, 0, implicit $exec :: (store (s64), align 4, addrspace 3)
752     %0:vgpr(s64) = COPY $vgpr0_vgpr1
753     %1:vgpr(p3) = COPY $vgpr2
754     %2:vgpr(s32) = G_CONSTANT i32 1016
755     %3:vgpr(p3) = G_PTR_ADD %1, %2
756     G_STORE %0, %3 :: (store (s64), align 4, addrspace 3)
762 name: store_local_s64_align4_from_1_gep_1020
763 legalized:       true
764 regBankSelected: true
765 tracksRegLiveness: true
766 machineFunctionInfo:
767   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
768   stackPtrOffsetReg: $sgpr32
770 body: |
771   bb.0:
772     liveins:  $vgpr0_vgpr1, $vgpr2
774     ; GFX6-LABEL: name: store_local_s64_align4_from_1_gep_1020
775     ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
776     ; GFX6-NEXT: {{  $}}
777     ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
778     ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(p3) = COPY $vgpr2
779     ; GFX6-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1020
780     ; GFX6-NEXT: [[PTR_ADD:%[0-9]+]]:vgpr(p3) = G_PTR_ADD [[COPY1]], [[C]](s32)
781     ; GFX6-NEXT: $m0 = S_MOV_B32 -1
782     ; GFX6-NEXT: G_STORE [[COPY]](s64), [[PTR_ADD]](p3) :: (store (s64), align 4, addrspace 3)
783     ; GFX7-LABEL: name: store_local_s64_align4_from_1_gep_1020
784     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2
785     ; GFX7-NEXT: {{  $}}
786     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
787     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
788     ; GFX7-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1020, implicit $exec
789     ; GFX7-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY1]], [[V_MOV_B32_e32_]], 0, implicit $exec
790     ; GFX7-NEXT: $m0 = S_MOV_B32 -1
791     ; GFX7-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
792     ; GFX7-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
793     ; GFX7-NEXT: DS_WRITE2_B32 [[V_ADD_CO_U32_e64_]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $m0, implicit $exec :: (store (s64), align 4, addrspace 3)
794     ; GFX9-LABEL: name: store_local_s64_align4_from_1_gep_1020
795     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2
796     ; GFX9-NEXT: {{  $}}
797     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
798     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
799     ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1020, implicit $exec
800     ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY1]], [[V_MOV_B32_e32_]], 0, implicit $exec
801     ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
802     ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
803     ; GFX9-NEXT: DS_WRITE2_B32_gfx9 [[V_ADD_U32_e64_]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $exec :: (store (s64), align 4, addrspace 3)
804     ; GFX10-LABEL: name: store_local_s64_align4_from_1_gep_1020
805     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2
806     ; GFX10-NEXT: {{  $}}
807     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
808     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
809     ; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1020, implicit $exec
810     ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY1]], [[V_MOV_B32_e32_]], 0, implicit $exec
811     ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
812     ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
813     ; GFX10-NEXT: DS_WRITE2_B32_gfx9 [[V_ADD_U32_e64_]], [[COPY3]], [[COPY2]], 0, 1, 0, implicit $exec :: (store (s64), align 4, addrspace 3)
814     %0:vgpr(s64) = COPY $vgpr0_vgpr1
815     %1:vgpr(p3) = COPY $vgpr2
816     %2:vgpr(s32) = G_CONSTANT i32 1020
817     %3:vgpr(p3) = G_PTR_ADD %1, %2
818     G_STORE %0, %3 :: (store (s64), align 4, addrspace 3)