xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-local.mir (revision ea33af63def2aff8a8ca13331dd99ac9541b2ce9)
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
8
9---
10
11name: load_local_s32_from_4
12legalized:       true
13regBankSelected: true
14tracksRegLiveness: true
15
16body: |
17  bb.0:
18    liveins:  $vgpr0
19
20    ; GFX6-LABEL: name: load_local_s32_from_4
21    ; GFX6: liveins: $vgpr0
22    ; GFX6-NEXT: {{  $}}
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_]]
27    ;
28    ; GFX7-LABEL: name: load_local_s32_from_4
29    ; GFX7: liveins: $vgpr0
30    ; GFX7-NEXT: {{  $}}
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_]]
35    ;
36    ; GFX9-LABEL: name: load_local_s32_from_4
37    ; GFX9: liveins: $vgpr0
38    ; GFX9-NEXT: {{  $}}
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_]]
42    ;
43    ; GFX10-LABEL: name: load_local_s32_from_4
44    ; GFX10: liveins: $vgpr0
45    ; GFX10-NEXT: {{  $}}
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)
51    $vgpr0 = COPY %1
52
53...
54
55---
56
57name: load_local_s32_from_2
58legalized:       true
59regBankSelected: true
60tracksRegLiveness: true
61
62body: |
63  bb.0:
64    liveins:  $vgpr0
65
66    ; GFX6-LABEL: name: load_local_s32_from_2
67    ; GFX6: liveins: $vgpr0
68    ; GFX6-NEXT: {{  $}}
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_]]
73    ;
74    ; GFX7-LABEL: name: load_local_s32_from_2
75    ; GFX7: liveins: $vgpr0
76    ; GFX7-NEXT: {{  $}}
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_]]
81    ;
82    ; GFX9-LABEL: name: load_local_s32_from_2
83    ; GFX9: liveins: $vgpr0
84    ; GFX9-NEXT: {{  $}}
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_]]
88    ;
89    ; GFX10-LABEL: name: load_local_s32_from_2
90    ; GFX10: liveins: $vgpr0
91    ; GFX10-NEXT: {{  $}}
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)
97    $vgpr0 = COPY %1
98
99...
100
101---
102
103name: load_local_s32_from_1
104legalized:       true
105regBankSelected: true
106tracksRegLiveness: true
107machineFunctionInfo:
108  scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
109  stackPtrOffsetReg: $sgpr32
110
111body: |
112  bb.0:
113    liveins:  $vgpr0
114
115    ; GFX6-LABEL: name: load_local_s32_from_1
116    ; GFX6: liveins: $vgpr0
117    ; GFX6-NEXT: {{  $}}
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_]]
122    ;
123    ; GFX7-LABEL: name: load_local_s32_from_1
124    ; GFX7: liveins: $vgpr0
125    ; GFX7-NEXT: {{  $}}
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_]]
130    ;
131    ; GFX9-LABEL: name: load_local_s32_from_1
132    ; GFX9: liveins: $vgpr0
133    ; GFX9-NEXT: {{  $}}
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_]]
137    ;
138    ; GFX10-LABEL: name: load_local_s32_from_1
139    ; GFX10: liveins: $vgpr0
140    ; GFX10-NEXT: {{  $}}
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)
146    $vgpr0 = COPY %1
147
148...
149
150---
151
152name: load_local_v2s32
153legalized:       true
154regBankSelected: true
155tracksRegLiveness: true
156
157body: |
158  bb.0:
159    liveins:  $vgpr0
160
161    ; GFX6-LABEL: name: load_local_v2s32
162    ; GFX6: liveins: $vgpr0
163    ; GFX6-NEXT: {{  $}}
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_]]
168    ;
169    ; GFX7-LABEL: name: load_local_v2s32
170    ; GFX7: liveins: $vgpr0
171    ; GFX7-NEXT: {{  $}}
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_]]
176    ;
177    ; GFX9-LABEL: name: load_local_v2s32
178    ; GFX9: liveins: $vgpr0
179    ; GFX9-NEXT: {{  $}}
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_]]
183    ;
184    ; GFX10-LABEL: name: load_local_v2s32
185    ; GFX10: liveins: $vgpr0
186    ; GFX10-NEXT: {{  $}}
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
193
194...
195
196---
197
198name: load_local_v2s32_align4
199legalized:       true
200regBankSelected: true
201tracksRegLiveness: true
202
203body: |
204  bb.0:
205    liveins:  $vgpr0
206
207    ; GFX6-LABEL: name: load_local_v2s32_align4
208    ; GFX6: liveins: $vgpr0
209    ; GFX6-NEXT: {{  $}}
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>)
214    ;
215    ; GFX7-LABEL: name: load_local_v2s32_align4
216    ; GFX7: liveins: $vgpr0
217    ; GFX7-NEXT: {{  $}}
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_]]
222    ;
223    ; GFX9-LABEL: name: load_local_v2s32_align4
224    ; GFX9: liveins: $vgpr0
225    ; GFX9-NEXT: {{  $}}
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_]]
229    ;
230    ; GFX10-LABEL: name: load_local_v2s32_align4
231    ; GFX10: liveins: $vgpr0
232    ; GFX10-NEXT: {{  $}}
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
239
240...
241
242---
243
244name: load_local_s64
245legalized:       true
246regBankSelected: true
247tracksRegLiveness: true
248
249body: |
250  bb.0:
251    liveins:  $vgpr0
252
253    ; GFX6-LABEL: name: load_local_s64
254    ; GFX6: liveins: $vgpr0
255    ; GFX6-NEXT: {{  $}}
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_]]
260    ;
261    ; GFX7-LABEL: name: load_local_s64
262    ; GFX7: liveins: $vgpr0
263    ; GFX7-NEXT: {{  $}}
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_]]
268    ;
269    ; GFX9-LABEL: name: load_local_s64
270    ; GFX9: liveins: $vgpr0
271    ; GFX9-NEXT: {{  $}}
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_]]
275    ;
276    ; GFX10-LABEL: name: load_local_s64
277    ; GFX10: liveins: $vgpr0
278    ; GFX10-NEXT: {{  $}}
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
285
286...
287
288---
289
290name: load_local_s64_align4
291legalized:       true
292regBankSelected: true
293tracksRegLiveness: true
294
295body: |
296  bb.0:
297    liveins:  $vgpr0
298
299    ; GFX6-LABEL: name: load_local_s64_align4
300    ; GFX6: liveins: $vgpr0
301    ; GFX6-NEXT: {{  $}}
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)
306    ;
307    ; GFX7-LABEL: name: load_local_s64_align4
308    ; GFX7: liveins: $vgpr0
309    ; GFX7-NEXT: {{  $}}
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_]]
314    ;
315    ; GFX9-LABEL: name: load_local_s64_align4
316    ; GFX9: liveins: $vgpr0
317    ; GFX9-NEXT: {{  $}}
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_]]
321    ;
322    ; GFX10-LABEL: name: load_local_s64_align4
323    ; GFX10: liveins: $vgpr0
324    ; GFX10-NEXT: {{  $}}
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
331
332...
333
334---
335
336name: load_local_p3_from_4
337legalized:       true
338regBankSelected: true
339tracksRegLiveness: true
340
341body: |
342  bb.0:
343    liveins:  $vgpr0
344
345    ; GFX6-LABEL: name: load_local_p3_from_4
346    ; GFX6: liveins: $vgpr0
347    ; GFX6-NEXT: {{  $}}
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_]]
352    ;
353    ; GFX7-LABEL: name: load_local_p3_from_4
354    ; GFX7: liveins: $vgpr0
355    ; GFX7-NEXT: {{  $}}
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_]]
360    ;
361    ; GFX9-LABEL: name: load_local_p3_from_4
362    ; GFX9: liveins: $vgpr0
363    ; GFX9-NEXT: {{  $}}
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_]]
367    ;
368    ; GFX10-LABEL: name: load_local_p3_from_4
369    ; GFX10: liveins: $vgpr0
370    ; GFX10-NEXT: {{  $}}
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)
376    $vgpr0 = COPY %1
377
378...
379
380---
381
382name: load_local_p5_from_4
383legalized:       true
384regBankSelected: true
385tracksRegLiveness: true
386
387body: |
388  bb.0:
389    liveins:  $vgpr0
390
391    ; GFX6-LABEL: name: load_local_p5_from_4
392    ; GFX6: liveins: $vgpr0
393    ; GFX6-NEXT: {{  $}}
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_]]
398    ;
399    ; GFX7-LABEL: name: load_local_p5_from_4
400    ; GFX7: liveins: $vgpr0
401    ; GFX7-NEXT: {{  $}}
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_]]
406    ;
407    ; GFX9-LABEL: name: load_local_p5_from_4
408    ; GFX9: liveins: $vgpr0
409    ; GFX9-NEXT: {{  $}}
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_]]
413    ;
414    ; GFX10-LABEL: name: load_local_p5_from_4
415    ; GFX10: liveins: $vgpr0
416    ; GFX10-NEXT: {{  $}}
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)
422    $vgpr0 = COPY %1
423
424...
425
426---
427
428name: load_local_p1_align8
429legalized:       true
430regBankSelected: true
431tracksRegLiveness: true
432
433body: |
434  bb.0:
435    liveins:  $vgpr0
436
437    ; GFX6-LABEL: name: load_local_p1_align8
438    ; GFX6: liveins: $vgpr0
439    ; GFX6-NEXT: {{  $}}
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_]]
444    ;
445    ; GFX7-LABEL: name: load_local_p1_align8
446    ; GFX7: liveins: $vgpr0
447    ; GFX7-NEXT: {{  $}}
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_]]
452    ;
453    ; GFX9-LABEL: name: load_local_p1_align8
454    ; GFX9: liveins: $vgpr0
455    ; GFX9-NEXT: {{  $}}
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_]]
459    ;
460    ; GFX10-LABEL: name: load_local_p1_align8
461    ; GFX10: liveins: $vgpr0
462    ; GFX10-NEXT: {{  $}}
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
469
470...
471
472---
473
474name: load_local_p1_align4
475legalized:       true
476regBankSelected: true
477tracksRegLiveness: true
478
479body: |
480  bb.0:
481    liveins:  $vgpr0
482
483    ; GFX6-LABEL: name: load_local_p1_align4
484    ; GFX6: liveins: $vgpr0
485    ; GFX6-NEXT: {{  $}}
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)
490    ;
491    ; GFX7-LABEL: name: load_local_p1_align4
492    ; GFX7: liveins: $vgpr0
493    ; GFX7-NEXT: {{  $}}
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_]]
498    ;
499    ; GFX9-LABEL: name: load_local_p1_align4
500    ; GFX9: liveins: $vgpr0
501    ; GFX9-NEXT: {{  $}}
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_]]
505    ;
506    ; GFX10-LABEL: name: load_local_p1_align4
507    ; GFX10: liveins: $vgpr0
508    ; GFX10-NEXT: {{  $}}
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
515
516...
517
518---
519
520name: load_local_p999_from_8
521legalized:       true
522regBankSelected: true
523tracksRegLiveness: true
524
525body: |
526  bb.0:
527    liveins:  $vgpr0
528
529    ; GFX6-LABEL: name: load_local_p999_from_8
530    ; GFX6: liveins: $vgpr0
531    ; GFX6-NEXT: {{  $}}
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)
536    ;
537    ; GFX7-LABEL: name: load_local_p999_from_8
538    ; GFX7: liveins: $vgpr0
539    ; GFX7-NEXT: {{  $}}
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)
544    ;
545    ; GFX9-LABEL: name: load_local_p999_from_8
546    ; GFX9: liveins: $vgpr0
547    ; GFX9-NEXT: {{  $}}
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)
551    ;
552    ; GFX10-LABEL: name: load_local_p999_from_8
553    ; GFX10: liveins: $vgpr0
554    ; GFX10-NEXT: {{  $}}
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
561
562...
563
564---
565
566name: load_local_v2p3
567legalized:       true
568regBankSelected: true
569tracksRegLiveness: true
570
571body: |
572  bb.0:
573    liveins:  $vgpr0
574
575    ; GFX6-LABEL: name: load_local_v2p3
576    ; GFX6: liveins: $vgpr0
577    ; GFX6-NEXT: {{  $}}
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_]]
582    ;
583    ; GFX7-LABEL: name: load_local_v2p3
584    ; GFX7: liveins: $vgpr0
585    ; GFX7-NEXT: {{  $}}
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_]]
590    ;
591    ; GFX9-LABEL: name: load_local_v2p3
592    ; GFX9: liveins: $vgpr0
593    ; GFX9-NEXT: {{  $}}
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_]]
597    ;
598    ; GFX10-LABEL: name: load_local_v2p3
599    ; GFX10: liveins: $vgpr0
600    ; GFX10-NEXT: {{  $}}
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
608
609...
610
611---
612
613name: load_local_v2s16
614legalized:       true
615regBankSelected: true
616tracksRegLiveness: true
617
618body: |
619  bb.0:
620    liveins:  $vgpr0
621
622    ; GFX6-LABEL: name: load_local_v2s16
623    ; GFX6: liveins: $vgpr0
624    ; GFX6-NEXT: {{  $}}
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_]]
629    ;
630    ; GFX7-LABEL: name: load_local_v2s16
631    ; GFX7: liveins: $vgpr0
632    ; GFX7-NEXT: {{  $}}
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_]]
637    ;
638    ; GFX9-LABEL: name: load_local_v2s16
639    ; GFX9: liveins: $vgpr0
640    ; GFX9-NEXT: {{  $}}
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_]]
644    ;
645    ; GFX10-LABEL: name: load_local_v2s16
646    ; GFX10: liveins: $vgpr0
647    ; GFX10-NEXT: {{  $}}
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)
653    $vgpr0 = COPY %1
654
655...
656
657---
658
659name: load_local_v4s16
660legalized:       true
661regBankSelected: true
662tracksRegLiveness: true
663
664body: |
665  bb.0:
666    liveins:  $vgpr0
667
668    ; GFX6-LABEL: name: load_local_v4s16
669    ; GFX6: liveins: $vgpr0
670    ; GFX6-NEXT: {{  $}}
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_]]
675    ;
676    ; GFX7-LABEL: name: load_local_v4s16
677    ; GFX7: liveins: $vgpr0
678    ; GFX7-NEXT: {{  $}}
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_]]
683    ;
684    ; GFX9-LABEL: name: load_local_v4s16
685    ; GFX9: liveins: $vgpr0
686    ; GFX9-NEXT: {{  $}}
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_]]
690    ;
691    ; GFX10-LABEL: name: load_local_v4s16
692    ; GFX10: liveins: $vgpr0
693    ; GFX10-NEXT: {{  $}}
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
700
701...
702
703# ---
704
705# name: load_local_v6s16
706# legalized:       true
707# regBankSelected: true
708# tracksRegLiveness: true
709# machineFunctionInfo:
710#   scratchRSrcReg: $sgpr0_sgpr1_sgpr2_sgpr3
711#   stackPtrOffsetReg: $sgpr32
712
713# body: |
714#   bb.0:
715#     liveins:  $vgpr0
716
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
720
721# ...
722
723################################################################################
724### Stress addressing modes
725################################################################################
726
727---
728
729name: load_local_s32_from_1_gep_65535
730legalized:       true
731regBankSelected: true
732tracksRegLiveness: true
733
734body: |
735  bb.0:
736    liveins:  $vgpr0
737
738    ; GFX6-LABEL: name: load_local_s32_from_1_gep_65535
739    ; GFX6: liveins: $vgpr0
740    ; GFX6-NEXT: {{  $}}
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_]]
747    ;
748    ; GFX7-LABEL: name: load_local_s32_from_1_gep_65535
749    ; GFX7: liveins: $vgpr0
750    ; GFX7-NEXT: {{  $}}
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_]]
755    ;
756    ; GFX9-LABEL: name: load_local_s32_from_1_gep_65535
757    ; GFX9: liveins: $vgpr0
758    ; GFX9-NEXT: {{  $}}
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_]]
762    ;
763    ; GFX10-LABEL: name: load_local_s32_from_1_gep_65535
764    ; GFX10: liveins: $vgpr0
765    ; GFX10-NEXT: {{  $}}
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)
773    $vgpr0 = COPY %3
774
775...
776
777---
778
779name: load_local_s32_from_1_gep_65535_known_bits_base_address
780legalized:       true
781regBankSelected: true
782tracksRegLiveness: true
783
784body: |
785  bb.0:
786    liveins:  $vgpr0
787
788    ; GFX6-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
789    ; GFX6: liveins: $vgpr0
790    ; GFX6-NEXT: {{  $}}
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_]]
797    ;
798    ; GFX7-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
799    ; GFX7: liveins: $vgpr0
800    ; GFX7-NEXT: {{  $}}
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_]]
807    ;
808    ; GFX9-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
809    ; GFX9: liveins: $vgpr0
810    ; GFX9-NEXT: {{  $}}
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_]]
816    ;
817    ; GFX10-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
818    ; GFX10: liveins: $vgpr0
819    ; GFX10-NEXT: {{  $}}
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)
832    $vgpr0 = COPY %6
833
834...
835
836---
837
838name: load_local_s32_from_1_gep_65536
839legalized:       true
840regBankSelected: true
841tracksRegLiveness: true
842
843body: |
844  bb.0:
845    liveins:  $vgpr0
846
847    ; GFX6-LABEL: name: load_local_s32_from_1_gep_65536
848    ; GFX6: liveins: $vgpr0
849    ; GFX6-NEXT: {{  $}}
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_]]
856    ;
857    ; GFX7-LABEL: name: load_local_s32_from_1_gep_65536
858    ; GFX7: liveins: $vgpr0
859    ; GFX7-NEXT: {{  $}}
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_]]
866    ;
867    ; GFX9-LABEL: name: load_local_s32_from_1_gep_65536
868    ; GFX9: liveins: $vgpr0
869    ; GFX9-NEXT: {{  $}}
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_]]
875    ;
876    ; GFX10-LABEL: name: load_local_s32_from_1_gep_65536
877    ; GFX10: liveins: $vgpr0
878    ; GFX10-NEXT: {{  $}}
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)
888    $vgpr0 = COPY %3
889
890...
891
892---
893
894name: load_local_s32_from_1_gep_m1
895legalized:       true
896regBankSelected: true
897tracksRegLiveness: true
898
899body: |
900  bb.0:
901    liveins:  $vgpr0
902
903    ; GFX6-LABEL: name: load_local_s32_from_1_gep_m1
904    ; GFX6: liveins: $vgpr0
905    ; GFX6-NEXT: {{  $}}
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_]]
912    ;
913    ; GFX7-LABEL: name: load_local_s32_from_1_gep_m1
914    ; GFX7: liveins: $vgpr0
915    ; GFX7-NEXT: {{  $}}
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_]]
922    ;
923    ; GFX9-LABEL: name: load_local_s32_from_1_gep_m1
924    ; GFX9: liveins: $vgpr0
925    ; GFX9-NEXT: {{  $}}
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_]]
931    ;
932    ; GFX10-LABEL: name: load_local_s32_from_1_gep_m1
933    ; GFX10: liveins: $vgpr0
934    ; GFX10-NEXT: {{  $}}
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)
944    $vgpr0 = COPY %3
945
946...
947
948---
949
950name: load_local_s64_align4_from_1_gep_1016
951legalized:       true
952regBankSelected: true
953tracksRegLiveness: true
954
955body: |
956  bb.0:
957    liveins:  $vgpr0_vgpr1
958
959    ; GFX6-LABEL: name: load_local_s64_align4_from_1_gep_1016
960    ; GFX6: liveins: $vgpr0_vgpr1
961    ; GFX6-NEXT: {{  $}}
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)
968    ;
969    ; GFX7-LABEL: name: load_local_s64_align4_from_1_gep_1016
970    ; GFX7: liveins: $vgpr0_vgpr1
971    ; GFX7-NEXT: {{  $}}
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_]]
976    ;
977    ; GFX9-LABEL: name: load_local_s64_align4_from_1_gep_1016
978    ; GFX9: liveins: $vgpr0_vgpr1
979    ; GFX9-NEXT: {{  $}}
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_]]
983    ;
984    ; GFX10-LABEL: name: load_local_s64_align4_from_1_gep_1016
985    ; GFX10: liveins: $vgpr0_vgpr1
986    ; GFX10-NEXT: {{  $}}
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
995
996...
997
998---
999
1000name: load_local_s64_align4_from_1_gep_1020
1001legalized:       true
1002regBankSelected: true
1003tracksRegLiveness: true
1004
1005body: |
1006  bb.0:
1007    liveins:  $vgpr0_vgpr1
1008
1009    ; GFX6-LABEL: name: load_local_s64_align4_from_1_gep_1020
1010    ; GFX6: liveins: $vgpr0_vgpr1
1011    ; GFX6-NEXT: {{  $}}
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)
1018    ;
1019    ; GFX7-LABEL: name: load_local_s64_align4_from_1_gep_1020
1020    ; GFX7: liveins: $vgpr0_vgpr1
1021    ; GFX7-NEXT: {{  $}}
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_]]
1028    ;
1029    ; GFX9-LABEL: name: load_local_s64_align4_from_1_gep_1020
1030    ; GFX9: liveins: $vgpr0_vgpr1
1031    ; GFX9-NEXT: {{  $}}
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_]]
1037    ;
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
1051
1052...
1053