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 -disable-gisel-legality-check -o - %s | FileCheck -check-prefix=GFX7 %s
4 # RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -disable-gisel-legality-check -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: load_local_s32_from_4
14 tracksRegLiveness: true
20 ; GFX6-LABEL: name: load_local_s32_from_4
21 ; GFX6: liveins: $vgpr0
23 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
24 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
25 ; GFX6-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32), addrspace 3)
26 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_B32_]]
28 ; GFX7-LABEL: name: load_local_s32_from_4
29 ; GFX7: liveins: $vgpr0
31 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
32 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
33 ; GFX7-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32), addrspace 3)
34 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_B32_]]
36 ; GFX9-LABEL: name: load_local_s32_from_4
37 ; GFX9: liveins: $vgpr0
39 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
40 ; GFX9-NEXT: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s32), addrspace 3)
41 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
43 ; GFX10-LABEL: name: load_local_s32_from_4
44 ; GFX10: liveins: $vgpr0
46 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
47 ; GFX10-NEXT: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s32), addrspace 3)
48 ; GFX10-NEXT: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
49 %0:vgpr(p3) = COPY $vgpr0
50 %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 3)
57 name: load_local_s32_from_2
60 tracksRegLiveness: true
66 ; GFX6-LABEL: name: load_local_s32_from_2
67 ; GFX6: liveins: $vgpr0
69 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
70 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
71 ; GFX6-NEXT: [[DS_READ_U16_:%[0-9]+]]:vgpr_32 = DS_READ_U16 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s16), addrspace 3)
72 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_U16_]]
74 ; GFX7-LABEL: name: load_local_s32_from_2
75 ; GFX7: liveins: $vgpr0
77 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
78 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
79 ; GFX7-NEXT: [[DS_READ_U16_:%[0-9]+]]:vgpr_32 = DS_READ_U16 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s16), addrspace 3)
80 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_U16_]]
82 ; GFX9-LABEL: name: load_local_s32_from_2
83 ; GFX9: liveins: $vgpr0
85 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
86 ; GFX9-NEXT: [[DS_READ_U16_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U16_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s16), addrspace 3)
87 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_U16_gfx9_]]
89 ; GFX10-LABEL: name: load_local_s32_from_2
90 ; GFX10: liveins: $vgpr0
92 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
93 ; GFX10-NEXT: [[DS_READ_U16_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U16_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s16), addrspace 3)
94 ; GFX10-NEXT: $vgpr0 = COPY [[DS_READ_U16_gfx9_]]
95 %0:vgpr(p3) = COPY $vgpr0
96 %1:vgpr(s32) = G_LOAD %0 :: (load (s16), align 2, addrspace 3)
103 name: load_local_s32_from_1
105 regBankSelected: true
106 tracksRegLiveness: true
108 scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
109 stackPtrOffsetReg: $sgpr32
115 ; GFX6-LABEL: name: load_local_s32_from_1
116 ; GFX6: liveins: $vgpr0
118 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
119 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
120 ; GFX6-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
121 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_U8_]]
123 ; GFX7-LABEL: name: load_local_s32_from_1
124 ; GFX7: liveins: $vgpr0
126 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
127 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
128 ; GFX7-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
129 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_U8_]]
131 ; GFX9-LABEL: name: load_local_s32_from_1
132 ; GFX9: liveins: $vgpr0
134 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
135 ; GFX9-NEXT: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s8), addrspace 3)
136 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
138 ; GFX10-LABEL: name: load_local_s32_from_1
139 ; GFX10: liveins: $vgpr0
141 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
142 ; GFX10-NEXT: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s8), addrspace 3)
143 ; GFX10-NEXT: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
144 %0:vgpr(p3) = COPY $vgpr0
145 %1:vgpr(s32) = G_LOAD %0 :: (load (s8), align 1, addrspace 3)
152 name: load_local_v2s32
154 regBankSelected: true
155 tracksRegLiveness: true
161 ; GFX6-LABEL: name: load_local_v2s32
162 ; GFX6: liveins: $vgpr0
164 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
165 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
166 ; GFX6-NEXT: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<2 x s32>), addrspace 3)
167 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
169 ; GFX7-LABEL: name: load_local_v2s32
170 ; GFX7: liveins: $vgpr0
172 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
173 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
174 ; GFX7-NEXT: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<2 x s32>), addrspace 3)
175 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
177 ; GFX9-LABEL: name: load_local_v2s32
178 ; GFX9: liveins: $vgpr0
180 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
181 ; GFX9-NEXT: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<2 x s32>), addrspace 3)
182 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
184 ; GFX10-LABEL: name: load_local_v2s32
185 ; GFX10: liveins: $vgpr0
187 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
188 ; GFX10-NEXT: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<2 x s32>), addrspace 3)
189 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
190 %0:vgpr(p3) = COPY $vgpr0
191 %1:vgpr(<2 x s32>) = G_LOAD %0 :: (load (<2 x s32>), align 8, addrspace 3)
192 $vgpr0_vgpr1 = COPY %1
198 name: load_local_v2s32_align4
200 regBankSelected: true
201 tracksRegLiveness: true
207 ; GFX6-LABEL: name: load_local_v2s32_align4
208 ; GFX6: liveins: $vgpr0
210 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
211 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
212 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:vreg_64(<2 x s32>) = G_LOAD [[COPY]](p3) :: (load (<2 x s32>), align 4, addrspace 3)
213 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](<2 x s32>)
215 ; GFX7-LABEL: name: load_local_v2s32_align4
216 ; GFX7: liveins: $vgpr0
218 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
219 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
220 ; GFX7-NEXT: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (<2 x s32>), align 4, addrspace 3)
221 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
223 ; GFX9-LABEL: name: load_local_v2s32_align4
224 ; GFX9: liveins: $vgpr0
226 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
227 ; GFX9-NEXT: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<2 x s32>), align 4, addrspace 3)
228 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
230 ; GFX10-LABEL: name: load_local_v2s32_align4
231 ; GFX10: liveins: $vgpr0
233 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
234 ; GFX10-NEXT: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<2 x s32>), align 4, addrspace 3)
235 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
236 %0:vgpr(p3) = COPY $vgpr0
237 %1:vgpr(<2 x s32>) = G_LOAD %0 :: (load (<2 x s32>), align 4, addrspace 3)
238 $vgpr0_vgpr1 = COPY %1
246 regBankSelected: true
247 tracksRegLiveness: true
253 ; GFX6-LABEL: name: load_local_s64
254 ; GFX6: liveins: $vgpr0
256 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
257 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
258 ; GFX6-NEXT: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s64), addrspace 3)
259 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
261 ; GFX7-LABEL: name: load_local_s64
262 ; GFX7: liveins: $vgpr0
264 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
265 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
266 ; GFX7-NEXT: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s64), addrspace 3)
267 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
269 ; GFX9-LABEL: name: load_local_s64
270 ; GFX9: liveins: $vgpr0
272 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
273 ; GFX9-NEXT: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s64), addrspace 3)
274 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
276 ; GFX10-LABEL: name: load_local_s64
277 ; GFX10: liveins: $vgpr0
279 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
280 ; GFX10-NEXT: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s64), addrspace 3)
281 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
282 %0:vgpr(p3) = COPY $vgpr0
283 %1:vgpr(s64) = G_LOAD %0 :: (load (s64), align 8, addrspace 3)
284 $vgpr0_vgpr1 = COPY %1
290 name: load_local_s64_align4
292 regBankSelected: true
293 tracksRegLiveness: true
299 ; GFX6-LABEL: name: load_local_s64_align4
300 ; GFX6: liveins: $vgpr0
302 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
303 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
304 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:vreg_64(s64) = G_LOAD [[COPY]](p3) :: (load (s64), align 4, addrspace 3)
305 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](s64)
307 ; GFX7-LABEL: name: load_local_s64_align4
308 ; GFX7: liveins: $vgpr0
310 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
311 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
312 ; GFX7-NEXT: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (s64), align 4, addrspace 3)
313 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
315 ; GFX9-LABEL: name: load_local_s64_align4
316 ; GFX9: liveins: $vgpr0
318 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
319 ; GFX9-NEXT: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (s64), align 4, addrspace 3)
320 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
322 ; GFX10-LABEL: name: load_local_s64_align4
323 ; GFX10: liveins: $vgpr0
325 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
326 ; GFX10-NEXT: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (s64), align 4, addrspace 3)
327 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
328 %0:vgpr(p3) = COPY $vgpr0
329 %1:vgpr(s64) = G_LOAD %0 :: (load (s64), align 4, addrspace 3)
330 $vgpr0_vgpr1 = COPY %1
336 name: load_local_p3_from_4
338 regBankSelected: true
339 tracksRegLiveness: true
345 ; GFX6-LABEL: name: load_local_p3_from_4
346 ; GFX6: liveins: $vgpr0
348 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
349 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
350 ; GFX6-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (p3), addrspace 3)
351 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_B32_]]
353 ; GFX7-LABEL: name: load_local_p3_from_4
354 ; GFX7: liveins: $vgpr0
356 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
357 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
358 ; GFX7-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (p3), addrspace 3)
359 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_B32_]]
361 ; GFX9-LABEL: name: load_local_p3_from_4
362 ; GFX9: liveins: $vgpr0
364 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
365 ; GFX9-NEXT: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (p3), addrspace 3)
366 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
368 ; GFX10-LABEL: name: load_local_p3_from_4
369 ; GFX10: liveins: $vgpr0
371 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
372 ; GFX10-NEXT: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (p3), addrspace 3)
373 ; GFX10-NEXT: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
374 %0:vgpr(p3) = COPY $vgpr0
375 %1:vgpr(p3) = G_LOAD %0 :: (load (p3), align 4, addrspace 3)
382 name: load_local_p5_from_4
384 regBankSelected: true
385 tracksRegLiveness: true
391 ; GFX6-LABEL: name: load_local_p5_from_4
392 ; GFX6: liveins: $vgpr0
394 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
395 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
396 ; GFX6-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (p5), addrspace 3)
397 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_B32_]]
399 ; GFX7-LABEL: name: load_local_p5_from_4
400 ; GFX7: liveins: $vgpr0
402 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
403 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
404 ; GFX7-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (p5), addrspace 3)
405 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_B32_]]
407 ; GFX9-LABEL: name: load_local_p5_from_4
408 ; GFX9: liveins: $vgpr0
410 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
411 ; GFX9-NEXT: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (p5), addrspace 3)
412 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
414 ; GFX10-LABEL: name: load_local_p5_from_4
415 ; GFX10: liveins: $vgpr0
417 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
418 ; GFX10-NEXT: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (p5), addrspace 3)
419 ; GFX10-NEXT: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
420 %0:vgpr(p3) = COPY $vgpr0
421 %1:vgpr(p5) = G_LOAD %0 :: (load (p5), align 4, addrspace 3)
428 name: load_local_p1_align8
430 regBankSelected: true
431 tracksRegLiveness: true
437 ; GFX6-LABEL: name: load_local_p1_align8
438 ; GFX6: liveins: $vgpr0
440 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
441 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
442 ; GFX6-NEXT: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (p1), addrspace 3)
443 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
445 ; GFX7-LABEL: name: load_local_p1_align8
446 ; GFX7: liveins: $vgpr0
448 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
449 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
450 ; GFX7-NEXT: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (p1), addrspace 3)
451 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
453 ; GFX9-LABEL: name: load_local_p1_align8
454 ; GFX9: liveins: $vgpr0
456 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
457 ; GFX9-NEXT: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (p1), addrspace 3)
458 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
460 ; GFX10-LABEL: name: load_local_p1_align8
461 ; GFX10: liveins: $vgpr0
463 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
464 ; GFX10-NEXT: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (p1), addrspace 3)
465 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
466 %0:vgpr(p3) = COPY $vgpr0
467 %1:vgpr(p1) = G_LOAD %0 :: (load (p1), align 8, addrspace 3)
468 $vgpr0_vgpr1 = COPY %1
474 name: load_local_p1_align4
476 regBankSelected: true
477 tracksRegLiveness: true
483 ; GFX6-LABEL: name: load_local_p1_align4
484 ; GFX6: liveins: $vgpr0
486 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
487 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
488 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p1) = G_LOAD [[COPY]](p3) :: (load (p1), align 4, addrspace 3)
489 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p1)
491 ; GFX7-LABEL: name: load_local_p1_align4
492 ; GFX7: liveins: $vgpr0
494 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
495 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
496 ; GFX7-NEXT: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (p1), align 4, addrspace 3)
497 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
499 ; GFX9-LABEL: name: load_local_p1_align4
500 ; GFX9: liveins: $vgpr0
502 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
503 ; GFX9-NEXT: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (p1), align 4, addrspace 3)
504 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
506 ; GFX10-LABEL: name: load_local_p1_align4
507 ; GFX10: liveins: $vgpr0
509 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
510 ; GFX10-NEXT: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (p1), align 4, addrspace 3)
511 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
512 %0:vgpr(p3) = COPY $vgpr0
513 %1:vgpr(p1) = G_LOAD %0 :: (load (p1), align 4, addrspace 3)
514 $vgpr0_vgpr1 = COPY %1
520 name: load_local_p999_from_8
522 regBankSelected: true
523 tracksRegLiveness: true
529 ; GFX6-LABEL: name: load_local_p999_from_8
530 ; GFX6: liveins: $vgpr0
532 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
533 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
534 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p999) = G_LOAD [[COPY]](p3) :: (load (p999), addrspace 3)
535 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p999)
537 ; GFX7-LABEL: name: load_local_p999_from_8
538 ; GFX7: liveins: $vgpr0
540 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
541 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
542 ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p999) = G_LOAD [[COPY]](p3) :: (load (p999), addrspace 3)
543 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p999)
545 ; GFX9-LABEL: name: load_local_p999_from_8
546 ; GFX9: liveins: $vgpr0
548 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
549 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p999) = G_LOAD [[COPY]](p3) :: (load (p999), addrspace 3)
550 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p999)
552 ; GFX10-LABEL: name: load_local_p999_from_8
553 ; GFX10: liveins: $vgpr0
555 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
556 ; GFX10-NEXT: [[LOAD:%[0-9]+]]:vreg_64(p999) = G_LOAD [[COPY]](p3) :: (load (p999), addrspace 3)
557 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](p999)
558 %0:vgpr(p3) = COPY $vgpr0
559 %1:vgpr(p999) = G_LOAD %0 :: (load (p999), align 8, addrspace 3)
560 $vgpr0_vgpr1 = COPY %1
566 name: load_local_v2p3
568 regBankSelected: true
569 tracksRegLiveness: true
575 ; GFX6-LABEL: name: load_local_v2p3
576 ; GFX6: liveins: $vgpr0
578 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
579 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
580 ; GFX6-NEXT: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<2 x s32>), addrspace 3)
581 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
583 ; GFX7-LABEL: name: load_local_v2p3
584 ; GFX7: liveins: $vgpr0
586 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
587 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
588 ; GFX7-NEXT: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<2 x s32>), addrspace 3)
589 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
591 ; GFX9-LABEL: name: load_local_v2p3
592 ; GFX9: liveins: $vgpr0
594 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
595 ; GFX9-NEXT: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<2 x s32>), addrspace 3)
596 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
598 ; GFX10-LABEL: name: load_local_v2p3
599 ; GFX10: liveins: $vgpr0
601 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
602 ; GFX10-NEXT: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<2 x s32>), addrspace 3)
603 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
604 %0:vgpr(p3) = COPY $vgpr0
605 %1:vgpr(<2 x s32>) = G_LOAD %0 :: (load (<2 x s32>), align 8, addrspace 3)
606 %2:vgpr(<2 x p3>) = G_BITCAST %1(<2 x s32>)
607 $vgpr0_vgpr1 = COPY %2
613 name: load_local_v2s16
615 regBankSelected: true
616 tracksRegLiveness: true
622 ; GFX6-LABEL: name: load_local_v2s16
623 ; GFX6: liveins: $vgpr0
625 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
626 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
627 ; GFX6-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<2 x s16>), addrspace 3)
628 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_B32_]]
630 ; GFX7-LABEL: name: load_local_v2s16
631 ; GFX7: liveins: $vgpr0
633 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
634 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
635 ; GFX7-NEXT: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<2 x s16>), addrspace 3)
636 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_B32_]]
638 ; GFX9-LABEL: name: load_local_v2s16
639 ; GFX9: liveins: $vgpr0
641 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
642 ; GFX9-NEXT: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<2 x s16>), addrspace 3)
643 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
645 ; GFX10-LABEL: name: load_local_v2s16
646 ; GFX10: liveins: $vgpr0
648 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
649 ; GFX10-NEXT: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<2 x s16>), addrspace 3)
650 ; GFX10-NEXT: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
651 %0:vgpr(p3) = COPY $vgpr0
652 %1:vgpr(<2 x s16>) = G_LOAD %0 :: (load (<2 x s16>), align 4, addrspace 3)
659 name: load_local_v4s16
661 regBankSelected: true
662 tracksRegLiveness: true
668 ; GFX6-LABEL: name: load_local_v4s16
669 ; GFX6: liveins: $vgpr0
671 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
672 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
673 ; GFX6-NEXT: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<4 x s16>), addrspace 3)
674 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
676 ; GFX7-LABEL: name: load_local_v4s16
677 ; GFX7: liveins: $vgpr0
679 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
680 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
681 ; GFX7-NEXT: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<4 x s16>), addrspace 3)
682 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
684 ; GFX9-LABEL: name: load_local_v4s16
685 ; GFX9: liveins: $vgpr0
687 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
688 ; GFX9-NEXT: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<4 x s16>), addrspace 3)
689 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
691 ; GFX10-LABEL: name: load_local_v4s16
692 ; GFX10: liveins: $vgpr0
694 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
695 ; GFX10-NEXT: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<4 x s16>), addrspace 3)
696 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
697 %0:vgpr(p3) = COPY $vgpr0
698 %1:vgpr(<4 x s16>) = G_LOAD %0 :: (load (<4 x s16>), align 8, addrspace 3)
699 $vgpr0_vgpr1 = COPY %1
705 # name: load_local_v6s16
707 # regBankSelected: true
708 # tracksRegLiveness: true
709 # machineFunctionInfo:
710 # scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
711 # stackPtrOffsetReg: $sgpr32
717 # %0:vgpr(p3) = COPY $vgpr0
718 # %1:vgpr(<6 x s16>) = G_LOAD %0 :: (load (<6 x s16>), align 4, addrspace 3)
719 # $vgpr0_vgpr1_vgpr2 = COPY %1
723 ################################################################################
724 ### Stress addressing modes
725 ################################################################################
729 name: load_local_s32_from_1_gep_65535
731 regBankSelected: true
732 tracksRegLiveness: true
738 ; GFX6-LABEL: name: load_local_s32_from_1_gep_65535
739 ; GFX6: liveins: $vgpr0
741 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
742 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65535, implicit $exec
743 ; GFX6-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 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
744 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
745 ; GFX6-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[V_ADD_CO_U32_e64_]], 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
746 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_U8_]]
748 ; GFX7-LABEL: name: load_local_s32_from_1_gep_65535
749 ; GFX7: liveins: $vgpr0
751 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
752 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
753 ; GFX7-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[COPY]], 65535, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
754 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_U8_]]
756 ; GFX9-LABEL: name: load_local_s32_from_1_gep_65535
757 ; GFX9: liveins: $vgpr0
759 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
760 ; GFX9-NEXT: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[COPY]], 65535, 0, implicit $exec :: (load (s8), addrspace 3)
761 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
763 ; GFX10-LABEL: name: load_local_s32_from_1_gep_65535
764 ; GFX10: liveins: $vgpr0
766 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
767 ; GFX10-NEXT: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[COPY]], 65535, 0, implicit $exec :: (load (s8), addrspace 3)
768 ; GFX10-NEXT: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
769 %0:vgpr(p3) = COPY $vgpr0
770 %1:vgpr(s32) = G_CONSTANT i32 65535
771 %2:vgpr(p3) = G_PTR_ADD %0, %1
772 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 3)
779 name: load_local_s32_from_1_gep_65535_known_bits_base_address
781 regBankSelected: true
782 tracksRegLiveness: true
788 ; GFX6-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
789 ; GFX6: liveins: $vgpr0
791 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
792 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
793 ; GFX6-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
794 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
795 ; GFX6-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[V_AND_B32_e64_]], 65535, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
796 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_U8_]]
798 ; GFX7-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
799 ; GFX7: liveins: $vgpr0
801 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
802 ; GFX7-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
803 ; GFX7-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
804 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
805 ; GFX7-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[V_AND_B32_e64_]], 65535, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
806 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_U8_]]
808 ; GFX9-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
809 ; GFX9: liveins: $vgpr0
811 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
812 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
813 ; GFX9-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
814 ; GFX9-NEXT: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[V_AND_B32_e64_]], 65535, 0, implicit $exec :: (load (s8), addrspace 3)
815 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
817 ; GFX10-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
818 ; GFX10: liveins: $vgpr0
820 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
821 ; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
822 ; GFX10-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
823 ; GFX10-NEXT: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[V_AND_B32_e64_]], 65535, 0, implicit $exec :: (load (s8), addrspace 3)
824 ; GFX10-NEXT: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
825 %0:vgpr(s32) = COPY $vgpr0
826 %1:vgpr(s32) = G_CONSTANT i32 2147483647
827 %2:vgpr(s32) = G_AND %0, %1
828 %3:vgpr(p3) = G_INTTOPTR %2
829 %4:vgpr(s32) = G_CONSTANT i32 65535
830 %5:vgpr(p3) = G_PTR_ADD %3, %4
831 %6:vgpr(s32) = G_LOAD %5 :: (load (s8), align 1, addrspace 3)
838 name: load_local_s32_from_1_gep_65536
840 regBankSelected: true
841 tracksRegLiveness: true
847 ; GFX6-LABEL: name: load_local_s32_from_1_gep_65536
848 ; GFX6: liveins: $vgpr0
850 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
851 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65536, implicit $exec
852 ; GFX6-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 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
853 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
854 ; GFX6-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[V_ADD_CO_U32_e64_]], 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
855 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_U8_]]
857 ; GFX7-LABEL: name: load_local_s32_from_1_gep_65536
858 ; GFX7: liveins: $vgpr0
860 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
861 ; GFX7-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65536, implicit $exec
862 ; 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 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
863 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
864 ; GFX7-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[V_ADD_CO_U32_e64_]], 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
865 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_U8_]]
867 ; GFX9-LABEL: name: load_local_s32_from_1_gep_65536
868 ; GFX9: liveins: $vgpr0
870 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
871 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65536, implicit $exec
872 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
873 ; GFX9-NEXT: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[V_ADD_U32_e64_]], 0, 0, implicit $exec :: (load (s8), addrspace 3)
874 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
876 ; GFX10-LABEL: name: load_local_s32_from_1_gep_65536
877 ; GFX10: liveins: $vgpr0
879 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
880 ; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65536, implicit $exec
881 ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
882 ; GFX10-NEXT: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[V_ADD_U32_e64_]], 0, 0, implicit $exec :: (load (s8), addrspace 3)
883 ; GFX10-NEXT: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
884 %0:vgpr(p3) = COPY $vgpr0
885 %1:vgpr(s32) = G_CONSTANT i32 65536
886 %2:vgpr(p3) = G_PTR_ADD %0, %1
887 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 3)
894 name: load_local_s32_from_1_gep_m1
896 regBankSelected: true
897 tracksRegLiveness: true
903 ; GFX6-LABEL: name: load_local_s32_from_1_gep_m1
904 ; GFX6: liveins: $vgpr0
906 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
907 ; GFX6-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
908 ; GFX6-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 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
909 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
910 ; GFX6-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[V_ADD_CO_U32_e64_]], 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
911 ; GFX6-NEXT: $vgpr0 = COPY [[DS_READ_U8_]]
913 ; GFX7-LABEL: name: load_local_s32_from_1_gep_m1
914 ; GFX7: liveins: $vgpr0
916 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
917 ; GFX7-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
918 ; 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 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
919 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
920 ; GFX7-NEXT: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[V_ADD_CO_U32_e64_]], 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
921 ; GFX7-NEXT: $vgpr0 = COPY [[DS_READ_U8_]]
923 ; GFX9-LABEL: name: load_local_s32_from_1_gep_m1
924 ; GFX9: liveins: $vgpr0
926 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
927 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
928 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
929 ; GFX9-NEXT: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[V_ADD_U32_e64_]], 0, 0, implicit $exec :: (load (s8), addrspace 3)
930 ; GFX9-NEXT: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
932 ; GFX10-LABEL: name: load_local_s32_from_1_gep_m1
933 ; GFX10: liveins: $vgpr0
935 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
936 ; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
937 ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
938 ; GFX10-NEXT: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[V_ADD_U32_e64_]], 0, 0, implicit $exec :: (load (s8), addrspace 3)
939 ; GFX10-NEXT: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
940 %0:vgpr(p3) = COPY $vgpr0
941 %1:vgpr(s32) = G_CONSTANT i32 -1
942 %2:vgpr(p3) = G_PTR_ADD %0, %1
943 %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 3)
950 name: load_local_s64_align4_from_1_gep_1016
952 regBankSelected: true
953 tracksRegLiveness: true
957 liveins: $vgpr0_vgpr1
959 ; GFX6-LABEL: name: load_local_s64_align4_from_1_gep_1016
960 ; GFX6: liveins: $vgpr0_vgpr1
962 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
963 ; GFX6-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1016
964 ; GFX6-NEXT: [[PTR_ADD:%[0-9]+]]:vgpr(p3) = G_PTR_ADD [[COPY]], [[C]](s32)
965 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
966 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:vreg_64(s64) = G_LOAD [[PTR_ADD]](p3) :: (load (s64), align 4, addrspace 3)
967 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](s64)
969 ; GFX7-LABEL: name: load_local_s64_align4_from_1_gep_1016
970 ; GFX7: liveins: $vgpr0_vgpr1
972 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
973 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
974 ; GFX7-NEXT: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 [[COPY]], 254, 255, 0, implicit $m0, implicit $exec :: (load (s64), align 4, addrspace 3)
975 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
977 ; GFX9-LABEL: name: load_local_s64_align4_from_1_gep_1016
978 ; GFX9: liveins: $vgpr0_vgpr1
980 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
981 ; GFX9-NEXT: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 254, 255, 0, implicit $exec :: (load (s64), align 4, addrspace 3)
982 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
984 ; GFX10-LABEL: name: load_local_s64_align4_from_1_gep_1016
985 ; GFX10: liveins: $vgpr0_vgpr1
987 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
988 ; GFX10-NEXT: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 254, 255, 0, implicit $exec :: (load (s64), align 4, addrspace 3)
989 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
990 %0:vgpr(p3) = COPY $vgpr0
991 %1:vgpr(s32) = G_CONSTANT i32 1016
992 %2:vgpr(p3) = G_PTR_ADD %0, %1
993 %3:vgpr(s64) = G_LOAD %2 :: (load (s64), align 4, addrspace 3)
994 $vgpr0_vgpr1 = COPY %3
1000 name: load_local_s64_align4_from_1_gep_1020
1002 regBankSelected: true
1003 tracksRegLiveness: true
1007 liveins: $vgpr0_vgpr1
1009 ; GFX6-LABEL: name: load_local_s64_align4_from_1_gep_1020
1010 ; GFX6: liveins: $vgpr0_vgpr1
1012 ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
1013 ; GFX6-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1020
1014 ; GFX6-NEXT: [[PTR_ADD:%[0-9]+]]:vgpr(p3) = G_PTR_ADD [[COPY]], [[C]](s32)
1015 ; GFX6-NEXT: $m0 = S_MOV_B32 -1
1016 ; GFX6-NEXT: [[LOAD:%[0-9]+]]:vreg_64(s64) = G_LOAD [[PTR_ADD]](p3) :: (load (s64), align 4, addrspace 3)
1017 ; GFX6-NEXT: $vgpr0_vgpr1 = COPY [[LOAD]](s64)
1019 ; GFX7-LABEL: name: load_local_s64_align4_from_1_gep_1020
1020 ; GFX7: liveins: $vgpr0_vgpr1
1022 ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
1023 ; GFX7-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1020, implicit $exec
1024 ; 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 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
1025 ; GFX7-NEXT: $m0 = S_MOV_B32 -1
1026 ; GFX7-NEXT: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 [[V_ADD_CO_U32_e64_]], 0, 1, 0, implicit $m0, implicit $exec :: (load (s64), align 4, addrspace 3)
1027 ; GFX7-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
1029 ; GFX9-LABEL: name: load_local_s64_align4_from_1_gep_1020
1030 ; GFX9: liveins: $vgpr0_vgpr1
1032 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
1033 ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1020, implicit $exec
1034 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
1035 ; GFX9-NEXT: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[V_ADD_U32_e64_]], 0, 1, 0, implicit $exec :: (load (s64), align 4, addrspace 3)
1036 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
1038 ; GFX10-LABEL: name: load_local_s64_align4_from_1_gep_1020
1039 ; GFX10: liveins: $vgpr0_vgpr1
1040 ; GFX10-NEXT: {{ $}}
1041 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
1042 ; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1020, implicit $exec
1043 ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
1044 ; GFX10-NEXT: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[V_ADD_U32_e64_]], 0, 1, 0, implicit $exec :: (load (s64), align 4, addrspace 3)
1045 ; GFX10-NEXT: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
1046 %0:vgpr(p3) = COPY $vgpr0
1047 %1:vgpr(s32) = G_CONSTANT i32 1020
1048 %2:vgpr(p3) = G_PTR_ADD %0, %1
1049 %3:vgpr(s64) = G_LOAD %2 :: (load (s64), align 4, addrspace 3)
1050 $vgpr0_vgpr1 = COPY %3