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
11 name: store_local_s32_to_4
14 tracksRegLiveness: true
16 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
17 stackPtrOffsetReg: $sgpr32
21 liveins: $vgpr0, $vgpr1
23 ; GFX6-LABEL: name: store_local_s32_to_4
24 ; GFX6: liveins: $vgpr0, $vgpr1
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
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
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
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)
57 name: store_local_s32_to_2
60 tracksRegLiveness: true
62 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
63 stackPtrOffsetReg: $sgpr32
67 liveins: $vgpr0, $vgpr1
69 ; GFX6-LABEL: name: store_local_s32_to_2
70 ; GFX6: liveins: $vgpr0, $vgpr1
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
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
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
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)
103 name: store_local_s32_to_1
105 regBankSelected: true
106 tracksRegLiveness: true
108 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
109 stackPtrOffsetReg: $sgpr32
113 liveins: $vgpr0, $vgpr1
115 ; GFX6-LABEL: name: store_local_s32_to_1
116 ; GFX6: liveins: $vgpr0, $vgpr1
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
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
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
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
151 regBankSelected: true
152 tracksRegLiveness: true
154 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
155 stackPtrOffsetReg: $sgpr32
159 liveins: $vgpr0, $vgpr1
161 ; GFX6-LABEL: name: store_local_v2s16
162 ; GFX6: liveins: $vgpr0, $vgpr1
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
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
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
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)
197 regBankSelected: true
198 tracksRegLiveness: true
200 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
201 stackPtrOffsetReg: $sgpr32
205 liveins: $vgpr0, $vgpr1
207 ; GFX6-LABEL: name: store_local_p3
208 ; GFX6: liveins: $vgpr0, $vgpr1
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
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
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
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
243 regBankSelected: true
244 tracksRegLiveness: true
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
277 regBankSelected: true
278 tracksRegLiveness: true
280 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
281 stackPtrOffsetReg: $sgpr32
283 - { id: 0, size: 4096, alignment: 4 }
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
316 regBankSelected: true
317 tracksRegLiveness: true
319 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
320 stackPtrOffsetReg: $sgpr32
324 liveins: $vgpr0_vgpr1, $vgpr2
326 ; GFX6-LABEL: name: store_local_s64_align4
327 ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
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
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
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
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
368 regBankSelected: true
369 tracksRegLiveness: true
371 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
372 stackPtrOffsetReg: $sgpr32
376 liveins: $vgpr0_vgpr1, $vgpr2
378 ; GFX6-LABEL: name: store_local_p1_align4
379 ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
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
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
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
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
420 regBankSelected: true
421 tracksRegLiveness: true
423 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
424 stackPtrOffsetReg: $sgpr32
428 liveins: $vgpr0_vgpr1, $vgpr2
430 ; GFX6-LABEL: name: store_local_v2s32_align4
431 ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
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
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
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
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
472 regBankSelected: true
473 tracksRegLiveness: true
475 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
476 stackPtrOffsetReg: $sgpr32
480 liveins: $vgpr0_vgpr1, $vgpr2
482 ; GFX6-LABEL: name: store_local_v4s16_align4
483 ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
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
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
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
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
524 regBankSelected: true
525 tracksRegLiveness: true
527 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
528 stackPtrOffsetReg: $sgpr32
532 liveins: $vgpr0_vgpr1, $vgpr2
534 ; GFX6-LABEL: name: store_local_s64_align8
535 ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
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
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
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
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
570 regBankSelected: true
571 tracksRegLiveness: true
573 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
574 stackPtrOffsetReg: $sgpr32
578 liveins: $vgpr0_vgpr1, $vgpr2
580 ; GFX6-LABEL: name: store_local_p1_align8
581 ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
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
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
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
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
616 regBankSelected: true
617 tracksRegLiveness: true
619 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
620 stackPtrOffsetReg: $sgpr32
624 liveins: $vgpr0_vgpr1, $vgpr2
626 ; GFX6-LABEL: name: store_local_v2s32_align8
627 ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
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
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
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
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
662 regBankSelected: true
663 tracksRegLiveness: true
665 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
666 stackPtrOffsetReg: $sgpr32
670 liveins: $vgpr0_vgpr1, $vgpr2
672 ; GFX6-LABEL: name: store_local_v4s16_align8
673 ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
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
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
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
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
708 regBankSelected: true
709 tracksRegLiveness: true
711 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
712 stackPtrOffsetReg: $sgpr32
716 liveins: $vgpr0_vgpr1, $vgpr2
718 ; GFX6-LABEL: name: store_local_s64_align4_from_1_gep_1016
719 ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
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
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
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
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
764 regBankSelected: true
765 tracksRegLiveness: true
767 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
768 stackPtrOffsetReg: $sgpr32
772 liveins: $vgpr0_vgpr1, $vgpr2
774 ; GFX6-LABEL: name: store_local_s64_align4_from_1_gep_1020
775 ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2
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
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
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
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)