1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX6 %s
3# RUN: llc -march=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s
4# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s
5# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
6# RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
7
8---
9
10name: load_local_s32_from_4
11legalized:       true
12regBankSelected: true
13tracksRegLiveness: true
14
15body: |
16  bb.0:
17    liveins:  $vgpr0
18
19    ; GFX6-LABEL: name: load_local_s32_from_4
20    ; GFX6: liveins: $vgpr0
21    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
22    ; GFX6: $m0 = S_MOV_B32 -1
23    ; GFX6: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32), addrspace 3)
24    ; GFX6: $vgpr0 = COPY [[DS_READ_B32_]]
25    ; GFX7-LABEL: name: load_local_s32_from_4
26    ; GFX7: liveins: $vgpr0
27    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
28    ; GFX7: $m0 = S_MOV_B32 -1
29    ; GFX7: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s32), addrspace 3)
30    ; GFX7: $vgpr0 = COPY [[DS_READ_B32_]]
31    ; GFX9-LABEL: name: load_local_s32_from_4
32    ; GFX9: liveins: $vgpr0
33    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
34    ; GFX9: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s32), addrspace 3)
35    ; GFX9: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
36    %0:vgpr(p3) = COPY $vgpr0
37    %1:vgpr(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 3)
38    $vgpr0 = COPY %1
39
40...
41
42---
43
44name: load_local_s32_from_2
45legalized:       true
46regBankSelected: true
47tracksRegLiveness: true
48
49body: |
50  bb.0:
51    liveins:  $vgpr0
52
53    ; GFX6-LABEL: name: load_local_s32_from_2
54    ; GFX6: liveins: $vgpr0
55    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
56    ; GFX6: $m0 = S_MOV_B32 -1
57    ; GFX6: [[DS_READ_U16_:%[0-9]+]]:vgpr_32 = DS_READ_U16 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s16), addrspace 3)
58    ; GFX6: $vgpr0 = COPY [[DS_READ_U16_]]
59    ; GFX7-LABEL: name: load_local_s32_from_2
60    ; GFX7: liveins: $vgpr0
61    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
62    ; GFX7: $m0 = S_MOV_B32 -1
63    ; GFX7: [[DS_READ_U16_:%[0-9]+]]:vgpr_32 = DS_READ_U16 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s16), addrspace 3)
64    ; GFX7: $vgpr0 = COPY [[DS_READ_U16_]]
65    ; GFX9-LABEL: name: load_local_s32_from_2
66    ; GFX9: liveins: $vgpr0
67    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
68    ; GFX9: [[DS_READ_U16_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U16_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s16), addrspace 3)
69    ; GFX9: $vgpr0 = COPY [[DS_READ_U16_gfx9_]]
70    %0:vgpr(p3) = COPY $vgpr0
71    %1:vgpr(s32) = G_LOAD %0 :: (load (s16), align 2, addrspace 3)
72    $vgpr0 = COPY %1
73
74...
75
76---
77
78name: load_local_s32_from_1
79legalized:       true
80regBankSelected: true
81tracksRegLiveness: true
82machineFunctionInfo:
83  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
84  stackPtrOffsetReg: $sgpr32
85
86body: |
87  bb.0:
88    liveins:  $vgpr0
89
90    ; GFX6-LABEL: name: load_local_s32_from_1
91    ; GFX6: liveins: $vgpr0
92    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
93    ; GFX6: $m0 = S_MOV_B32 -1
94    ; GFX6: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
95    ; GFX6: $vgpr0 = COPY [[DS_READ_U8_]]
96    ; GFX7-LABEL: name: load_local_s32_from_1
97    ; GFX7: liveins: $vgpr0
98    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
99    ; GFX7: $m0 = S_MOV_B32 -1
100    ; GFX7: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
101    ; GFX7: $vgpr0 = COPY [[DS_READ_U8_]]
102    ; GFX9-LABEL: name: load_local_s32_from_1
103    ; GFX9: liveins: $vgpr0
104    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
105    ; GFX9: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s8), addrspace 3)
106    ; GFX9: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
107    %0:vgpr(p3) = COPY $vgpr0
108    %1:vgpr(s32) = G_LOAD %0 :: (load (s8), align 1, addrspace 3)
109    $vgpr0 = COPY %1
110
111...
112
113---
114
115name: load_local_v2s32
116legalized:       true
117regBankSelected: true
118tracksRegLiveness: true
119
120body: |
121  bb.0:
122    liveins:  $vgpr0
123
124    ; GFX6-LABEL: name: load_local_v2s32
125    ; GFX6: liveins: $vgpr0
126    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
127    ; GFX6: $m0 = S_MOV_B32 -1
128    ; GFX6: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<2 x s32>), addrspace 3)
129    ; GFX6: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
130    ; GFX7-LABEL: name: load_local_v2s32
131    ; GFX7: liveins: $vgpr0
132    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
133    ; GFX7: $m0 = S_MOV_B32 -1
134    ; GFX7: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<2 x s32>), addrspace 3)
135    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
136    ; GFX9-LABEL: name: load_local_v2s32
137    ; GFX9: liveins: $vgpr0
138    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
139    ; GFX9: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<2 x s32>), addrspace 3)
140    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
141    %0:vgpr(p3) = COPY $vgpr0
142    %1:vgpr(<2 x s32>) = G_LOAD %0 :: (load (<2 x s32>), align 8, addrspace 3)
143    $vgpr0_vgpr1 = COPY %1
144
145...
146
147---
148
149name: load_local_v2s32_align4
150legalized:       true
151regBankSelected: true
152tracksRegLiveness: true
153
154body: |
155  bb.0:
156    liveins:  $vgpr0
157
158    ; GFX6-LABEL: name: load_local_v2s32_align4
159    ; GFX6: liveins: $vgpr0
160    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
161    ; GFX6: $m0 = S_MOV_B32 -1
162    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(<2 x s32>) = G_LOAD [[COPY]](p3) :: (load (<2 x s32>), align 4, addrspace 3)
163    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](<2 x s32>)
164    ; GFX7-LABEL: name: load_local_v2s32_align4
165    ; GFX7: liveins: $vgpr0
166    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
167    ; GFX7: $m0 = S_MOV_B32 -1
168    ; GFX7: [[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)
169    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
170    ; GFX9-LABEL: name: load_local_v2s32_align4
171    ; GFX9: liveins: $vgpr0
172    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
173    ; GFX9: [[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)
174    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
175    %0:vgpr(p3) = COPY $vgpr0
176    %1:vgpr(<2 x s32>) = G_LOAD %0 :: (load (<2 x s32>), align 4, addrspace 3)
177    $vgpr0_vgpr1 = COPY %1
178
179...
180
181---
182
183name: load_local_s64
184legalized:       true
185regBankSelected: true
186tracksRegLiveness: true
187
188body: |
189  bb.0:
190    liveins:  $vgpr0
191
192    ; GFX6-LABEL: name: load_local_s64
193    ; GFX6: liveins: $vgpr0
194    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
195    ; GFX6: $m0 = S_MOV_B32 -1
196    ; GFX6: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s64), addrspace 3)
197    ; GFX6: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
198    ; GFX7-LABEL: name: load_local_s64
199    ; GFX7: liveins: $vgpr0
200    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
201    ; GFX7: $m0 = S_MOV_B32 -1
202    ; GFX7: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (s64), addrspace 3)
203    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
204    ; GFX9-LABEL: name: load_local_s64
205    ; GFX9: liveins: $vgpr0
206    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
207    ; GFX9: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (s64), addrspace 3)
208    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
209    %0:vgpr(p3) = COPY $vgpr0
210    %1:vgpr(s64) = G_LOAD %0 :: (load (s64), align 8, addrspace 3)
211    $vgpr0_vgpr1 = COPY %1
212
213...
214
215---
216
217name: load_local_s64_align4
218legalized:       true
219regBankSelected: true
220tracksRegLiveness: true
221
222body: |
223  bb.0:
224    liveins:  $vgpr0
225
226    ; GFX6-LABEL: name: load_local_s64_align4
227    ; GFX6: liveins: $vgpr0
228    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
229    ; GFX6: $m0 = S_MOV_B32 -1
230    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(s64) = G_LOAD [[COPY]](p3) :: (load (s64), align 4, addrspace 3)
231    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](s64)
232    ; GFX7-LABEL: name: load_local_s64_align4
233    ; GFX7: liveins: $vgpr0
234    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
235    ; GFX7: $m0 = S_MOV_B32 -1
236    ; GFX7: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (s64), align 4, addrspace 3)
237    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
238    ; GFX9-LABEL: name: load_local_s64_align4
239    ; GFX9: liveins: $vgpr0
240    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
241    ; GFX9: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (s64), align 4, addrspace 3)
242    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
243    %0:vgpr(p3) = COPY $vgpr0
244    %1:vgpr(s64) = G_LOAD %0 :: (load (s64), align 4, addrspace 3)
245    $vgpr0_vgpr1 = COPY %1
246
247...
248
249---
250
251name: load_local_p3_from_4
252legalized:       true
253regBankSelected: true
254tracksRegLiveness: true
255
256body: |
257  bb.0:
258    liveins:  $vgpr0
259
260    ; GFX6-LABEL: name: load_local_p3_from_4
261    ; GFX6: liveins: $vgpr0
262    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
263    ; GFX6: $m0 = S_MOV_B32 -1
264    ; GFX6: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (p3), addrspace 3)
265    ; GFX6: $vgpr0 = COPY [[DS_READ_B32_]]
266    ; GFX7-LABEL: name: load_local_p3_from_4
267    ; GFX7: liveins: $vgpr0
268    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
269    ; GFX7: $m0 = S_MOV_B32 -1
270    ; GFX7: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (p3), addrspace 3)
271    ; GFX7: $vgpr0 = COPY [[DS_READ_B32_]]
272    ; GFX9-LABEL: name: load_local_p3_from_4
273    ; GFX9: liveins: $vgpr0
274    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
275    ; GFX9: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (p3), addrspace 3)
276    ; GFX9: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
277    %0:vgpr(p3) = COPY $vgpr0
278    %1:vgpr(p3) = G_LOAD %0 :: (load (p3), align 4, addrspace 3)
279    $vgpr0 = COPY %1
280
281...
282
283---
284
285name: load_local_p5_from_4
286legalized:       true
287regBankSelected: true
288tracksRegLiveness: true
289
290body: |
291  bb.0:
292    liveins:  $vgpr0
293
294    ; GFX6-LABEL: name: load_local_p5_from_4
295    ; GFX6: liveins: $vgpr0
296    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
297    ; GFX6: $m0 = S_MOV_B32 -1
298    ; GFX6: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (p5), addrspace 3)
299    ; GFX6: $vgpr0 = COPY [[DS_READ_B32_]]
300    ; GFX7-LABEL: name: load_local_p5_from_4
301    ; GFX7: liveins: $vgpr0
302    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
303    ; GFX7: $m0 = S_MOV_B32 -1
304    ; GFX7: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (p5), addrspace 3)
305    ; GFX7: $vgpr0 = COPY [[DS_READ_B32_]]
306    ; GFX9-LABEL: name: load_local_p5_from_4
307    ; GFX9: liveins: $vgpr0
308    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
309    ; GFX9: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (p5), addrspace 3)
310    ; GFX9: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
311    %0:vgpr(p3) = COPY $vgpr0
312    %1:vgpr(p5) = G_LOAD %0 :: (load (p5), align 4, addrspace 3)
313    $vgpr0 = COPY %1
314
315...
316
317---
318
319name: load_local_p1_align8
320legalized:       true
321regBankSelected: true
322tracksRegLiveness: true
323
324body: |
325  bb.0:
326    liveins:  $vgpr0
327
328    ; GFX6-LABEL: name: load_local_p1_align8
329    ; GFX6: liveins: $vgpr0
330    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
331    ; GFX6: $m0 = S_MOV_B32 -1
332    ; GFX6: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (p1), addrspace 3)
333    ; GFX6: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
334    ; GFX7-LABEL: name: load_local_p1_align8
335    ; GFX7: liveins: $vgpr0
336    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
337    ; GFX7: $m0 = S_MOV_B32 -1
338    ; GFX7: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (p1), addrspace 3)
339    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
340    ; GFX9-LABEL: name: load_local_p1_align8
341    ; GFX9: liveins: $vgpr0
342    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
343    ; GFX9: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (p1), addrspace 3)
344    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
345    %0:vgpr(p3) = COPY $vgpr0
346    %1:vgpr(p1) = G_LOAD %0 :: (load (p1), align 8, addrspace 3)
347    $vgpr0_vgpr1 = COPY %1
348
349...
350
351---
352
353name: load_local_p1_align4
354legalized:       true
355regBankSelected: true
356tracksRegLiveness: true
357
358body: |
359  bb.0:
360    liveins:  $vgpr0
361
362    ; GFX6-LABEL: name: load_local_p1_align4
363    ; GFX6: liveins: $vgpr0
364    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
365    ; GFX6: $m0 = S_MOV_B32 -1
366    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(p1) = G_LOAD [[COPY]](p3) :: (load (p1), align 4, addrspace 3)
367    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](p1)
368    ; GFX7-LABEL: name: load_local_p1_align4
369    ; GFX7: liveins: $vgpr0
370    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
371    ; GFX7: $m0 = S_MOV_B32 -1
372    ; GFX7: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (p1), align 4, addrspace 3)
373    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
374    ; GFX9-LABEL: name: load_local_p1_align4
375    ; GFX9: liveins: $vgpr0
376    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
377    ; GFX9: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (p1), align 4, addrspace 3)
378    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
379    %0:vgpr(p3) = COPY $vgpr0
380    %1:vgpr(p1) = G_LOAD %0 :: (load (p1), align 4, addrspace 3)
381    $vgpr0_vgpr1 = COPY %1
382
383...
384
385---
386
387name: load_local_p999_from_8
388legalized:       true
389regBankSelected: true
390tracksRegLiveness: true
391
392body: |
393  bb.0:
394    liveins:  $vgpr0
395
396    ; GFX6-LABEL: name: load_local_p999_from_8
397    ; GFX6: liveins: $vgpr0
398    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
399    ; GFX6: $m0 = S_MOV_B32 -1
400    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(p999) = G_LOAD [[COPY]](p3) :: (load (p999), addrspace 3)
401    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](p999)
402    ; GFX7-LABEL: name: load_local_p999_from_8
403    ; GFX7: liveins: $vgpr0
404    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
405    ; GFX7: $m0 = S_MOV_B32 -1
406    ; GFX7: [[LOAD:%[0-9]+]]:vreg_64(p999) = G_LOAD [[COPY]](p3) :: (load (p999), addrspace 3)
407    ; GFX7: $vgpr0_vgpr1 = COPY [[LOAD]](p999)
408    ; GFX9-LABEL: name: load_local_p999_from_8
409    ; GFX9: liveins: $vgpr0
410    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
411    ; GFX9: [[LOAD:%[0-9]+]]:vreg_64(p999) = G_LOAD [[COPY]](p3) :: (load (p999), addrspace 3)
412    ; GFX9: $vgpr0_vgpr1 = COPY [[LOAD]](p999)
413    %0:vgpr(p3) = COPY $vgpr0
414    %1:vgpr(p999) = G_LOAD %0 :: (load (p999), align 8, addrspace 3)
415    $vgpr0_vgpr1 = COPY %1
416
417...
418
419---
420
421name: load_local_v2p3
422legalized:       true
423regBankSelected: true
424tracksRegLiveness: true
425
426body: |
427  bb.0:
428    liveins:  $vgpr0
429
430    ; GFX6-LABEL: name: load_local_v2p3
431    ; GFX6: liveins: $vgpr0
432    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
433    ; GFX6: $m0 = S_MOV_B32 -1
434    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(<2 x p3>) = G_LOAD [[COPY]](p3) :: (load (<2 x p3>), addrspace 3)
435    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](<2 x p3>)
436    ; GFX7-LABEL: name: load_local_v2p3
437    ; GFX7: liveins: $vgpr0
438    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
439    ; GFX7: $m0 = S_MOV_B32 -1
440    ; GFX7: [[LOAD:%[0-9]+]]:vreg_64(<2 x p3>) = G_LOAD [[COPY]](p3) :: (load (<2 x p3>), addrspace 3)
441    ; GFX7: $vgpr0_vgpr1 = COPY [[LOAD]](<2 x p3>)
442    ; GFX9-LABEL: name: load_local_v2p3
443    ; GFX9: liveins: $vgpr0
444    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
445    ; GFX9: [[LOAD:%[0-9]+]]:vreg_64(<2 x p3>) = G_LOAD [[COPY]](p3) :: (load (<2 x p3>), addrspace 3)
446    ; GFX9: $vgpr0_vgpr1 = COPY [[LOAD]](<2 x p3>)
447    %0:vgpr(p3) = COPY $vgpr0
448    %1:vgpr(<2 x p3>) = G_LOAD %0 :: (load (<2 x p3>), align 8, addrspace 3)
449    $vgpr0_vgpr1 = COPY %1
450
451...
452
453---
454
455name: load_local_v2s16
456legalized:       true
457regBankSelected: true
458tracksRegLiveness: true
459
460body: |
461  bb.0:
462    liveins:  $vgpr0
463
464    ; GFX6-LABEL: name: load_local_v2s16
465    ; GFX6: liveins: $vgpr0
466    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
467    ; GFX6: $m0 = S_MOV_B32 -1
468    ; GFX6: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<2 x s16>), addrspace 3)
469    ; GFX6: $vgpr0 = COPY [[DS_READ_B32_]]
470    ; GFX7-LABEL: name: load_local_v2s16
471    ; GFX7: liveins: $vgpr0
472    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
473    ; GFX7: $m0 = S_MOV_B32 -1
474    ; GFX7: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<2 x s16>), addrspace 3)
475    ; GFX7: $vgpr0 = COPY [[DS_READ_B32_]]
476    ; GFX9-LABEL: name: load_local_v2s16
477    ; GFX9: liveins: $vgpr0
478    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
479    ; GFX9: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<2 x s16>), addrspace 3)
480    ; GFX9: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
481    %0:vgpr(p3) = COPY $vgpr0
482    %1:vgpr(<2 x s16>) = G_LOAD %0 :: (load (<2 x s16>), align 4, addrspace 3)
483    $vgpr0 = COPY %1
484
485...
486
487---
488
489name: load_local_v4s16
490legalized:       true
491regBankSelected: true
492tracksRegLiveness: true
493
494body: |
495  bb.0:
496    liveins:  $vgpr0
497
498    ; GFX6-LABEL: name: load_local_v4s16
499    ; GFX6: liveins: $vgpr0
500    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
501    ; GFX6: $m0 = S_MOV_B32 -1
502    ; GFX6: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<4 x s16>), addrspace 3)
503    ; GFX6: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
504    ; GFX7-LABEL: name: load_local_v4s16
505    ; GFX7: liveins: $vgpr0
506    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
507    ; GFX7: $m0 = S_MOV_B32 -1
508    ; GFX7: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<4 x s16>), addrspace 3)
509    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
510    ; GFX9-LABEL: name: load_local_v4s16
511    ; GFX9: liveins: $vgpr0
512    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
513    ; GFX9: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<4 x s16>), addrspace 3)
514    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
515    %0:vgpr(p3) = COPY $vgpr0
516    %1:vgpr(<4 x s16>) = G_LOAD %0 :: (load (<4 x s16>), align 8, addrspace 3)
517    $vgpr0_vgpr1 = COPY %1
518
519...
520
521# ---
522
523# name: load_local_v6s16
524# legalized:       true
525# regBankSelected: true
526# tracksRegLiveness: true
527# machineFunctionInfo:
528#   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
529#   stackPtrOffsetReg: $sgpr32
530
531# body: |
532#   bb.0:
533#     liveins:  $vgpr0
534
535#     %0:vgpr(p3) = COPY $vgpr0
536#     %1:vgpr(<6 x  s16>) = G_LOAD %0 :: (load (<6 x s16>), align 4, addrspace 3)
537#     $vgpr0_vgpr1_vgpr2 = COPY %1
538
539# ...
540
541################################################################################
542### Stress addressing modes
543################################################################################
544
545---
546
547name: load_local_s32_from_1_gep_65535
548legalized:       true
549regBankSelected: true
550tracksRegLiveness: true
551
552body: |
553  bb.0:
554    liveins:  $vgpr0
555
556    ; GFX6-LABEL: name: load_local_s32_from_1_gep_65535
557    ; GFX6: liveins: $vgpr0
558    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
559    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65535, implicit $exec
560    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
561    ; GFX6: $m0 = S_MOV_B32 -1
562    ; GFX6: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 %2, 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
563    ; GFX6: $vgpr0 = COPY [[DS_READ_U8_]]
564    ; GFX7-LABEL: name: load_local_s32_from_1_gep_65535
565    ; GFX7: liveins: $vgpr0
566    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
567    ; GFX7: $m0 = S_MOV_B32 -1
568    ; GFX7: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[COPY]], 65535, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
569    ; GFX7: $vgpr0 = COPY [[DS_READ_U8_]]
570    ; GFX9-LABEL: name: load_local_s32_from_1_gep_65535
571    ; GFX9: liveins: $vgpr0
572    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
573    ; GFX9: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[COPY]], 65535, 0, implicit $exec :: (load (s8), addrspace 3)
574    ; GFX9: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
575    %0:vgpr(p3) = COPY $vgpr0
576    %1:vgpr(s32) = G_CONSTANT i32 65535
577    %2:vgpr(p3) = G_PTR_ADD %0, %1
578    %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 3)
579    $vgpr0 = COPY %3
580
581...
582
583---
584
585name: load_local_s32_from_1_gep_65535_known_bits_base_address
586legalized:       true
587regBankSelected: true
588tracksRegLiveness: true
589
590body: |
591  bb.0:
592    liveins:  $vgpr0
593
594    ; GFX6-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
595    ; GFX6: liveins: $vgpr0
596    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
597    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
598    ; GFX6: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
599    ; GFX6: $m0 = S_MOV_B32 -1
600    ; GFX6: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[V_AND_B32_e64_]], 65535, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
601    ; GFX6: $vgpr0 = COPY [[DS_READ_U8_]]
602    ; GFX7-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
603    ; GFX7: liveins: $vgpr0
604    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
605    ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
606    ; GFX7: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
607    ; GFX7: $m0 = S_MOV_B32 -1
608    ; GFX7: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[V_AND_B32_e64_]], 65535, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
609    ; GFX7: $vgpr0 = COPY [[DS_READ_U8_]]
610    ; GFX9-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
611    ; GFX9: liveins: $vgpr0
612    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
613    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
614    ; GFX9: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
615    ; GFX9: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[V_AND_B32_e64_]], 65535, 0, implicit $exec :: (load (s8), addrspace 3)
616    ; GFX9: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
617    %0:vgpr(s32) = COPY $vgpr0
618    %1:vgpr(s32) = G_CONSTANT i32 2147483647
619    %2:vgpr(s32) = G_AND %0, %1
620    %3:vgpr(p3) = G_INTTOPTR %2
621    %4:vgpr(s32) = G_CONSTANT i32 65535
622    %5:vgpr(p3) = G_PTR_ADD %3, %4
623    %6:vgpr(s32) = G_LOAD %5 :: (load (s8), align 1, addrspace 3)
624    $vgpr0 = COPY %6
625
626...
627
628---
629
630name: load_local_s32_from_1_gep_65536
631legalized:       true
632regBankSelected: true
633tracksRegLiveness: true
634
635body: |
636  bb.0:
637    liveins:  $vgpr0
638
639    ; GFX6-LABEL: name: load_local_s32_from_1_gep_65536
640    ; GFX6: liveins: $vgpr0
641    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
642    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65536, implicit $exec
643    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
644    ; GFX6: $m0 = S_MOV_B32 -1
645    ; GFX6: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 %2, 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
646    ; GFX6: $vgpr0 = COPY [[DS_READ_U8_]]
647    ; GFX7-LABEL: name: load_local_s32_from_1_gep_65536
648    ; GFX7: liveins: $vgpr0
649    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
650    ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65536, implicit $exec
651    ; GFX7: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
652    ; GFX7: $m0 = S_MOV_B32 -1
653    ; GFX7: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 %2, 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
654    ; GFX7: $vgpr0 = COPY [[DS_READ_U8_]]
655    ; GFX9-LABEL: name: load_local_s32_from_1_gep_65536
656    ; GFX9: liveins: $vgpr0
657    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
658    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65536, implicit $exec
659    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
660    ; GFX9: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[V_ADD_U32_e64_]], 0, 0, implicit $exec :: (load (s8), addrspace 3)
661    ; GFX9: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
662    %0:vgpr(p3) = COPY $vgpr0
663    %1:vgpr(s32) = G_CONSTANT i32 65536
664    %2:vgpr(p3) = G_PTR_ADD %0, %1
665    %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 3)
666    $vgpr0 = COPY %3
667
668...
669
670---
671
672name: load_local_s32_from_1_gep_m1
673legalized:       true
674regBankSelected: true
675tracksRegLiveness: true
676
677body: |
678  bb.0:
679    liveins:  $vgpr0
680
681    ; GFX6-LABEL: name: load_local_s32_from_1_gep_m1
682    ; GFX6: liveins: $vgpr0
683    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
684    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
685    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
686    ; GFX6: $m0 = S_MOV_B32 -1
687    ; GFX6: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 %2, 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
688    ; GFX6: $vgpr0 = COPY [[DS_READ_U8_]]
689    ; GFX7-LABEL: name: load_local_s32_from_1_gep_m1
690    ; GFX7: liveins: $vgpr0
691    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
692    ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
693    ; GFX7: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
694    ; GFX7: $m0 = S_MOV_B32 -1
695    ; GFX7: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 %2, 0, 0, implicit $m0, implicit $exec :: (load (s8), addrspace 3)
696    ; GFX7: $vgpr0 = COPY [[DS_READ_U8_]]
697    ; GFX9-LABEL: name: load_local_s32_from_1_gep_m1
698    ; GFX9: liveins: $vgpr0
699    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
700    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
701    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
702    ; GFX9: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[V_ADD_U32_e64_]], 0, 0, implicit $exec :: (load (s8), addrspace 3)
703    ; GFX9: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
704    %0:vgpr(p3) = COPY $vgpr0
705    %1:vgpr(s32) = G_CONSTANT i32 -1
706    %2:vgpr(p3) = G_PTR_ADD %0, %1
707    %3:vgpr(s32) = G_LOAD %2 :: (load (s8), align 1, addrspace 3)
708    $vgpr0 = COPY %3
709
710...
711
712---
713
714name: load_local_s64_align4_from_1_gep_1016
715legalized:       true
716regBankSelected: true
717tracksRegLiveness: true
718
719body: |
720  bb.0:
721    liveins:  $vgpr0_vgpr1
722
723    ; GFX6-LABEL: name: load_local_s64_align4_from_1_gep_1016
724    ; GFX6: liveins: $vgpr0_vgpr1
725    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
726    ; GFX6: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1016
727    ; GFX6: [[PTR_ADD:%[0-9]+]]:vgpr(p3) = G_PTR_ADD [[COPY]], [[C]](s32)
728    ; GFX6: $m0 = S_MOV_B32 -1
729    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(s64) = G_LOAD [[PTR_ADD]](p3) :: (load (s64), align 4, addrspace 3)
730    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](s64)
731    ; GFX7-LABEL: name: load_local_s64_align4_from_1_gep_1016
732    ; GFX7: liveins: $vgpr0_vgpr1
733    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
734    ; GFX7: $m0 = S_MOV_B32 -1
735    ; GFX7: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 [[COPY]], 254, 255, 0, implicit $m0, implicit $exec :: (load (s64), align 4, addrspace 3)
736    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
737    ; GFX9-LABEL: name: load_local_s64_align4_from_1_gep_1016
738    ; GFX9: liveins: $vgpr0_vgpr1
739    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
740    ; GFX9: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 254, 255, 0, implicit $exec :: (load (s64), align 4, addrspace 3)
741    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
742    %0:vgpr(p3) = COPY $vgpr0
743    %1:vgpr(s32) = G_CONSTANT i32 1016
744    %2:vgpr(p3) = G_PTR_ADD %0, %1
745    %3:vgpr(s64) = G_LOAD %2 :: (load (s64), align 4, addrspace 3)
746    $vgpr0_vgpr1 = COPY %3
747
748...
749
750---
751
752name: load_local_s64_align4_from_1_gep_1020
753legalized:       true
754regBankSelected: true
755tracksRegLiveness: true
756
757body: |
758  bb.0:
759    liveins:  $vgpr0_vgpr1
760
761    ; GFX6-LABEL: name: load_local_s64_align4_from_1_gep_1020
762    ; GFX6: liveins: $vgpr0_vgpr1
763    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
764    ; GFX6: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1020
765    ; GFX6: [[PTR_ADD:%[0-9]+]]:vgpr(p3) = G_PTR_ADD [[COPY]], [[C]](s32)
766    ; GFX6: $m0 = S_MOV_B32 -1
767    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(s64) = G_LOAD [[PTR_ADD]](p3) :: (load (s64), align 4, addrspace 3)
768    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](s64)
769    ; GFX7-LABEL: name: load_local_s64_align4_from_1_gep_1020
770    ; GFX7: liveins: $vgpr0_vgpr1
771    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
772    ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1020, implicit $exec
773    ; GFX7: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
774    ; GFX7: $m0 = S_MOV_B32 -1
775    ; GFX7: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 %2, 0, 1, 0, implicit $m0, implicit $exec :: (load (s64), align 4, addrspace 3)
776    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
777    ; GFX9-LABEL: name: load_local_s64_align4_from_1_gep_1020
778    ; GFX9: liveins: $vgpr0_vgpr1
779    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
780    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1020, implicit $exec
781    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
782    ; GFX9: [[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)
783    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
784    %0:vgpr(p3) = COPY $vgpr0
785    %1:vgpr(s32) = G_CONSTANT i32 1020
786    %2:vgpr(p3) = G_PTR_ADD %0, %1
787    %3:vgpr(s64) = G_LOAD %2 :: (load (s64), align 4, addrspace 3)
788    $vgpr0_vgpr1 = COPY %3
789
790...
791