Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-load-local-128.mir
blob136e584ba288f89a17507e33277e9b8ebd67cbf6
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -amdgpu-global-isel-new-legality -march=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 -march=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 -march=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 -march=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX11 %s
7 ---
9 name: load_local_v4s32_align16
10 legalized:       true
11 regBankSelected: true
12 tracksRegLiveness: true
14 body: |
15   bb.0:
16     liveins:  $vgpr0
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
47 ...
49 ---
51 name: load_local_v4s32_align_8
52 legalized:       true
53 regBankSelected: true
54 tracksRegLiveness: true
56 body: |
57   bb.0:
58     liveins:  $vgpr0
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
89 ...
91 ---
93 name: load_local_v4s32_align_8_offset_160
94 legalized:       true
95 regBankSelected: true
96 tracksRegLiveness: true
98 body: |
99   bb.0:
100     liveins:  $vgpr0
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
137 name: load_local_v4s32_align_8_offset_320
138 legalized:       true
139 regBankSelected: true
140 tracksRegLiveness: true
142 body: |
143   bb.0:
144     liveins:  $vgpr0
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
189 name: load_local_v2s64
190 legalized:       true
191 regBankSelected: true
192 tracksRegLiveness: true
194 body: |
195   bb.0:
196     liveins:  $vgpr0
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
231 name: load_local_v2p1
232 legalized:       true
233 regBankSelected: true
234 tracksRegLiveness: true
236 body: |
237   bb.0:
238     liveins:  $vgpr0
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
273 name: load_local_s128
274 legalized:       true
275 regBankSelected: true
276 tracksRegLiveness: true
278 body: |
279   bb.0:
280     liveins:  $vgpr0
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
315 name: load_local_v8s16
316 legalized:       true
317 regBankSelected: true
318 tracksRegLiveness: true
320 body: |
321   bb.0:
322     liveins:  $vgpr0
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