Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / load-local-i16.ll
blob43e9aa7a2d98f821542be5215e047208ba93c32d
1 ; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=GCN,SI,SICIVI,FUNC %s
2 ; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-enable-ds128 -verify-machineinstrs < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=GCN,SICIVI,GFX89,FUNC %s
3 ; RUN: llc -march=amdgcn -mcpu=gfx900 -mattr=-enable-ds128 -verify-machineinstrs < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=GCN,GFX9,GFX89,FUNC %s
4 ; RUN: llc -march=r600 -mcpu=redwood -verify-machineinstrs < %s | FileCheck -allow-deprecated-dag-overlap -check-prefix=EG -check-prefix=FUNC %s
6 ; Testing for ds_read/write_b128
7 ; RUN: llc -march=amdgcn -mcpu=tonga -mattr=+enable-ds128 < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=CIVI,FUNC %s
8 ; RUN: llc -march=amdgcn -mcpu=gfx900 -mattr=+enable-ds128 < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=CIVI,FUNC %s
10 ; FUNC-LABEL: {{^}}local_load_i16:
11 ; GFX9-NOT: m0
12 ; SICIVI: s_mov_b32 m0
14 ; GCN: ds_read_u16 v{{[0-9]+}}
16 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
17 ; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
18 ; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
19 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
20 ; EG: LDS_SHORT_WRITE {{\*?}} [[TO]], [[DATA]]
21 define amdgpu_kernel void @local_load_i16(ptr addrspace(3) %out, ptr addrspace(3) %in) {
22 entry:
23   %ld = load i16, ptr addrspace(3) %in
24   store i16 %ld, ptr addrspace(3) %out
25   ret void
28 ; FUNC-LABEL: {{^}}local_load_v2i16:
29 ; GFX9-NOT: m0
30 ; SICIVI: s_mov_b32 m0
32 ; GCN: ds_read_b32
34 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
35 ; EG: LDS_READ_RET {{.*}} [[FROM]]
36 ; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
37 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
38 ; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
39 define amdgpu_kernel void @local_load_v2i16(ptr addrspace(3) %out, ptr addrspace(3) %in) {
40 entry:
41   %ld = load <2 x i16>, ptr addrspace(3) %in
42   store <2 x i16> %ld, ptr addrspace(3) %out
43   ret void
46 ; FUNC-LABEL: {{^}}local_load_v3i16:
47 ; GFX9-NOT: m0
48 ; SICIVI: s_mov_b32 m0
50 ; GCN: ds_read_b64
51 ; GCN-DAG: ds_write_b32
52 ; GCN-DAG: ds_write_b16
54 ; EG-DAG: LDS_USHORT_READ_RET
55 ; EG-DAG: LDS_USHORT_READ_RET
56 define amdgpu_kernel void @local_load_v3i16(ptr addrspace(3) %out, ptr addrspace(3) %in) {
57 entry:
58   %ld = load <3 x i16>, ptr addrspace(3) %in
59   store <3 x i16> %ld, ptr addrspace(3) %out
60   ret void
63 ; FUNC-LABEL: {{^}}local_load_v4i16:
64 ; GFX9-NOT: m0
65 ; SICIVI: s_mov_b32 m0
67 ; GCN: ds_read_b64
69 ; EG: LDS_READ_RET
70 ; EG: LDS_READ_RET
71 define amdgpu_kernel void @local_load_v4i16(ptr addrspace(3) %out, ptr addrspace(3) %in) {
72 entry:
73   %ld = load <4 x i16>, ptr addrspace(3) %in
74   store <4 x i16> %ld, ptr addrspace(3) %out
75   ret void
78 ; FUNC-LABEL: {{^}}local_load_v8i16:
79 ; GFX9-NOT: m0
80 ; SICIVI: s_mov_b32 m0
82 ; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
84 ; EG: LDS_READ_RET
85 ; EG: LDS_READ_RET
86 ; EG: LDS_READ_RET
87 ; EG: LDS_READ_RET
88 define amdgpu_kernel void @local_load_v8i16(ptr addrspace(3) %out, ptr addrspace(3) %in) {
89 entry:
90   %ld = load <8 x i16>, ptr addrspace(3) %in
91   store <8 x i16> %ld, ptr addrspace(3) %out
92   ret void
95 ; FUNC-LABEL: {{^}}local_load_v16i16:
96 ; GFX9-NOT: m0
97 ; SICIVI: s_mov_b32 m0
99 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3{{$}}
100 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
103 ; EG: LDS_READ_RET
104 ; EG: LDS_READ_RET
105 ; EG: LDS_READ_RET
106 ; EG: LDS_READ_RET
108 ; EG: LDS_READ_RET
109 ; EG: LDS_READ_RET
110 ; EG: LDS_READ_RET
111 ; EG: LDS_READ_RET
112 define amdgpu_kernel void @local_load_v16i16(ptr addrspace(3) %out, ptr addrspace(3) %in) {
113 entry:
114   %ld = load <16 x i16>, ptr addrspace(3) %in
115   store <16 x i16> %ld, ptr addrspace(3) %out
116   ret void
119 ; FUNC-LABEL: {{^}}local_zextload_i16_to_i32:
120 ; GFX9-NOT: m0
121 ; SICIVI: s_mov_b32 m0
123 ; GCN: ds_read_u16
124 ; GCN: ds_write_b32
126 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
127 ; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
128 ; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
129 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
130 ; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
131 define amdgpu_kernel void @local_zextload_i16_to_i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
132   %a = load i16, ptr addrspace(3) %in
133   %ext = zext i16 %a to i32
134   store i32 %ext, ptr addrspace(3) %out
135   ret void
138 ; FUNC-LABEL: {{^}}local_sextload_i16_to_i32:
139 ; GCN-NOT: s_wqm_b64
141 ; GFX9-NOT: m0
142 ; SICIVI: s_mov_b32 m0
144 ; GCN: ds_read_i16
146 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
147 ; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
148 ; EG-DAG: MOV {{[* ]*}}[[TMP:T[0-9]+\.[XYZW]]], OQAP
149 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
150 ; EG-DAG: BFE_INT {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], {{.*}}, 0.0, literal
151 ; EG: 16
152 ; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
153 define amdgpu_kernel void @local_sextload_i16_to_i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
154   %a = load i16, ptr addrspace(3) %in
155   %ext = sext i16 %a to i32
156   store i32 %ext, ptr addrspace(3) %out
157   ret void
160 ; FUNC-LABEL: {{^}}local_zextload_v1i16_to_v1i32:
161 ; GFX9-NOT: m0
162 ; SICIVI: s_mov_b32 m0
164 ; GCN: ds_read_u16
166 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
167 ; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
168 ; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
169 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
170 ; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
171 define amdgpu_kernel void @local_zextload_v1i16_to_v1i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
172   %load = load <1 x i16>, ptr addrspace(3) %in
173   %ext = zext <1 x i16> %load to <1 x i32>
174   store <1 x i32> %ext, ptr addrspace(3) %out
175   ret void
178 ; FUNC-LABEL: {{^}}local_sextload_v1i16_to_v1i32:
179 ; GFX9-NOT: m0
180 ; SICIVI: s_mov_b32 m0
182 ; GCN: ds_read_i16
184 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
185 ; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
186 ; EG-DAG: MOV {{[* ]*}}[[TMP:T[0-9]+\.[XYZW]]], OQAP
187 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
188 ; EG-DAG: BFE_INT {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], {{.*}}, 0.0, literal
189 ; EG: 16
190 ; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
191 define amdgpu_kernel void @local_sextload_v1i16_to_v1i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
192   %load = load <1 x i16>, ptr addrspace(3) %in
193   %ext = sext <1 x i16> %load to <1 x i32>
194   store <1 x i32> %ext, ptr addrspace(3) %out
195   ret void
198 ; FUNC-LABEL: {{^}}local_zextload_v2i16_to_v2i32:
199 ; GCN-NOT: s_wqm_b64
200 ; GFX9-NOT: m0
201 ; SICIVI: s_mov_b32 m0
203 ; GCN: ds_read_b32
205 ; EG: LDS_READ_RET
206 define amdgpu_kernel void @local_zextload_v2i16_to_v2i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
207   %load = load <2 x i16>, ptr addrspace(3) %in
208   %ext = zext <2 x i16> %load to <2 x i32>
209   store <2 x i32> %ext, ptr addrspace(3) %out
210   ret void
213 ; FUNC-LABEL: {{^}}local_sextload_v2i16_to_v2i32:
214 ; GCN-NOT: s_wqm_b64
215 ; GFX9-NOT: m0
216 ; SICIVI: s_mov_b32 m0
218 ; GCN: ds_read_b32
220 ; EG: LDS_READ_RET
221 ; EG: BFE_INT
222 ; EG: BFE_INT
223 define amdgpu_kernel void @local_sextload_v2i16_to_v2i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
224   %load = load <2 x i16>, ptr addrspace(3) %in
225   %ext = sext <2 x i16> %load to <2 x i32>
226   store <2 x i32> %ext, ptr addrspace(3) %out
227   ret void
230 ; FUNC-LABEL: {{^}}local_local_zextload_v3i16_to_v3i32:
231 ; GFX9-NOT: m0
232 ; SICIVI: s_mov_b32 m0
234 ; GCN: ds_read_b64
235 ; SI-DAG: ds_write_b32
236 ; SI-DAG: ds_write_b64
237 ; CIVI-DAG: ds_write_b96
238 ; GFX9-DAG: ds_write_b96
240 ; EG: LDS_USHORT_READ_RET
241 ; EG: LDS_USHORT_READ_RET
242 ; EG: LDS_USHORT_READ_RET
243 define amdgpu_kernel void @local_local_zextload_v3i16_to_v3i32(ptr addrspace(3) %out, ptr addrspace(3) %in) {
244 entry:
245   %ld = load <3 x i16>, ptr addrspace(3) %in
246   %ext = zext <3 x i16> %ld to <3 x i32>
247   store <3 x i32> %ext, ptr addrspace(3) %out
248   ret void
251 ; FUNC-LABEL: {{^}}local_local_sextload_v3i16_to_v3i32:
252 ; GFX9-NOT: m0
253 ; SICIVI: s_mov_b32 m0
255 ; GCN: ds_read_b64
256 ; SI-DAG: ds_write_b32
257 ; SI-DAG: ds_write_b64
258 ; CIVI-DAG: ds_write_b96
259 ; GFX9-DAG: ds_write_b96
261 ; EG: LDS_USHORT_READ_RET
262 ; EG: LDS_USHORT_READ_RET
263 ; EG: LDS_USHORT_READ_RET
264 ; EG-DAG: BFE_INT
265 ; EG-DAG: BFE_INT
266 ; EG-DAG: BFE_INT
267 define amdgpu_kernel void @local_local_sextload_v3i16_to_v3i32(ptr addrspace(3) %out, ptr addrspace(3) %in) {
268 entry:
269   %ld = load <3 x i16>, ptr addrspace(3) %in
270   %ext = sext <3 x i16> %ld to <3 x i32>
271   store <3 x i32> %ext, ptr addrspace(3) %out
272   ret void
275 ; FUNC-LABEL: {{^}}local_local_zextload_v4i16_to_v4i32:
276 ; GCN-NOT: s_wqm_b64
277 ; GFX9-NOT: m0
278 ; SICIVI: s_mov_b32 m0
280 ; GCN: ds_read_b64
282 ; EG: LDS_READ_RET
283 ; EG: LDS_READ_RET
284 define amdgpu_kernel void @local_local_zextload_v4i16_to_v4i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
285   %load = load <4 x i16>, ptr addrspace(3) %in
286   %ext = zext <4 x i16> %load to <4 x i32>
287   store <4 x i32> %ext, ptr addrspace(3) %out
288   ret void
291 ; FUNC-LABEL: {{^}}local_sextload_v4i16_to_v4i32:
292 ; GCN-NOT: s_wqm_b64
293 ; GFX9-NOT: m0
294 ; SICIVI: s_mov_b32 m0
296 ; GCN: ds_read_b64
298 ; EG: LDS_READ_RET
299 ; EG: LDS_READ_RET
300 ; EG-DAG: BFE_INT
301 ; EG-DAG: BFE_INT
302 ; EG-DAG: BFE_INT
303 ; EG-DAG: BFE_INT
304 define amdgpu_kernel void @local_sextload_v4i16_to_v4i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
305   %load = load <4 x i16>, ptr addrspace(3) %in
306   %ext = sext <4 x i16> %load to <4 x i32>
307   store <4 x i32> %ext, ptr addrspace(3) %out
308   ret void
311 ; FUNC-LABEL: {{^}}local_zextload_v8i16_to_v8i32:
312 ; GFX9-NOT: m0
313 ; SICIVI: s_mov_b32 m0
315 ; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
317 ; EG: LDS_READ_RET
318 ; EG: LDS_READ_RET
319 ; EG: LDS_READ_RET
320 ; EG: LDS_READ_RET
321 define amdgpu_kernel void @local_zextload_v8i16_to_v8i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
322   %load = load <8 x i16>, ptr addrspace(3) %in
323   %ext = zext <8 x i16> %load to <8 x i32>
324   store <8 x i32> %ext, ptr addrspace(3) %out
325   ret void
328 ; FUNC-LABEL: {{^}}local_sextload_v8i16_to_v8i32:
329 ; GFX9-NOT: m0
330 ; SICIVI: s_mov_b32 m0
332 ; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
334 ; EG: LDS_READ_RET
335 ; EG: LDS_READ_RET
336 ; EG: LDS_READ_RET
337 ; EG: LDS_READ_RET
338 ; EG-DAG: BFE_INT
339 ; EG-DAG: BFE_INT
340 ; EG-DAG: BFE_INT
341 ; EG-DAG: BFE_INT
342 ; EG-DAG: BFE_INT
343 ; EG-DAG: BFE_INT
344 ; EG-DAG: BFE_INT
345 ; EG-DAG: BFE_INT
346 define amdgpu_kernel void @local_sextload_v8i16_to_v8i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
347   %load = load <8 x i16>, ptr addrspace(3) %in
348   %ext = sext <8 x i16> %load to <8 x i32>
349   store <8 x i32> %ext, ptr addrspace(3) %out
350   ret void
353 ; FUNC-LABEL: {{^}}local_zextload_v16i16_to_v16i32:
354 ; GFX9-NOT: m0
355 ; SICIVI: s_mov_b32 m0
357 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
358 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3{{$}}
360 ; GCN: ds_write2_b64
361 ; GCN: ds_write2_b64
362 ; GCN: ds_write2_b64
363 ; GCN: ds_write2_b64
365 ; EG: LDS_READ_RET
366 ; EG: LDS_READ_RET
367 ; EG: LDS_READ_RET
368 ; EG: LDS_READ_RET
369 ; EG: LDS_READ_RET
370 ; EG: LDS_READ_RET
371 ; EG: LDS_READ_RET
372 ; EG: LDS_READ_RET
373 define amdgpu_kernel void @local_zextload_v16i16_to_v16i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
374   %load = load <16 x i16>, ptr addrspace(3) %in
375   %ext = zext <16 x i16> %load to <16 x i32>
376   store <16 x i32> %ext, ptr addrspace(3) %out
377   ret void
380 ; FUNC-LABEL: {{^}}local_sextload_v16i16_to_v16i32:
381 ; GFX9-NOT: m0
382 ; SICIVI: s_mov_b32 m0
385 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
386 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3{{$}}
388 ; EG: LDS_READ_RET
389 ; EG: LDS_READ_RET
390 ; EG: LDS_READ_RET
391 ; EG: LDS_READ_RET
392 ; EG: LDS_READ_RET
393 ; EG: LDS_READ_RET
394 ; EG: LDS_READ_RET
395 ; EG: LDS_READ_RET
396 ; EG-DAG: BFE_INT
397 ; EG-DAG: BFE_INT
398 ; EG-DAG: BFE_INT
399 ; EG-DAG: BFE_INT
400 ; EG-DAG: BFE_INT
401 ; EG-DAG: BFE_INT
402 ; EG-DAG: BFE_INT
403 ; EG-DAG: BFE_INT
404 ; EG-DAG: BFE_INT
405 ; EG-DAG: BFE_INT
406 ; EG-DAG: BFE_INT
407 ; EG-DAG: BFE_INT
408 ; EG-DAG: BFE_INT
409 ; EG-DAG: BFE_INT
410 ; EG-DAG: BFE_INT
411 ; EG-DAG: BFE_INT
412 define amdgpu_kernel void @local_sextload_v16i16_to_v16i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
413   %load = load <16 x i16>, ptr addrspace(3) %in
414   %ext = sext <16 x i16> %load to <16 x i32>
415   store <16 x i32> %ext, ptr addrspace(3) %out
416   ret void
419 ; FUNC-LABEL: {{^}}local_zextload_v32i16_to_v32i32:
420 ; GFX9-NOT: m0
421 ; SICIVI: s_mov_b32 m0
423 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
424 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3
425 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5
426 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7
428 ; EG: LDS_READ_RET
429 ; EG: LDS_READ_RET
430 ; EG: LDS_READ_RET
431 ; EG: LDS_READ_RET
432 ; EG: LDS_READ_RET
433 ; EG: LDS_READ_RET
434 ; EG: LDS_READ_RET
435 ; EG: LDS_READ_RET
436 ; EG: LDS_READ_RET
437 ; EG: LDS_READ_RET
438 ; EG: LDS_READ_RET
439 ; EG: LDS_READ_RET
440 ; EG: LDS_READ_RET
441 ; EG: LDS_READ_RET
442 ; EG: LDS_READ_RET
443 ; EG: LDS_READ_RET
444 define amdgpu_kernel void @local_zextload_v32i16_to_v32i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
445   %load = load <32 x i16>, ptr addrspace(3) %in
446   %ext = zext <32 x i16> %load to <32 x i32>
447   store <32 x i32> %ext, ptr addrspace(3) %out
448   ret void
451 ; FUNC-LABEL: {{^}}local_sextload_v32i16_to_v32i32:
452 ; GFX9-NOT: m0
453 ; SICIVI: s_mov_b32 m0
455 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3{{$}}
456 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5
457 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
458 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7
459 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:14 offset1:15
460 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:12 offset1:13
461 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:10 offset1:11
462 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:8 offset1:9
463 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:6 offset1:7
464 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:4 offset1:5
465 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:2 offset1:3
466 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset1:1
468 ; EG: LDS_READ_RET
469 ; EG: LDS_READ_RET
470 ; EG: LDS_READ_RET
471 ; EG: LDS_READ_RET
472 ; EG: LDS_READ_RET
473 ; EG: LDS_READ_RET
474 ; EG: LDS_READ_RET
475 ; EG: LDS_READ_RET
476 ; EG: LDS_READ_RET
477 ; EG: LDS_READ_RET
478 ; EG: LDS_READ_RET
479 ; EG: LDS_READ_RET
480 ; EG: LDS_READ_RET
481 ; EG: LDS_READ_RET
482 ; EG: LDS_READ_RET
483 ; EG: LDS_READ_RET
484 define amdgpu_kernel void @local_sextload_v32i16_to_v32i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
485   %load = load <32 x i16>, ptr addrspace(3) %in
486   %ext = sext <32 x i16> %load to <32 x i32>
487   store <32 x i32> %ext, ptr addrspace(3) %out
488   ret void
491 ; FUNC-LABEL: {{^}}local_zextload_v64i16_to_v64i32:
492 ; GFX9-NOT: m0
493 ; SICIVI: s_mov_b32 m0
495 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:14 offset1:15
496 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
497 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3
498 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5
499 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7
500 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:8 offset1:9
501 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:12 offset1:13
502 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:10 offset1:11
503 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:30 offset1:31
504 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:28 offset1:29
505 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:26 offset1:27
506 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:24 offset1:25
507 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:22 offset1:23
508 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:20 offset1:21
509 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:18 offset1:19
510 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:16 offset1:17
511 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:14 offset1:15
512 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:12 offset1:13
513 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:10 offset1:11
514 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:8 offset1:9
515 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:6 offset1:7
516 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:4 offset1:5
517 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:2 offset1:3
518 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset1:1
520 ; EG: LDS_READ_RET
521 ; EG: LDS_READ_RET
522 ; EG: LDS_READ_RET
523 ; EG: LDS_READ_RET
524 ; EG: LDS_READ_RET
525 ; EG: LDS_READ_RET
526 ; EG: LDS_READ_RET
527 ; EG: LDS_READ_RET
528 ; EG: LDS_READ_RET
529 ; EG: LDS_READ_RET
530 ; EG: LDS_READ_RET
531 ; EG: LDS_READ_RET
532 ; EG: LDS_READ_RET
533 ; EG: LDS_READ_RET
534 ; EG: LDS_READ_RET
535 ; EG: LDS_READ_RET
536 ; EG: LDS_READ_RET
537 ; EG: LDS_READ_RET
538 ; EG: LDS_READ_RET
539 ; EG: LDS_READ_RET
540 ; EG: LDS_READ_RET
541 ; EG: LDS_READ_RET
542 ; EG: LDS_READ_RET
543 ; EG: LDS_READ_RET
544 ; EG: LDS_READ_RET
545 ; EG: LDS_READ_RET
546 ; EG: LDS_READ_RET
547 ; EG: LDS_READ_RET
548 ; EG: LDS_READ_RET
549 ; EG: LDS_READ_RET
550 ; EG: LDS_READ_RET
551 ; EG: LDS_READ_RET
552 define amdgpu_kernel void @local_zextload_v64i16_to_v64i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
553   %load = load <64 x i16>, ptr addrspace(3) %in
554   %ext = zext <64 x i16> %load to <64 x i32>
555   store <64 x i32> %ext, ptr addrspace(3) %out
556   ret void
559 ; FUNC-LABEL: {{^}}local_sextload_v64i16_to_v64i32:
560 ; GFX9-NOT: m0
561 ; SICIVI: s_mov_b32 m0
563 ; EG: LDS_READ_RET
564 ; EG: LDS_READ_RET
565 ; EG: LDS_READ_RET
566 ; EG: LDS_READ_RET
567 ; EG: LDS_READ_RET
568 ; EG: LDS_READ_RET
569 ; EG: LDS_READ_RET
570 ; EG: LDS_READ_RET
571 ; EG: LDS_READ_RET
572 ; EG: LDS_READ_RET
573 ; EG: LDS_READ_RET
574 ; EG: LDS_READ_RET
575 ; EG: LDS_READ_RET
576 ; EG: LDS_READ_RET
577 ; EG: LDS_READ_RET
578 ; EG: LDS_READ_RET
579 ; EG: LDS_READ_RET
580 ; EG: LDS_READ_RET
581 ; EG: LDS_READ_RET
582 ; EG: LDS_READ_RET
583 ; EG: LDS_READ_RET
584 ; EG: LDS_READ_RET
585 ; EG: LDS_READ_RET
586 ; EG: LDS_READ_RET
587 ; EG: LDS_READ_RET
588 ; EG: LDS_READ_RET
589 ; EG: LDS_READ_RET
590 ; EG: LDS_READ_RET
591 ; EG: LDS_READ_RET
592 ; EG: LDS_READ_RET
593 ; EG: LDS_READ_RET
594 ; EG: LDS_READ_RET
595 define amdgpu_kernel void @local_sextload_v64i16_to_v64i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
596   %load = load <64 x i16>, ptr addrspace(3) %in
597   %ext = sext <64 x i16> %load to <64 x i32>
598   store <64 x i32> %ext, ptr addrspace(3) %out
599   ret void
602 ; FUNC-LABEL: {{^}}local_zextload_i16_to_i64:
603 ; GFX9-NOT: m0
604 ; SICIVI: s_mov_b32 m0
606 ; GCN-DAG: ds_read_u16 v[[LO:[0-9]+]],
607 ; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
609 ; GCN: ds_write_b64 v{{[0-9]+}}, v[[[LO]]:[[HI]]]
611 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
612 ; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
613 ; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
614 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
615 ; EG-DAG: LDS_WRITE
616 define amdgpu_kernel void @local_zextload_i16_to_i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
617   %a = load i16, ptr addrspace(3) %in
618   %ext = zext i16 %a to i64
619   store i64 %ext, ptr addrspace(3) %out
620   ret void
623 ; FUNC-LABEL: {{^}}local_sextload_i16_to_i64:
624 ; GFX9-NOT: m0
625 ; SICIVI: s_mov_b32 m0
627 ; FIXME: Need to optimize this sequence to avoid an extra shift.
628 ;  t25: i32,ch = load<LD2[%in(addrspace=3)], anyext from i16> t12, t10, undef:i32
629 ;          t28: i64 = any_extend t25
630 ;        t30: i64 = sign_extend_inreg t28, ValueType:ch:i16
631 ; SI: ds_read_i16 v[[LO:[0-9]+]],
632 ; GFX89: ds_read_u16 v[[ULO:[0-9]+]]
633 ; GFX89: v_bfe_i32 v[[LO:[0-9]+]], v[[ULO]], 0, 16
634 ; GCN-DAG: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]]
636 ; GCN: ds_write_b64 v{{[0-9]+}}, v[[[LO]]:[[HI]]]
638 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
639 ; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
640 ; EG-DAG: MOV {{[* ]*}}[[TMP:T[0-9]+\.[XYZW]]], OQAP
641 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
642 ; EG-DAG: BFE_INT {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], {{.*}}, 0.0, literal
643 ; EG-DAG: LDS_WRITE
644 ; EG-DAG: 16
645 ; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
646 define amdgpu_kernel void @local_sextload_i16_to_i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
647   %a = load i16, ptr addrspace(3) %in
648   %ext = sext i16 %a to i64
649   store i64 %ext, ptr addrspace(3) %out
650   ret void
653 ; FUNC-LABEL: {{^}}local_zextload_v1i16_to_v1i64:
654 ; GFX9-NOT: m0
655 ; SICIVI: s_mov_b32 m0
658 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
659 ; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
660 ; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
661 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
662 ; EG-DAG: LDS_WRITE
663 define amdgpu_kernel void @local_zextload_v1i16_to_v1i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
664   %load = load <1 x i16>, ptr addrspace(3) %in
665   %ext = zext <1 x i16> %load to <1 x i64>
666   store <1 x i64> %ext, ptr addrspace(3) %out
667   ret void
670 ; FUNC-LABEL: {{^}}local_sextload_v1i16_to_v1i64:
671 ; GFX9-NOT: m0
672 ; SICIVI: s_mov_b32 m0
675 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
676 ; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
677 ; EG-DAG: MOV {{[* ]*}}[[TMP:T[0-9]+\.[XYZW]]], OQAP
678 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
679 ; EG-DAG: BFE_INT {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], {{.*}}, 0.0, literal
680 ; EG-DAG: LDS_WRITE
681 ; EG-DAG: 16
682 ; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
683 define amdgpu_kernel void @local_sextload_v1i16_to_v1i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
684   %load = load <1 x i16>, ptr addrspace(3) %in
685   %ext = sext <1 x i16> %load to <1 x i64>
686   store <1 x i64> %ext, ptr addrspace(3) %out
687   ret void
690 ; FUNC-LABEL: {{^}}local_zextload_v2i16_to_v2i64:
691 ; GFX9-NOT: m0
692 ; SICIVI: s_mov_b32 m0
695 ; EG: LDS_READ_RET
696 define amdgpu_kernel void @local_zextload_v2i16_to_v2i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
697   %load = load <2 x i16>, ptr addrspace(3) %in
698   %ext = zext <2 x i16> %load to <2 x i64>
699   store <2 x i64> %ext, ptr addrspace(3) %out
700   ret void
703 ; FUNC-LABEL: {{^}}local_sextload_v2i16_to_v2i64:
704 ; GFX9-NOT: m0
705 ; SICIVI: s_mov_b32 m0
708 ; EG: LDS_READ_RET
709 ; EG-DAG: BFE_INT
710 ; EG-DAG: ASHR
711 define amdgpu_kernel void @local_sextload_v2i16_to_v2i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
712   %load = load <2 x i16>, ptr addrspace(3) %in
713   %ext = sext <2 x i16> %load to <2 x i64>
714   store <2 x i64> %ext, ptr addrspace(3) %out
715   ret void
718 ; FUNC-LABEL: {{^}}local_zextload_v4i16_to_v4i64:
719 ; GFX9-NOT: m0
720 ; SICIVI: s_mov_b32 m0
723 ; EG: LDS_READ_RET
724 ; EG: LDS_READ_RET
725 define amdgpu_kernel void @local_zextload_v4i16_to_v4i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
726   %load = load <4 x i16>, ptr addrspace(3) %in
727   %ext = zext <4 x i16> %load to <4 x i64>
728   store <4 x i64> %ext, ptr addrspace(3) %out
729   ret void
732 ; FUNC-LABEL: {{^}}local_sextload_v4i16_to_v4i64:
733 ; GFX9-NOT: m0
734 ; SICIVI: s_mov_b32 m0
737 ; EG: LDS_READ_RET
738 ; EG: LDS_READ_RET
739 ; EG-DAG: BFE_INT
740 ; EG-DAG: BFE_INT
741 ; EG-DAG: ASHR
742 ; EG-DAG: ASHR
743 define amdgpu_kernel void @local_sextload_v4i16_to_v4i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
744   %load = load <4 x i16>, ptr addrspace(3) %in
745   %ext = sext <4 x i16> %load to <4 x i64>
746   store <4 x i64> %ext, ptr addrspace(3) %out
747   ret void
750 ; FUNC-LABEL: {{^}}local_zextload_v8i16_to_v8i64:
751 ; GFX9-NOT: m0
752 ; SICIVI: s_mov_b32 m0
755 ; EG: LDS_READ_RET
756 ; EG: LDS_READ_RET
757 ; EG: LDS_READ_RET
758 ; EG: LDS_READ_RET
759 define amdgpu_kernel void @local_zextload_v8i16_to_v8i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
760   %load = load <8 x i16>, ptr addrspace(3) %in
761   %ext = zext <8 x i16> %load to <8 x i64>
762   store <8 x i64> %ext, ptr addrspace(3) %out
763   ret void
766 ; FUNC-LABEL: {{^}}local_sextload_v8i16_to_v8i64:
767 ; GFX9-NOT: m0
768 ; SICIVI: s_mov_b32 m0
771 ; EG: LDS_READ_RET
772 ; EG: LDS_READ_RET
773 ; EG: LDS_READ_RET
774 ; EG: LDS_READ_RET
775 ; EG-DAG: BFE_INT
776 ; EG-DAG: BFE_INT
777 ; EG-DAG: ASHR
778 ; EG-DAG: ASHR
779 ; EG-DAG: BFE_INT
780 ; EG-DAG: BFE_INT
781 ; EG-DAG: ASHR
782 ; EG-DAG: ASHR
783 define amdgpu_kernel void @local_sextload_v8i16_to_v8i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
784   %load = load <8 x i16>, ptr addrspace(3) %in
785   %ext = sext <8 x i16> %load to <8 x i64>
786   store <8 x i64> %ext, ptr addrspace(3) %out
787   ret void
790 ; FUNC-LABEL: {{^}}local_zextload_v16i16_to_v16i64:
791 ; GFX9-NOT: m0
792 ; SICIVI: s_mov_b32 m0
795 ; EG: LDS_READ_RET
796 ; EG: LDS_READ_RET
797 ; EG: LDS_READ_RET
798 ; EG: LDS_READ_RET
799 ; EG: LDS_READ_RET
800 ; EG: LDS_READ_RET
801 ; EG: LDS_READ_RET
802 ; EG: LDS_READ_RET
803 define amdgpu_kernel void @local_zextload_v16i16_to_v16i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
804   %load = load <16 x i16>, ptr addrspace(3) %in
805   %ext = zext <16 x i16> %load to <16 x i64>
806   store <16 x i64> %ext, ptr addrspace(3) %out
807   ret void
810 ; FUNC-LABEL: {{^}}local_sextload_v16i16_to_v16i64:
811 ; GFX9-NOT: m0
812 ; SICIVI: s_mov_b32 m0
815 ; EG: LDS_READ_RET
816 ; EG: LDS_READ_RET
817 ; EG: LDS_READ_RET
818 ; EG: LDS_READ_RET
819 ; EG: LDS_READ_RET
820 ; EG: LDS_READ_RET
821 ; EG: LDS_READ_RET
822 ; EG: LDS_READ_RET
823 ; EG-DAG: BFE_INT
824 ; EG-DAG: BFE_INT
825 ; EG-DAG: ASHR
826 ; EG-DAG: ASHR
827 ; EG-DAG: BFE_INT
828 ; EG-DAG: BFE_INT
829 ; EG-DAG: ASHR
830 ; EG-DAG: ASHR
831 ; EG-DAG: BFE_INT
832 ; EG-DAG: BFE_INT
833 ; EG-DAG: ASHR
834 ; EG-DAG: ASHR
835 ; EG-DAG: BFE_INT
836 ; EG-DAG: BFE_INT
837 ; EG-DAG: ASHR
838 ; EG-DAG: ASHR
839 define amdgpu_kernel void @local_sextload_v16i16_to_v16i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
840   %load = load <16 x i16>, ptr addrspace(3) %in
841   %ext = sext <16 x i16> %load to <16 x i64>
842   store <16 x i64> %ext, ptr addrspace(3) %out
843   ret void
846 ; FUNC-LABEL: {{^}}local_zextload_v32i16_to_v32i64:
847 ; GFX9-NOT: m0
848 ; SICIVI: s_mov_b32 m0
851 ; EG: LDS_READ_RET
852 ; EG: LDS_READ_RET
853 ; EG: LDS_READ_RET
854 ; EG: LDS_READ_RET
855 ; EG: LDS_READ_RET
856 ; EG: LDS_READ_RET
857 ; EG: LDS_READ_RET
858 ; EG: LDS_READ_RET
859 ; EG: LDS_READ_RET
860 ; EG: LDS_READ_RET
861 ; EG: LDS_READ_RET
862 ; EG: LDS_READ_RET
863 ; EG: LDS_READ_RET
864 ; EG: LDS_READ_RET
865 ; EG: LDS_READ_RET
866 ; EG: LDS_READ_RET
867 define amdgpu_kernel void @local_zextload_v32i16_to_v32i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
868   %load = load <32 x i16>, ptr addrspace(3) %in
869   %ext = zext <32 x i16> %load to <32 x i64>
870   store <32 x i64> %ext, ptr addrspace(3) %out
871   ret void
874 ; FUNC-LABEL: {{^}}local_sextload_v32i16_to_v32i64:
875 ; GFX9-NOT: m0
876 ; SICIVI: s_mov_b32 m0
879 ; EG: LDS_READ_RET
880 ; EG: LDS_READ_RET
881 ; EG: LDS_READ_RET
882 ; EG: LDS_READ_RET
883 ; EG: LDS_READ_RET
884 ; EG: LDS_READ_RET
885 ; EG: LDS_READ_RET
886 ; EG: LDS_READ_RET
887 ; EG: LDS_READ_RET
888 ; EG: LDS_READ_RET
889 ; EG: LDS_READ_RET
890 ; EG: LDS_READ_RET
891 ; EG: LDS_READ_RET
892 ; EG: LDS_READ_RET
893 ; EG: LDS_READ_RET
894 ; EG: LDS_READ_RET
895 ; EG-DAG: BFE_INT
896 ; EG-DAG: BFE_INT
897 ; EG-DAG: ASHR
898 ; EG-DAG: ASHR
899 ; EG-DAG: BFE_INT
900 ; EG-DAG: BFE_INT
901 ; EG-DAG: ASHR
902 ; EG-DAG: ASHR
903 ; EG-DAG: BFE_INT
904 ; EG-DAG: BFE_INT
905 ; EG-DAG: ASHR
906 ; EG-DAG: ASHR
907 ; EG-DAG: BFE_INT
908 ; EG-DAG: BFE_INT
909 ; EG-DAG: ASHR
910 ; EG-DAG: ASHR
911 ; EG-DAG: BFE_INT
912 ; EG-DAG: BFE_INT
913 ; EG-DAG: ASHR
914 ; EG-DAG: ASHR
915 ; EG-DAG: BFE_INT
916 ; EG-DAG: BFE_INT
917 ; EG-DAG: ASHR
918 ; EG-DAG: ASHR
919 ; EG-DAG: BFE_INT
920 ; EG-DAG: BFE_INT
921 ; EG-DAG: ASHR
922 ; EG-DAG: ASHR
923 ; EG-DAG: BFE_INT
924 ; EG-DAG: BFE_INT
925 ; EG-DAG: ASHR
926 ; EG-DAG: ASHR
927 define amdgpu_kernel void @local_sextload_v32i16_to_v32i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
928   %load = load <32 x i16>, ptr addrspace(3) %in
929   %ext = sext <32 x i16> %load to <32 x i64>
930   store <32 x i64> %ext, ptr addrspace(3) %out
931   ret void
934 ; ; XFUNC-LABEL: {{^}}local_zextload_v64i16_to_v64i64:
935 ; define amdgpu_kernel void @local_zextload_v64i16_to_v64i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
936 ;   %load = load <64 x i16>, ptr addrspace(3) %in
937 ;   %ext = zext <64 x i16> %load to <64 x i64>
938 ;   store <64 x i64> %ext, ptr addrspace(3) %out
939 ;   ret void
940 ; }
942 ; ; XFUNC-LABEL: {{^}}local_sextload_v64i16_to_v64i64:
943 ; define amdgpu_kernel void @local_sextload_v64i16_to_v64i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
944 ;   %load = load <64 x i16>, ptr addrspace(3) %in
945 ;   %ext = sext <64 x i16> %load to <64 x i64>
946 ;   store <64 x i64> %ext, ptr addrspace(3) %out
947 ;   ret void
948 ; }
950 ; Tests if ds_read/write_b128 gets generated for the 16 byte aligned load.
951 ; FUNC-LABEL: {{^}}local_v8i16_to_128:
953 ; SI-NOT: ds_read_b128
954 ; SI-NOT: ds_write_b128
956 ; CIVI: ds_read_b128
957 ; CIVI: ds_write_b128
959 ; EG: LDS_READ_RET
960 ; EG: LDS_READ_RET
961 ; EG: LDS_READ_RET
962 ; EG: LDS_READ_RET
963 define amdgpu_kernel void @local_v8i16_to_128(ptr addrspace(3) %out, ptr addrspace(3) %in) {
964   %ld = load <8 x i16>, ptr addrspace(3) %in, align 16
965   store <8 x i16> %ld, ptr addrspace(3) %out, align 16
966   ret void
969 attributes #0 = { nounwind }