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    ; GFX7-LABEL: name: load_local_s32_from_4
20    ; GFX7: liveins: $vgpr0
21    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
22    ; GFX7: $m0 = S_MOV_B32 -1
23    ; GFX7: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4, addrspace 3)
24    ; GFX7: $vgpr0 = COPY [[DS_READ_B32_]]
25    ; GFX9-LABEL: name: load_local_s32_from_4
26    ; GFX9: liveins: $vgpr0
27    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
28    ; GFX9: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load 4, addrspace 3)
29    ; GFX9: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
30    ; GFX6-LABEL: name: load_local_s32_from_4
31    ; GFX6: liveins: $vgpr0
32    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
33    ; GFX6: $m0 = S_MOV_B32 -1
34    ; GFX6: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4, addrspace 3)
35    ; GFX6: $vgpr0 = COPY [[DS_READ_B32_]]
36    %0:vgpr(p3) = COPY $vgpr0
37    %1:vgpr(s32) = G_LOAD %0 :: (load 4, 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    ; GFX7-LABEL: name: load_local_s32_from_2
54    ; GFX7: liveins: $vgpr0
55    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
56    ; GFX7: $m0 = S_MOV_B32 -1
57    ; GFX7: [[DS_READ_U16_:%[0-9]+]]:vgpr_32 = DS_READ_U16 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 2, addrspace 3)
58    ; GFX7: $vgpr0 = COPY [[DS_READ_U16_]]
59    ; GFX9-LABEL: name: load_local_s32_from_2
60    ; GFX9: liveins: $vgpr0
61    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
62    ; GFX9: [[DS_READ_U16_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U16_gfx9 [[COPY]], 0, 0, implicit $exec :: (load 2, addrspace 3)
63    ; GFX9: $vgpr0 = COPY [[DS_READ_U16_gfx9_]]
64    ; GFX6-LABEL: name: load_local_s32_from_2
65    ; GFX6: liveins: $vgpr0
66    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
67    ; GFX6: $m0 = S_MOV_B32 -1
68    ; GFX6: [[DS_READ_U16_:%[0-9]+]]:vgpr_32 = DS_READ_U16 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 2, addrspace 3)
69    ; GFX6: $vgpr0 = COPY [[DS_READ_U16_]]
70    %0:vgpr(p3) = COPY $vgpr0
71    %1:vgpr(s32) = G_LOAD %0 :: (load 2, 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    ; GFX7-LABEL: name: load_local_s32_from_1
91    ; GFX7: liveins: $vgpr0
92    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
93    ; GFX7: $m0 = S_MOV_B32 -1
94    ; GFX7: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 1, addrspace 3)
95    ; GFX7: $vgpr0 = COPY [[DS_READ_U8_]]
96    ; GFX9-LABEL: name: load_local_s32_from_1
97    ; GFX9: liveins: $vgpr0
98    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
99    ; GFX9: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[COPY]], 0, 0, implicit $exec :: (load 1, addrspace 3)
100    ; GFX9: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
101    ; GFX6-LABEL: name: load_local_s32_from_1
102    ; GFX6: liveins: $vgpr0
103    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
104    ; GFX6: $m0 = S_MOV_B32 -1
105    ; GFX6: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 1, addrspace 3)
106    ; GFX6: $vgpr0 = COPY [[DS_READ_U8_]]
107    %0:vgpr(p3) = COPY $vgpr0
108    %1:vgpr(s32) = G_LOAD %0 :: (load 1, 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    ; GFX7-LABEL: name: load_local_v2s32
125    ; GFX7: liveins: $vgpr0
126    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
127    ; GFX7: $m0 = S_MOV_B32 -1
128    ; GFX7: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 8, addrspace 3)
129    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
130    ; GFX9-LABEL: name: load_local_v2s32
131    ; GFX9: liveins: $vgpr0
132    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
133    ; GFX9: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load 8, addrspace 3)
134    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
135    ; GFX6-LABEL: name: load_local_v2s32
136    ; GFX6: liveins: $vgpr0
137    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
138    ; GFX6: $m0 = S_MOV_B32 -1
139    ; GFX6: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 8, addrspace 3)
140    ; GFX6: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
141    %0:vgpr(p3) = COPY $vgpr0
142    %1:vgpr(<2 x s32>) = G_LOAD %0 :: (load 8, 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    ; GFX7-LABEL: name: load_local_v2s32_align4
159    ; GFX7: liveins: $vgpr0
160    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
161    ; GFX7: $m0 = S_MOV_B32 -1
162    ; GFX7: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load 8, align 4, addrspace 3)
163    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
164    ; GFX9-LABEL: name: load_local_v2s32_align4
165    ; GFX9: liveins: $vgpr0
166    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
167    ; GFX9: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load 8, align 4, addrspace 3)
168    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
169    ; GFX6-LABEL: name: load_local_v2s32_align4
170    ; GFX6: liveins: $vgpr0
171    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
172    ; GFX6: $m0 = S_MOV_B32 -1
173    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(<2 x s32>) = G_LOAD [[COPY]](p3) :: (load 8, align 4, addrspace 3)
174    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](<2 x s32>)
175    %0:vgpr(p3) = COPY $vgpr0
176    %1:vgpr(<2 x s32>) = G_LOAD %0 :: (load 8, 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    ; GFX7-LABEL: name: load_local_s64
193    ; GFX7: liveins: $vgpr0
194    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
195    ; GFX7: $m0 = S_MOV_B32 -1
196    ; GFX7: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 8, addrspace 3)
197    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
198    ; GFX9-LABEL: name: load_local_s64
199    ; GFX9: liveins: $vgpr0
200    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
201    ; GFX9: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load 8, addrspace 3)
202    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
203    ; GFX6-LABEL: name: load_local_s64
204    ; GFX6: liveins: $vgpr0
205    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
206    ; GFX6: $m0 = S_MOV_B32 -1
207    ; GFX6: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 8, addrspace 3)
208    ; GFX6: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
209    %0:vgpr(p3) = COPY $vgpr0
210    %1:vgpr(s64) = G_LOAD %0 :: (load 8, 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    ; GFX7-LABEL: name: load_local_s64_align4
227    ; GFX7: liveins: $vgpr0
228    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
229    ; GFX7: $m0 = S_MOV_B32 -1
230    ; GFX7: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load 8, align 4, addrspace 3)
231    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
232    ; GFX9-LABEL: name: load_local_s64_align4
233    ; GFX9: liveins: $vgpr0
234    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
235    ; GFX9: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load 8, align 4, addrspace 3)
236    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
237    ; GFX6-LABEL: name: load_local_s64_align4
238    ; GFX6: liveins: $vgpr0
239    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
240    ; GFX6: $m0 = S_MOV_B32 -1
241    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(s64) = G_LOAD [[COPY]](p3) :: (load 8, align 4, addrspace 3)
242    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](s64)
243    %0:vgpr(p3) = COPY $vgpr0
244    %1:vgpr(s64) = G_LOAD %0 :: (load 8, 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    ; GFX7-LABEL: name: load_local_p3_from_4
261    ; GFX7: liveins: $vgpr0
262    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
263    ; GFX7: $m0 = S_MOV_B32 -1
264    ; GFX7: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4, addrspace 3)
265    ; GFX7: $vgpr0 = COPY [[DS_READ_B32_]]
266    ; GFX9-LABEL: name: load_local_p3_from_4
267    ; GFX9: liveins: $vgpr0
268    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
269    ; GFX9: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load 4, addrspace 3)
270    ; GFX9: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
271    ; GFX6-LABEL: name: load_local_p3_from_4
272    ; GFX6: liveins: $vgpr0
273    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
274    ; GFX6: $m0 = S_MOV_B32 -1
275    ; GFX6: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4, addrspace 3)
276    ; GFX6: $vgpr0 = COPY [[DS_READ_B32_]]
277    %0:vgpr(p3) = COPY $vgpr0
278    %1:vgpr(p3) = G_LOAD %0 :: (load 4, 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    ; GFX7-LABEL: name: load_local_p5_from_4
295    ; GFX7: liveins: $vgpr0
296    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
297    ; GFX7: $m0 = S_MOV_B32 -1
298    ; GFX7: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4, addrspace 3)
299    ; GFX7: $vgpr0 = COPY [[DS_READ_B32_]]
300    ; GFX9-LABEL: name: load_local_p5_from_4
301    ; GFX9: liveins: $vgpr0
302    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
303    ; GFX9: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load 4, addrspace 3)
304    ; GFX9: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
305    ; GFX6-LABEL: name: load_local_p5_from_4
306    ; GFX6: liveins: $vgpr0
307    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
308    ; GFX6: $m0 = S_MOV_B32 -1
309    ; GFX6: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4, addrspace 3)
310    ; GFX6: $vgpr0 = COPY [[DS_READ_B32_]]
311    %0:vgpr(p3) = COPY $vgpr0
312    %1:vgpr(p3) = G_LOAD %0 :: (load 4, 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    ; GFX7-LABEL: name: load_local_p1_align8
329    ; GFX7: liveins: $vgpr0
330    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
331    ; GFX7: $m0 = S_MOV_B32 -1
332    ; GFX7: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 8, addrspace 3)
333    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
334    ; GFX9-LABEL: name: load_local_p1_align8
335    ; GFX9: liveins: $vgpr0
336    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
337    ; GFX9: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load 8, addrspace 3)
338    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
339    ; GFX6-LABEL: name: load_local_p1_align8
340    ; GFX6: liveins: $vgpr0
341    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
342    ; GFX6: $m0 = S_MOV_B32 -1
343    ; GFX6: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 8, addrspace 3)
344    ; GFX6: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
345    %0:vgpr(p3) = COPY $vgpr0
346    %1:vgpr(p1) = G_LOAD %0 :: (load 8, 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    ; GFX7-LABEL: name: load_local_p1_align4
363    ; GFX7: liveins: $vgpr0
364    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
365    ; GFX7: $m0 = S_MOV_B32 -1
366    ; GFX7: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load 8, align 4, addrspace 3)
367    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
368    ; GFX9-LABEL: name: load_local_p1_align4
369    ; GFX9: liveins: $vgpr0
370    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
371    ; GFX9: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load 8, align 4, addrspace 3)
372    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
373    ; GFX6-LABEL: name: load_local_p1_align4
374    ; GFX6: liveins: $vgpr0
375    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
376    ; GFX6: $m0 = S_MOV_B32 -1
377    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(p1) = G_LOAD [[COPY]](p3) :: (load 8, align 4, addrspace 3)
378    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](p1)
379    %0:vgpr(p3) = COPY $vgpr0
380    %1:vgpr(p1) = G_LOAD %0 :: (load 8, 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    ; GFX7-LABEL: name: load_local_p999_from_8
397    ; GFX7: liveins: $vgpr0
398    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
399    ; GFX7: $m0 = S_MOV_B32 -1
400    ; GFX7: [[LOAD:%[0-9]+]]:vreg_64(p999) = G_LOAD [[COPY]](p3) :: (load 8, addrspace 3)
401    ; GFX7: $vgpr0_vgpr1 = COPY [[LOAD]](p999)
402    ; GFX9-LABEL: name: load_local_p999_from_8
403    ; GFX9: liveins: $vgpr0
404    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
405    ; GFX9: [[LOAD:%[0-9]+]]:vreg_64(p999) = G_LOAD [[COPY]](p3) :: (load 8, addrspace 3)
406    ; GFX9: $vgpr0_vgpr1 = COPY [[LOAD]](p999)
407    ; GFX6-LABEL: name: load_local_p999_from_8
408    ; GFX6: liveins: $vgpr0
409    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
410    ; GFX6: $m0 = S_MOV_B32 -1
411    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(p999) = G_LOAD [[COPY]](p3) :: (load 8, addrspace 3)
412    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](p999)
413    %0:vgpr(p3) = COPY $vgpr0
414    %1:vgpr(p999) = G_LOAD %0 :: (load 8, 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    ; GFX7-LABEL: name: load_local_v2p3
431    ; GFX7: liveins: $vgpr0
432    ; GFX7: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
433    ; GFX7: $m0 = S_MOV_B32 -1
434    ; GFX7: [[LOAD:%[0-9]+]]:vreg_64(<2 x p3>) = G_LOAD [[COPY]](p3) :: (load 8, addrspace 3)
435    ; GFX7: $vgpr0_vgpr1 = COPY [[LOAD]](<2 x p3>)
436    ; GFX9-LABEL: name: load_local_v2p3
437    ; GFX9: liveins: $vgpr0
438    ; GFX9: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
439    ; GFX9: [[LOAD:%[0-9]+]]:vreg_64(<2 x p3>) = G_LOAD [[COPY]](p3) :: (load 8, addrspace 3)
440    ; GFX9: $vgpr0_vgpr1 = COPY [[LOAD]](<2 x p3>)
441    ; GFX6-LABEL: name: load_local_v2p3
442    ; GFX6: liveins: $vgpr0
443    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
444    ; GFX6: $m0 = S_MOV_B32 -1
445    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(<2 x p3>) = G_LOAD [[COPY]](p3) :: (load 8, addrspace 3)
446    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](<2 x p3>)
447    %0:vgpr(p3) = COPY $vgpr0
448    %1:vgpr(<2 x p3>) = G_LOAD %0 :: (load 8, 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    ; GFX7-LABEL: name: load_local_v2s16
465    ; GFX7: liveins: $vgpr0
466    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
467    ; GFX7: $m0 = S_MOV_B32 -1
468    ; GFX7: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4, addrspace 3)
469    ; GFX7: $vgpr0 = COPY [[DS_READ_B32_]]
470    ; GFX9-LABEL: name: load_local_v2s16
471    ; GFX9: liveins: $vgpr0
472    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
473    ; GFX9: [[DS_READ_B32_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_B32_gfx9 [[COPY]], 0, 0, implicit $exec :: (load 4, addrspace 3)
474    ; GFX9: $vgpr0 = COPY [[DS_READ_B32_gfx9_]]
475    ; GFX6-LABEL: name: load_local_v2s16
476    ; GFX6: liveins: $vgpr0
477    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
478    ; GFX6: $m0 = S_MOV_B32 -1
479    ; GFX6: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4, addrspace 3)
480    ; GFX6: $vgpr0 = COPY [[DS_READ_B32_]]
481    %0:vgpr(p3) = COPY $vgpr0
482    %1:vgpr(<2 x s16>) = G_LOAD %0 :: (load 4, 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    ; GFX7-LABEL: name: load_local_v4s16
499    ; GFX7: liveins: $vgpr0
500    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
501    ; GFX7: $m0 = S_MOV_B32 -1
502    ; GFX7: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 8, addrspace 3)
503    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
504    ; GFX9-LABEL: name: load_local_v4s16
505    ; GFX9: liveins: $vgpr0
506    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
507    ; GFX9: [[DS_READ_B64_gfx9_:%[0-9]+]]:vreg_64 = DS_READ_B64_gfx9 [[COPY]], 0, 0, implicit $exec :: (load 8, addrspace 3)
508    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ_B64_gfx9_]]
509    ; GFX6-LABEL: name: load_local_v4s16
510    ; GFX6: liveins: $vgpr0
511    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
512    ; GFX6: $m0 = S_MOV_B32 -1
513    ; GFX6: [[DS_READ_B64_:%[0-9]+]]:vreg_64 = DS_READ_B64 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 8, addrspace 3)
514    ; GFX6: $vgpr0_vgpr1 = COPY [[DS_READ_B64_]]
515    %0:vgpr(p3) = COPY $vgpr0
516    %1:vgpr(<4 x s16>) = G_LOAD %0 :: (load 8, 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 12, 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    ; GFX7-LABEL: name: load_local_s32_from_1_gep_65535
557    ; GFX7: liveins: $vgpr0
558    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
559    ; GFX7: $m0 = S_MOV_B32 -1
560    ; GFX7: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[COPY]], 65535, 0, implicit $m0, implicit $exec :: (load 1, addrspace 3)
561    ; GFX7: $vgpr0 = COPY [[DS_READ_U8_]]
562    ; GFX9-LABEL: name: load_local_s32_from_1_gep_65535
563    ; GFX9: liveins: $vgpr0
564    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
565    ; GFX9: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[COPY]], 65535, 0, implicit $exec :: (load 1, addrspace 3)
566    ; GFX9: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
567    ; GFX6-LABEL: name: load_local_s32_from_1_gep_65535
568    ; GFX6: liveins: $vgpr0
569    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
570    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65535, implicit $exec
571    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
572    ; GFX6: $m0 = S_MOV_B32 -1
573    ; GFX6: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 %2, 0, 0, implicit $m0, implicit $exec :: (load 1, addrspace 3)
574    ; GFX6: $vgpr0 = COPY [[DS_READ_U8_]]
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 1, 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    ; GFX7-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
595    ; GFX7: liveins: $vgpr0
596    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
597    ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
598    ; GFX7: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
599    ; GFX7: $m0 = S_MOV_B32 -1
600    ; GFX7: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[V_AND_B32_e64_]], 65535, 0, implicit $m0, implicit $exec :: (load 1, addrspace 3)
601    ; GFX7: $vgpr0 = COPY [[DS_READ_U8_]]
602    ; GFX9-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
603    ; GFX9: liveins: $vgpr0
604    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
605    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
606    ; GFX9: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
607    ; GFX9: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[V_AND_B32_e64_]], 65535, 0, implicit $exec :: (load 1, addrspace 3)
608    ; GFX9: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
609    ; GFX6-LABEL: name: load_local_s32_from_1_gep_65535_known_bits_base_address
610    ; GFX6: liveins: $vgpr0
611    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
612    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 2147483647, implicit $exec
613    ; GFX6: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec
614    ; GFX6: $m0 = S_MOV_B32 -1
615    ; GFX6: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 [[V_AND_B32_e64_]], 65535, 0, implicit $m0, implicit $exec :: (load 1, addrspace 3)
616    ; GFX6: $vgpr0 = COPY [[DS_READ_U8_]]
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 1, 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    ; GFX7-LABEL: name: load_local_s32_from_1_gep_65536
640    ; GFX7: liveins: $vgpr0
641    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
642    ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65536, implicit $exec
643    ; GFX7: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
644    ; GFX7: $m0 = S_MOV_B32 -1
645    ; GFX7: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 %2, 0, 0, implicit $m0, implicit $exec :: (load 1, addrspace 3)
646    ; GFX7: $vgpr0 = COPY [[DS_READ_U8_]]
647    ; GFX9-LABEL: name: load_local_s32_from_1_gep_65536
648    ; GFX9: liveins: $vgpr0
649    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
650    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65536, implicit $exec
651    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
652    ; GFX9: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[V_ADD_U32_e64_]], 0, 0, implicit $exec :: (load 1, addrspace 3)
653    ; GFX9: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
654    ; GFX6-LABEL: name: load_local_s32_from_1_gep_65536
655    ; GFX6: liveins: $vgpr0
656    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
657    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 65536, implicit $exec
658    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
659    ; GFX6: $m0 = S_MOV_B32 -1
660    ; GFX6: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 %2, 0, 0, implicit $m0, implicit $exec :: (load 1, addrspace 3)
661    ; GFX6: $vgpr0 = COPY [[DS_READ_U8_]]
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 1, 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    ; GFX7-LABEL: name: load_local_s32_from_1_gep_m1
682    ; GFX7: liveins: $vgpr0
683    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
684    ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
685    ; GFX7: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
686    ; GFX7: $m0 = S_MOV_B32 -1
687    ; GFX7: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 %2, 0, 0, implicit $m0, implicit $exec :: (load 1, addrspace 3)
688    ; GFX7: $vgpr0 = COPY [[DS_READ_U8_]]
689    ; GFX9-LABEL: name: load_local_s32_from_1_gep_m1
690    ; GFX9: liveins: $vgpr0
691    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
692    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
693    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
694    ; GFX9: [[DS_READ_U8_gfx9_:%[0-9]+]]:vgpr_32 = DS_READ_U8_gfx9 [[V_ADD_U32_e64_]], 0, 0, implicit $exec :: (load 1, addrspace 3)
695    ; GFX9: $vgpr0 = COPY [[DS_READ_U8_gfx9_]]
696    ; GFX6-LABEL: name: load_local_s32_from_1_gep_m1
697    ; GFX6: liveins: $vgpr0
698    ; GFX6: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
699    ; GFX6: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 -1, implicit $exec
700    ; GFX6: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
701    ; GFX6: $m0 = S_MOV_B32 -1
702    ; GFX6: [[DS_READ_U8_:%[0-9]+]]:vgpr_32 = DS_READ_U8 %2, 0, 0, implicit $m0, implicit $exec :: (load 1, addrspace 3)
703    ; GFX6: $vgpr0 = COPY [[DS_READ_U8_]]
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 1, 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    ; GFX7-LABEL: name: load_local_s64_align4_from_1_gep_1016
724    ; GFX7: liveins: $vgpr0_vgpr1
725    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
726    ; GFX7: $m0 = S_MOV_B32 -1
727    ; GFX7: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 [[COPY]], 254, 255, 0, implicit $m0, implicit $exec :: (load 8, align 4, addrspace 3)
728    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
729    ; GFX9-LABEL: name: load_local_s64_align4_from_1_gep_1016
730    ; GFX9: liveins: $vgpr0_vgpr1
731    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
732    ; GFX9: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[COPY]], 254, 255, 0, implicit $exec :: (load 8, align 4, addrspace 3)
733    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
734    ; GFX6-LABEL: name: load_local_s64_align4_from_1_gep_1016
735    ; GFX6: liveins: $vgpr0_vgpr1
736    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
737    ; GFX6: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1016
738    ; GFX6: [[PTR_ADD:%[0-9]+]]:vgpr(p3) = G_PTR_ADD [[COPY]], [[C]](s32)
739    ; GFX6: $m0 = S_MOV_B32 -1
740    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(s64) = G_LOAD [[PTR_ADD]](p3) :: (load 8, align 4, addrspace 3)
741    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](s64)
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 8, 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    ; GFX7-LABEL: name: load_local_s64_align4_from_1_gep_1020
762    ; GFX7: liveins: $vgpr0_vgpr1
763    ; GFX7: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
764    ; GFX7: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1020, implicit $exec
765    ; GFX7: %2:vgpr_32, dead %4:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
766    ; GFX7: $m0 = S_MOV_B32 -1
767    ; GFX7: [[DS_READ2_B32_:%[0-9]+]]:vreg_64 = DS_READ2_B32 %2, 0, 1, 0, implicit $m0, implicit $exec :: (load 8, align 4, addrspace 3)
768    ; GFX7: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_]]
769    ; GFX9-LABEL: name: load_local_s64_align4_from_1_gep_1020
770    ; GFX9: liveins: $vgpr0_vgpr1
771    ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
772    ; GFX9: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1020, implicit $exec
773    ; GFX9: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
774    ; GFX9: [[DS_READ2_B32_gfx9_:%[0-9]+]]:vreg_64 = DS_READ2_B32_gfx9 [[V_ADD_U32_e64_]], 0, 1, 0, implicit $exec :: (load 8, align 4, addrspace 3)
775    ; GFX9: $vgpr0_vgpr1 = COPY [[DS_READ2_B32_gfx9_]]
776    ; GFX6-LABEL: name: load_local_s64_align4_from_1_gep_1020
777    ; GFX6: liveins: $vgpr0_vgpr1
778    ; GFX6: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
779    ; GFX6: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 1020
780    ; GFX6: [[PTR_ADD:%[0-9]+]]:vgpr(p3) = G_PTR_ADD [[COPY]], [[C]](s32)
781    ; GFX6: $m0 = S_MOV_B32 -1
782    ; GFX6: [[LOAD:%[0-9]+]]:vreg_64(s64) = G_LOAD [[PTR_ADD]](p3) :: (load 8, align 4, addrspace 3)
783    ; GFX6: $vgpr0_vgpr1 = COPY [[LOAD]](s64)
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 8, align 4, addrspace 3)
788    $vgpr0_vgpr1 = COPY %3
789
790...
791