xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-local-128.mir (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -amdgpu-global-isel-new-legality -mtriple=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s
3# RUN: llc -amdgpu-global-isel-new-legality -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
4# RUN: llc -amdgpu-global-isel-new-legality -mtriple=amdgcn -mcpu=gfx1010 -mattr=+cumode -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s
5# RUN: llc -amdgpu-global-isel-new-legality -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX11 %s
6
7---
8
9name: load_local_v4s32_align16
10legalized:       true
11regBankSelected: true
12tracksRegLiveness: true
13
14body: |
15  bb.0:
16    liveins:  $vgpr0
17
18    ; GFX7-LABEL: name: load_local_v4s32_align16
19    ; GFX7: liveins: $vgpr0
20    ; GFX7-NEXT: {{  $}}
21    ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
22    ; GFX7-NEXT: $m0 = S_MOV_B32 -1
23    ; GFX7-NEXT: [[DS_READ_B128_:%[0-9]+]]:vreg_128 = DS_READ_B128 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load (<4 x s32>), addrspace 3)
24    ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ_B128_]]
25    ; GFX9-LABEL: name: load_local_v4s32_align16
26    ; GFX9: liveins: $vgpr0
27    ; GFX9-NEXT: {{  $}}
28    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
29    ; GFX9-NEXT: [[DS_READ_B128_gfx9_:%[0-9]+]]:vreg_128 = DS_READ_B128_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<4 x s32>), addrspace 3)
30    ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ_B128_gfx9_]]
31    ; GFX10-LABEL: name: load_local_v4s32_align16
32    ; GFX10: liveins: $vgpr0
33    ; GFX10-NEXT: {{  $}}
34    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
35    ; GFX10-NEXT: [[DS_READ_B128_gfx9_:%[0-9]+]]:vreg_128 = DS_READ_B128_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<4 x s32>), addrspace 3)
36    ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ_B128_gfx9_]]
37    ; GFX11-LABEL: name: load_local_v4s32_align16
38    ; GFX11: liveins: $vgpr0
39    ; GFX11-NEXT: {{  $}}
40    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
41    ; GFX11-NEXT: [[DS_READ_B128_gfx9_:%[0-9]+]]:vreg_128 = DS_READ_B128_gfx9 [[COPY]], 0, 0, implicit $exec :: (load (<4 x s32>), addrspace 3)
42    ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ_B128_gfx9_]]
43    %0:vgpr(p3) = COPY $vgpr0
44    %1:vgpr(<4 x s32>) = G_LOAD %0 :: (load (<4 x s32>), align 16, addrspace 3)
45    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
46
47...
48
49---
50
51name: load_local_v4s32_align_8
52legalized:       true
53regBankSelected: true
54tracksRegLiveness: true
55
56body: |
57  bb.0:
58    liveins:  $vgpr0
59
60    ; GFX7-LABEL: name: load_local_v4s32_align_8
61    ; GFX7: liveins: $vgpr0
62    ; GFX7-NEXT: {{  $}}
63    ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
64    ; GFX7-NEXT: $m0 = S_MOV_B32 -1
65    ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
66    ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]]
67    ; GFX9-LABEL: name: load_local_v4s32_align_8
68    ; GFX9: liveins: $vgpr0
69    ; GFX9-NEXT: {{  $}}
70    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
71    ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
72    ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
73    ; GFX10-LABEL: name: load_local_v4s32_align_8
74    ; GFX10: liveins: $vgpr0
75    ; GFX10-NEXT: {{  $}}
76    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
77    ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
78    ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
79    ; GFX11-LABEL: name: load_local_v4s32_align_8
80    ; GFX11: liveins: $vgpr0
81    ; GFX11-NEXT: {{  $}}
82    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
83    ; GFX11-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
84    ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
85    %0:vgpr(p3) = COPY $vgpr0
86    %1:vgpr(<4 x s32>) = G_LOAD %0 :: (load (<4 x s32>), align 8, addrspace 3)
87    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
88
89...
90
91---
92
93name: load_local_v4s32_align_8_offset_160
94legalized:       true
95regBankSelected: true
96tracksRegLiveness: true
97
98body: |
99  bb.0:
100    liveins:  $vgpr0
101
102    ; GFX7-LABEL: name: load_local_v4s32_align_8_offset_160
103    ; GFX7: liveins: $vgpr0
104    ; GFX7-NEXT: {{  $}}
105    ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
106    ; GFX7-NEXT: $m0 = S_MOV_B32 -1
107    ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[COPY]], 50, 51, 0, implicit $m0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
108    ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]]
109    ; GFX9-LABEL: name: load_local_v4s32_align_8_offset_160
110    ; GFX9: liveins: $vgpr0
111    ; GFX9-NEXT: {{  $}}
112    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
113    ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 50, 51, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
114    ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
115    ; GFX10-LABEL: name: load_local_v4s32_align_8_offset_160
116    ; GFX10: liveins: $vgpr0
117    ; GFX10-NEXT: {{  $}}
118    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
119    ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 50, 51, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
120    ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
121    ; GFX11-LABEL: name: load_local_v4s32_align_8_offset_160
122    ; GFX11: liveins: $vgpr0
123    ; GFX11-NEXT: {{  $}}
124    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
125    ; GFX11-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 50, 51, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
126    ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
127    %0:vgpr(p3) = COPY $vgpr0
128    %1:vgpr(s32) = G_CONSTANT i32 400
129    %2:vgpr(p3) = G_PTR_ADD %0, %1
130    %3:vgpr(<4 x s32>) = G_LOAD %2 :: (load (<4 x s32>), align 8, addrspace 3)
131    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %3
132
133...
134
135---
136
137name: load_local_v4s32_align_8_offset_320
138legalized:       true
139regBankSelected: true
140tracksRegLiveness: true
141
142body: |
143  bb.0:
144    liveins:  $vgpr0
145
146    ; GFX7-LABEL: name: load_local_v4s32_align_8_offset_320
147    ; GFX7: liveins: $vgpr0
148    ; GFX7-NEXT: {{  $}}
149    ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
150    ; GFX7-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4000, implicit $exec
151    ; 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
152    ; GFX7-NEXT: $m0 = S_MOV_B32 -1
153    ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[V_ADD_CO_U32_e64_]], 0, 1, 0, implicit $m0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
154    ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]]
155    ; GFX9-LABEL: name: load_local_v4s32_align_8_offset_320
156    ; GFX9: liveins: $vgpr0
157    ; GFX9-NEXT: {{  $}}
158    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
159    ; GFX9-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4000, implicit $exec
160    ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
161    ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[V_ADD_U32_e64_]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
162    ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
163    ; GFX10-LABEL: name: load_local_v4s32_align_8_offset_320
164    ; GFX10: liveins: $vgpr0
165    ; GFX10-NEXT: {{  $}}
166    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
167    ; GFX10-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4000, implicit $exec
168    ; GFX10-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
169    ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[V_ADD_U32_e64_]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
170    ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
171    ; GFX11-LABEL: name: load_local_v4s32_align_8_offset_320
172    ; GFX11: liveins: $vgpr0
173    ; GFX11-NEXT: {{  $}}
174    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
175    ; GFX11-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 4000, implicit $exec
176    ; GFX11-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec
177    ; GFX11-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[V_ADD_U32_e64_]], 0, 1, 0, implicit $exec :: (load (<4 x s32>), align 8, addrspace 3)
178    ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
179    %0:vgpr(p3) = COPY $vgpr0
180    %1:vgpr(s32) = G_CONSTANT i32 4000
181    %2:vgpr(p3) = G_PTR_ADD %0, %1
182    %3:vgpr(<4 x s32>) = G_LOAD %2 :: (load (<4 x s32>), align 8, addrspace 3)
183    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %3
184
185...
186
187---
188
189name: load_local_v2s64
190legalized:       true
191regBankSelected: true
192tracksRegLiveness: true
193
194body: |
195  bb.0:
196    liveins:  $vgpr0
197
198    ; GFX7-LABEL: name: load_local_v2s64
199    ; GFX7: liveins: $vgpr0
200    ; GFX7-NEXT: {{  $}}
201    ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
202    ; GFX7-NEXT: $m0 = S_MOV_B32 -1
203    ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (<2 x s64>), align 8, addrspace 3)
204    ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]]
205    ; GFX9-LABEL: name: load_local_v2s64
206    ; GFX9: liveins: $vgpr0
207    ; GFX9-NEXT: {{  $}}
208    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
209    ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<2 x s64>), align 8, addrspace 3)
210    ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
211    ; GFX10-LABEL: name: load_local_v2s64
212    ; GFX10: liveins: $vgpr0
213    ; GFX10-NEXT: {{  $}}
214    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
215    ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<2 x s64>), align 8, addrspace 3)
216    ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
217    ; GFX11-LABEL: name: load_local_v2s64
218    ; GFX11: liveins: $vgpr0
219    ; GFX11-NEXT: {{  $}}
220    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
221    ; GFX11-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<2 x s64>), align 8, addrspace 3)
222    ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
223    %0:vgpr(p3) = COPY $vgpr0
224    %1:vgpr(<2 x s64>) = G_LOAD %0 :: (load (<2 x s64>), align 8, addrspace 3)
225    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
226
227...
228
229---
230
231name: load_local_v2p1
232legalized:       true
233regBankSelected: true
234tracksRegLiveness: true
235
236body: |
237  bb.0:
238    liveins:  $vgpr0
239
240    ; GFX7-LABEL: name: load_local_v2p1
241    ; GFX7: liveins: $vgpr0
242    ; GFX7-NEXT: {{  $}}
243    ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
244    ; GFX7-NEXT: $m0 = S_MOV_B32 -1
245    ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_128(<2 x p1>) = G_LOAD [[COPY]](p3) :: (load (<2 x p1>), align 8, addrspace 3)
246    ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](<2 x p1>)
247    ; GFX9-LABEL: name: load_local_v2p1
248    ; GFX9: liveins: $vgpr0
249    ; GFX9-NEXT: {{  $}}
250    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
251    ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_128(<2 x p1>) = G_LOAD [[COPY]](p3) :: (load (<2 x p1>), align 8, addrspace 3)
252    ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](<2 x p1>)
253    ; GFX10-LABEL: name: load_local_v2p1
254    ; GFX10: liveins: $vgpr0
255    ; GFX10-NEXT: {{  $}}
256    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
257    ; GFX10-NEXT: [[LOAD:%[0-9]+]]:vreg_128(<2 x p1>) = G_LOAD [[COPY]](p3) :: (load (<2 x p1>), align 8, addrspace 3)
258    ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](<2 x p1>)
259    ; GFX11-LABEL: name: load_local_v2p1
260    ; GFX11: liveins: $vgpr0
261    ; GFX11-NEXT: {{  $}}
262    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
263    ; GFX11-NEXT: [[LOAD:%[0-9]+]]:vreg_128(<2 x p1>) = G_LOAD [[COPY]](p3) :: (load (<2 x p1>), align 8, addrspace 3)
264    ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](<2 x p1>)
265    %0:vgpr(p3) = COPY $vgpr0
266    %1:vgpr(<2 x p1>) = G_LOAD %0 :: (load (<2 x p1>), align 8, addrspace 3)
267    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
268
269...
270
271---
272
273name: load_local_s128
274legalized:       true
275regBankSelected: true
276tracksRegLiveness: true
277
278body: |
279  bb.0:
280    liveins:  $vgpr0
281
282    ; GFX7-LABEL: name: load_local_s128
283    ; GFX7: liveins: $vgpr0
284    ; GFX7-NEXT: {{  $}}
285    ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
286    ; GFX7-NEXT: $m0 = S_MOV_B32 -1
287    ; GFX7-NEXT: [[LOAD:%[0-9]+]]:vreg_128(s128) = G_LOAD [[COPY]](p3) :: (load (s128), align 8, addrspace 3)
288    ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](s128)
289    ; GFX9-LABEL: name: load_local_s128
290    ; GFX9: liveins: $vgpr0
291    ; GFX9-NEXT: {{  $}}
292    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
293    ; GFX9-NEXT: [[LOAD:%[0-9]+]]:vreg_128(s128) = G_LOAD [[COPY]](p3) :: (load (s128), align 8, addrspace 3)
294    ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](s128)
295    ; GFX10-LABEL: name: load_local_s128
296    ; GFX10: liveins: $vgpr0
297    ; GFX10-NEXT: {{  $}}
298    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
299    ; GFX10-NEXT: [[LOAD:%[0-9]+]]:vreg_128(s128) = G_LOAD [[COPY]](p3) :: (load (s128), align 8, addrspace 3)
300    ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](s128)
301    ; GFX11-LABEL: name: load_local_s128
302    ; GFX11: liveins: $vgpr0
303    ; GFX11-NEXT: {{  $}}
304    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
305    ; GFX11-NEXT: [[LOAD:%[0-9]+]]:vreg_128(s128) = G_LOAD [[COPY]](p3) :: (load (s128), align 8, addrspace 3)
306    ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[LOAD]](s128)
307    %0:vgpr(p3) = COPY $vgpr0
308    %1:vgpr(s128) = G_LOAD %0 :: (load (s128), align 8, addrspace 3)
309    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
310
311...
312
313---
314
315name: load_local_v8s16
316legalized:       true
317regBankSelected: true
318tracksRegLiveness: true
319
320body: |
321  bb.0:
322    liveins:  $vgpr0
323
324    ; GFX7-LABEL: name: load_local_v8s16
325    ; GFX7: liveins: $vgpr0
326    ; GFX7-NEXT: {{  $}}
327    ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
328    ; GFX7-NEXT: $m0 = S_MOV_B32 -1
329    ; GFX7-NEXT: [[DS_READ2_B64_:%[0-9]+]]:vreg_128 = DS_READ2_B64 [[COPY]], 0, 1, 0, implicit $m0, implicit $exec :: (load (<8 x s16>), align 8, addrspace 3)
330    ; GFX7-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_]]
331    ; GFX9-LABEL: name: load_local_v8s16
332    ; GFX9: liveins: $vgpr0
333    ; GFX9-NEXT: {{  $}}
334    ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
335    ; GFX9-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<8 x s16>), align 8, addrspace 3)
336    ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
337    ; GFX10-LABEL: name: load_local_v8s16
338    ; GFX10: liveins: $vgpr0
339    ; GFX10-NEXT: {{  $}}
340    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
341    ; GFX10-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<8 x s16>), align 8, addrspace 3)
342    ; GFX10-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
343    ; GFX11-LABEL: name: load_local_v8s16
344    ; GFX11: liveins: $vgpr0
345    ; GFX11-NEXT: {{  $}}
346    ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
347    ; GFX11-NEXT: [[DS_READ2_B64_gfx9_:%[0-9]+]]:vreg_128 = DS_READ2_B64_gfx9 [[COPY]], 0, 1, 0, implicit $exec :: (load (<8 x s16>), align 8, addrspace 3)
348    ; GFX11-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[DS_READ2_B64_gfx9_]]
349    %0:vgpr(p3) = COPY $vgpr0
350    %1:vgpr(<8 x s16>) = G_LOAD %0 :: (load (<8 x s16>), align 8, addrspace 3)
351    $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
352
353...
354