[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AMDGPU / load-local-i16.ll
blobd8d7d98e3088fd3afe9ff987ac5deeec03865f1b
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 -verify-machineinstrs < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=GCN,SICIVI,GFX89,FUNC %s
3 ; RUN: llc -march=amdgcn -mcpu=gfx900 -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(i16 addrspace(3)* %out, i16 addrspace(3)* %in) {
22 entry:
23   %ld = load i16, i16 addrspace(3)* %in
24   store i16 %ld, i16 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(<2 x i16> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) {
40 entry:
41   %ld = load <2 x i16>, <2 x i16> addrspace(3)* %in
42   store <2 x i16> %ld, <2 x i16> 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(<3 x i16> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) {
57 entry:
58   %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in
59   store <3 x i16> %ld, <3 x i16> 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(<4 x i16> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) {
72 entry:
73   %ld = load <4 x i16>, <4 x i16> addrspace(3)* %in
74   store <4 x i16> %ld, <4 x i16> 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(<8 x i16> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) {
89 entry:
90   %ld = load <8 x i16>, <8 x i16> addrspace(3)* %in
91   store <8 x i16> %ld, <8 x i16> 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(<16 x i16> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) {
113 entry:
114   %ld = load <16 x i16>, <16 x i16> addrspace(3)* %in
115   store <16 x i16> %ld, <16 x i16> 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(i32 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
132   %a = load i16, i16 addrspace(3)* %in
133   %ext = zext i16 %a to i32
134   store i32 %ext, i32 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(i32 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
154   %a = load i16, i16 addrspace(3)* %in
155   %ext = sext i16 %a to i32
156   store i32 %ext, i32 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(<1 x i32> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
172   %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
173   %ext = zext <1 x i16> %load to <1 x i32>
174   store <1 x i32> %ext, <1 x i32> 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(<1 x i32> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
192   %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
193   %ext = sext <1 x i16> %load to <1 x i32>
194   store <1 x i32> %ext, <1 x i32> 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(<2 x i32> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
207   %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
208   %ext = zext <2 x i16> %load to <2 x i32>
209   store <2 x i32> %ext, <2 x i32> 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(<2 x i32> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
224   %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
225   %ext = sext <2 x i16> %load to <2 x i32>
226   store <2 x i32> %ext, <2 x i32> 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 ; GCN-DAG: ds_write_b32
236 ; GCN-DAG: ds_write_b64
238 ; EG: LDS_USHORT_READ_RET
239 ; EG: LDS_USHORT_READ_RET
240 ; EG: LDS_USHORT_READ_RET
241 define amdgpu_kernel void @local_local_zextload_v3i16_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) {
242 entry:
243   %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in
244   %ext = zext <3 x i16> %ld to <3 x i32>
245   store <3 x i32> %ext, <3 x i32> addrspace(3)* %out
246   ret void
249 ; FUNC-LABEL: {{^}}local_local_sextload_v3i16_to_v3i32:
250 ; GFX9-NOT: m0
251 ; SICIVI: s_mov_b32 m0
253 ; GCN: ds_read_b64
254 ; GCN-DAG: ds_write_b32
255 ; GCN-DAG: ds_write_b64
257 ; EG: LDS_USHORT_READ_RET
258 ; EG: LDS_USHORT_READ_RET
259 ; EG: LDS_USHORT_READ_RET
260 ; EG-DAG: BFE_INT
261 ; EG-DAG: BFE_INT
262 ; EG-DAG: BFE_INT
263 define amdgpu_kernel void @local_local_sextload_v3i16_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) {
264 entry:
265   %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in
266   %ext = sext <3 x i16> %ld to <3 x i32>
267   store <3 x i32> %ext, <3 x i32> addrspace(3)* %out
268   ret void
271 ; FUNC-LABEL: {{^}}local_local_zextload_v4i16_to_v4i32:
272 ; GCN-NOT: s_wqm_b64
273 ; GFX9-NOT: m0
274 ; SICIVI: s_mov_b32 m0
276 ; GCN: ds_read_b64
278 ; EG: LDS_READ_RET
279 ; EG: LDS_READ_RET
280 define amdgpu_kernel void @local_local_zextload_v4i16_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
281   %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
282   %ext = zext <4 x i16> %load to <4 x i32>
283   store <4 x i32> %ext, <4 x i32> addrspace(3)* %out
284   ret void
287 ; FUNC-LABEL: {{^}}local_sextload_v4i16_to_v4i32:
288 ; GCN-NOT: s_wqm_b64
289 ; GFX9-NOT: m0
290 ; SICIVI: s_mov_b32 m0
292 ; GCN: ds_read_b64
294 ; EG: LDS_READ_RET
295 ; EG: LDS_READ_RET
296 ; EG-DAG: BFE_INT
297 ; EG-DAG: BFE_INT
298 ; EG-DAG: BFE_INT
299 ; EG-DAG: BFE_INT
300 define amdgpu_kernel void @local_sextload_v4i16_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
301   %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
302   %ext = sext <4 x i16> %load to <4 x i32>
303   store <4 x i32> %ext, <4 x i32> addrspace(3)* %out
304   ret void
307 ; FUNC-LABEL: {{^}}local_zextload_v8i16_to_v8i32:
308 ; GFX9-NOT: m0
309 ; SICIVI: s_mov_b32 m0
311 ; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
313 ; EG: LDS_READ_RET
314 ; EG: LDS_READ_RET
315 ; EG: LDS_READ_RET
316 ; EG: LDS_READ_RET
317 define amdgpu_kernel void @local_zextload_v8i16_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
318   %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
319   %ext = zext <8 x i16> %load to <8 x i32>
320   store <8 x i32> %ext, <8 x i32> addrspace(3)* %out
321   ret void
324 ; FUNC-LABEL: {{^}}local_sextload_v8i16_to_v8i32:
325 ; GFX9-NOT: m0
326 ; SICIVI: s_mov_b32 m0
328 ; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
330 ; EG: LDS_READ_RET
331 ; EG: LDS_READ_RET
332 ; EG: LDS_READ_RET
333 ; EG: LDS_READ_RET
334 ; EG-DAG: BFE_INT
335 ; EG-DAG: BFE_INT
336 ; EG-DAG: BFE_INT
337 ; EG-DAG: BFE_INT
338 ; EG-DAG: BFE_INT
339 ; EG-DAG: BFE_INT
340 ; EG-DAG: BFE_INT
341 ; EG-DAG: BFE_INT
342 define amdgpu_kernel void @local_sextload_v8i16_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
343   %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
344   %ext = sext <8 x i16> %load to <8 x i32>
345   store <8 x i32> %ext, <8 x i32> addrspace(3)* %out
346   ret void
349 ; FUNC-LABEL: {{^}}local_zextload_v16i16_to_v16i32:
350 ; GFX9-NOT: m0
351 ; SICIVI: s_mov_b32 m0
353 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
354 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3{{$}}
356 ; GCN: ds_write2_b64
357 ; GCN: ds_write2_b64
358 ; GCN: ds_write2_b64
359 ; GCN: ds_write2_b64
361 ; EG: LDS_READ_RET
362 ; EG: LDS_READ_RET
363 ; EG: LDS_READ_RET
364 ; EG: LDS_READ_RET
365 ; EG: LDS_READ_RET
366 ; EG: LDS_READ_RET
367 ; EG: LDS_READ_RET
368 ; EG: LDS_READ_RET
369 define amdgpu_kernel void @local_zextload_v16i16_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
370   %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
371   %ext = zext <16 x i16> %load to <16 x i32>
372   store <16 x i32> %ext, <16 x i32> addrspace(3)* %out
373   ret void
376 ; FUNC-LABEL: {{^}}local_sextload_v16i16_to_v16i32:
377 ; GFX9-NOT: m0
378 ; SICIVI: s_mov_b32 m0
381 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
382 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3{{$}}
384 ; EG: LDS_READ_RET
385 ; EG: LDS_READ_RET
386 ; EG: LDS_READ_RET
387 ; EG: LDS_READ_RET
388 ; EG: LDS_READ_RET
389 ; EG: LDS_READ_RET
390 ; EG: LDS_READ_RET
391 ; EG: LDS_READ_RET
392 ; EG-DAG: BFE_INT
393 ; EG-DAG: BFE_INT
394 ; EG-DAG: BFE_INT
395 ; EG-DAG: BFE_INT
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 define amdgpu_kernel void @local_sextload_v16i16_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
409   %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
410   %ext = sext <16 x i16> %load to <16 x i32>
411   store <16 x i32> %ext, <16 x i32> addrspace(3)* %out
412   ret void
415 ; FUNC-LABEL: {{^}}local_zextload_v32i16_to_v32i32:
416 ; GFX9-NOT: m0
417 ; SICIVI: s_mov_b32 m0
419 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
420 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3
421 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5
422 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7
424 ; EG: LDS_READ_RET
425 ; EG: LDS_READ_RET
426 ; EG: LDS_READ_RET
427 ; EG: LDS_READ_RET
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 define amdgpu_kernel void @local_zextload_v32i16_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
441   %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
442   %ext = zext <32 x i16> %load to <32 x i32>
443   store <32 x i32> %ext, <32 x i32> addrspace(3)* %out
444   ret void
447 ; FUNC-LABEL: {{^}}local_sextload_v32i16_to_v32i32:
448 ; GFX9-NOT: m0
449 ; SICIVI: s_mov_b32 m0
451 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3{{$}}
452 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5
453 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
454 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7
455 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:14 offset1:15
456 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:12 offset1:13
457 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:10 offset1:11
458 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:8 offset1:9
459 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:6 offset1:7
460 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:4 offset1:5
461 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:2 offset1:3
462 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset1:1
464 ; EG: LDS_READ_RET
465 ; EG: LDS_READ_RET
466 ; EG: LDS_READ_RET
467 ; EG: LDS_READ_RET
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 define amdgpu_kernel void @local_sextload_v32i16_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
481   %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
482   %ext = sext <32 x i16> %load to <32 x i32>
483   store <32 x i32> %ext, <32 x i32> addrspace(3)* %out
484   ret void
487 ; FUNC-LABEL: {{^}}local_zextload_v64i16_to_v64i32:
488 ; GFX9-NOT: m0
489 ; SICIVI: s_mov_b32 m0
491 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:14 offset1:15
492 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
493 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3
494 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5
495 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7
496 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:8 offset1:9
497 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:12 offset1:13
498 ; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:10 offset1:11
499 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:30 offset1:31
500 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:28 offset1:29
501 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:26 offset1:27
502 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:24 offset1:25
503 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:22 offset1:23
504 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:20 offset1:21
505 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:18 offset1:19
506 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:16 offset1:17
507 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:14 offset1:15
508 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:12 offset1:13
509 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:10 offset1:11
510 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:8 offset1:9
511 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:6 offset1:7
512 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:4 offset1:5
513 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset0:2 offset1:3
514 ; GCN-DAG: ds_write2_b64 v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}} offset1:1
516 ; EG: LDS_READ_RET
517 ; EG: LDS_READ_RET
518 ; EG: LDS_READ_RET
519 ; EG: LDS_READ_RET
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 define amdgpu_kernel void @local_zextload_v64i16_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
549   %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
550   %ext = zext <64 x i16> %load to <64 x i32>
551   store <64 x i32> %ext, <64 x i32> addrspace(3)* %out
552   ret void
555 ; FUNC-LABEL: {{^}}local_sextload_v64i16_to_v64i32:
556 ; GFX9-NOT: m0
557 ; SICIVI: s_mov_b32 m0
559 ; EG: LDS_READ_RET
560 ; EG: LDS_READ_RET
561 ; EG: LDS_READ_RET
562 ; EG: LDS_READ_RET
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 define amdgpu_kernel void @local_sextload_v64i16_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
592   %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
593   %ext = sext <64 x i16> %load to <64 x i32>
594   store <64 x i32> %ext, <64 x i32> addrspace(3)* %out
595   ret void
598 ; FUNC-LABEL: {{^}}local_zextload_i16_to_i64:
599 ; GFX9-NOT: m0
600 ; SICIVI: s_mov_b32 m0
602 ; GCN-DAG: ds_read_u16 v[[LO:[0-9]+]],
603 ; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
605 ; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]]
607 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
608 ; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
609 ; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
610 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
611 ; EG-DAG: LDS_WRITE
612 define amdgpu_kernel void @local_zextload_i16_to_i64(i64 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
613   %a = load i16, i16 addrspace(3)* %in
614   %ext = zext i16 %a to i64
615   store i64 %ext, i64 addrspace(3)* %out
616   ret void
619 ; FUNC-LABEL: {{^}}local_sextload_i16_to_i64:
620 ; GFX9-NOT: m0
621 ; SICIVI: s_mov_b32 m0
623 ; FIXME: Need to optimize this sequence to avoid an extra shift.
624 ;  t25: i32,ch = load<LD2[%in(addrspace=3)], anyext from i16> t12, t10, undef:i32
625 ;          t28: i64 = any_extend t25
626 ;        t30: i64 = sign_extend_inreg t28, ValueType:ch:i16
627 ; SI: ds_read_i16 v[[LO:[0-9]+]],
628 ; GFX89: ds_read_u16 v[[ULO:[0-9]+]]
629 ; GFX89: v_bfe_i32 v[[LO:[0-9]+]], v[[ULO]], 0, 16
630 ; GCN-DAG: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]]
632 ; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]]
634 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
635 ; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
636 ; EG-DAG: MOV {{[* ]*}}[[TMP:T[0-9]+\.[XYZW]]], OQAP
637 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
638 ; EG-DAG: BFE_INT {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], {{.*}}, 0.0, literal
639 ; EG-DAG: LDS_WRITE
640 ; EG-DAG: 16
641 ; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
642 define amdgpu_kernel void @local_sextload_i16_to_i64(i64 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
643   %a = load i16, i16 addrspace(3)* %in
644   %ext = sext i16 %a to i64
645   store i64 %ext, i64 addrspace(3)* %out
646   ret void
649 ; FUNC-LABEL: {{^}}local_zextload_v1i16_to_v1i64:
650 ; GFX9-NOT: m0
651 ; SICIVI: s_mov_b32 m0
654 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
655 ; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
656 ; EG-DAG: MOV {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], OQAP
657 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
658 ; EG-DAG: LDS_WRITE
659 define amdgpu_kernel void @local_zextload_v1i16_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
660   %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
661   %ext = zext <1 x i16> %load to <1 x i64>
662   store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
663   ret void
666 ; FUNC-LABEL: {{^}}local_sextload_v1i16_to_v1i64:
667 ; GFX9-NOT: m0
668 ; SICIVI: s_mov_b32 m0
671 ; EG: MOV {{[* ]*}}[[FROM:T[0-9]+\.[XYZW]]], KC0[2].Z
672 ; EG: LDS_USHORT_READ_RET {{.*}} [[FROM]]
673 ; EG-DAG: MOV {{[* ]*}}[[TMP:T[0-9]+\.[XYZW]]], OQAP
674 ; EG-DAG: MOV {{[* ]*}}[[TO:T[0-9]+\.[XYZW]]], KC0[2].Y
675 ; EG-DAG: BFE_INT {{[* ]*}}[[DATA:T[0-9]+\.[XYZW]]], {{.*}}, 0.0, literal
676 ; EG-DAG: LDS_WRITE
677 ; EG-DAG: 16
678 ; EG: LDS_WRITE {{\*?}} [[TO]], [[DATA]]
679 define amdgpu_kernel void @local_sextload_v1i16_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
680   %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
681   %ext = sext <1 x i16> %load to <1 x i64>
682   store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
683   ret void
686 ; FUNC-LABEL: {{^}}local_zextload_v2i16_to_v2i64:
687 ; GFX9-NOT: m0
688 ; SICIVI: s_mov_b32 m0
691 ; EG: LDS_READ_RET
692 define amdgpu_kernel void @local_zextload_v2i16_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
693   %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
694   %ext = zext <2 x i16> %load to <2 x i64>
695   store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
696   ret void
699 ; FUNC-LABEL: {{^}}local_sextload_v2i16_to_v2i64:
700 ; GFX9-NOT: m0
701 ; SICIVI: s_mov_b32 m0
704 ; EG: LDS_READ_RET
705 ; EG-DAG: BFE_INT
706 ; EG-DAG: ASHR
707 define amdgpu_kernel void @local_sextload_v2i16_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
708   %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
709   %ext = sext <2 x i16> %load to <2 x i64>
710   store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
711   ret void
714 ; FUNC-LABEL: {{^}}local_zextload_v4i16_to_v4i64:
715 ; GFX9-NOT: m0
716 ; SICIVI: s_mov_b32 m0
719 ; EG: LDS_READ_RET
720 ; EG: LDS_READ_RET
721 define amdgpu_kernel void @local_zextload_v4i16_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
722   %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
723   %ext = zext <4 x i16> %load to <4 x i64>
724   store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
725   ret void
728 ; FUNC-LABEL: {{^}}local_sextload_v4i16_to_v4i64:
729 ; GFX9-NOT: m0
730 ; SICIVI: s_mov_b32 m0
733 ; EG: LDS_READ_RET
734 ; EG: LDS_READ_RET
735 ; EG-DAG: BFE_INT
736 ; EG-DAG: BFE_INT
737 ; EG-DAG: ASHR
738 ; EG-DAG: ASHR
739 define amdgpu_kernel void @local_sextload_v4i16_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
740   %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
741   %ext = sext <4 x i16> %load to <4 x i64>
742   store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
743   ret void
746 ; FUNC-LABEL: {{^}}local_zextload_v8i16_to_v8i64:
747 ; GFX9-NOT: m0
748 ; SICIVI: s_mov_b32 m0
751 ; EG: LDS_READ_RET
752 ; EG: LDS_READ_RET
753 ; EG: LDS_READ_RET
754 ; EG: LDS_READ_RET
755 define amdgpu_kernel void @local_zextload_v8i16_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
756   %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
757   %ext = zext <8 x i16> %load to <8 x i64>
758   store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
759   ret void
762 ; FUNC-LABEL: {{^}}local_sextload_v8i16_to_v8i64:
763 ; GFX9-NOT: m0
764 ; SICIVI: s_mov_b32 m0
767 ; EG: LDS_READ_RET
768 ; EG: LDS_READ_RET
769 ; EG: LDS_READ_RET
770 ; EG: LDS_READ_RET
771 ; EG-DAG: BFE_INT
772 ; EG-DAG: BFE_INT
773 ; EG-DAG: ASHR
774 ; EG-DAG: ASHR
775 ; EG-DAG: BFE_INT
776 ; EG-DAG: BFE_INT
777 ; EG-DAG: ASHR
778 ; EG-DAG: ASHR
779 define amdgpu_kernel void @local_sextload_v8i16_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
780   %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
781   %ext = sext <8 x i16> %load to <8 x i64>
782   store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
783   ret void
786 ; FUNC-LABEL: {{^}}local_zextload_v16i16_to_v16i64:
787 ; GFX9-NOT: m0
788 ; SICIVI: s_mov_b32 m0
791 ; EG: LDS_READ_RET
792 ; EG: LDS_READ_RET
793 ; EG: LDS_READ_RET
794 ; EG: LDS_READ_RET
795 ; EG: LDS_READ_RET
796 ; EG: LDS_READ_RET
797 ; EG: LDS_READ_RET
798 ; EG: LDS_READ_RET
799 define amdgpu_kernel void @local_zextload_v16i16_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
800   %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
801   %ext = zext <16 x i16> %load to <16 x i64>
802   store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
803   ret void
806 ; FUNC-LABEL: {{^}}local_sextload_v16i16_to_v16i64:
807 ; GFX9-NOT: m0
808 ; SICIVI: s_mov_b32 m0
811 ; EG: LDS_READ_RET
812 ; EG: LDS_READ_RET
813 ; EG: LDS_READ_RET
814 ; EG: LDS_READ_RET
815 ; EG: LDS_READ_RET
816 ; EG: LDS_READ_RET
817 ; EG: LDS_READ_RET
818 ; EG: LDS_READ_RET
819 ; EG-DAG: BFE_INT
820 ; EG-DAG: BFE_INT
821 ; EG-DAG: ASHR
822 ; EG-DAG: ASHR
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 define amdgpu_kernel void @local_sextload_v16i16_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
836   %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
837   %ext = sext <16 x i16> %load to <16 x i64>
838   store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
839   ret void
842 ; FUNC-LABEL: {{^}}local_zextload_v32i16_to_v32i64:
843 ; GFX9-NOT: m0
844 ; SICIVI: s_mov_b32 m0
847 ; EG: LDS_READ_RET
848 ; EG: LDS_READ_RET
849 ; EG: LDS_READ_RET
850 ; EG: LDS_READ_RET
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 define amdgpu_kernel void @local_zextload_v32i16_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
864   %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
865   %ext = zext <32 x i16> %load to <32 x i64>
866   store <32 x i64> %ext, <32 x i64> addrspace(3)* %out
867   ret void
870 ; FUNC-LABEL: {{^}}local_sextload_v32i16_to_v32i64:
871 ; GFX9-NOT: m0
872 ; SICIVI: s_mov_b32 m0
875 ; EG: LDS_READ_RET
876 ; EG: LDS_READ_RET
877 ; EG: LDS_READ_RET
878 ; EG: LDS_READ_RET
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-DAG: BFE_INT
892 ; EG-DAG: BFE_INT
893 ; EG-DAG: ASHR
894 ; EG-DAG: ASHR
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 define amdgpu_kernel void @local_sextload_v32i16_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
924   %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
925   %ext = sext <32 x i16> %load to <32 x i64>
926   store <32 x i64> %ext, <32 x i64> addrspace(3)* %out
927   ret void
930 ; ; XFUNC-LABEL: {{^}}local_zextload_v64i16_to_v64i64:
931 ; define amdgpu_kernel void @local_zextload_v64i16_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
932 ;   %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
933 ;   %ext = zext <64 x i16> %load to <64 x i64>
934 ;   store <64 x i64> %ext, <64 x i64> addrspace(3)* %out
935 ;   ret void
936 ; }
938 ; ; XFUNC-LABEL: {{^}}local_sextload_v64i16_to_v64i64:
939 ; define amdgpu_kernel void @local_sextload_v64i16_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
940 ;   %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
941 ;   %ext = sext <64 x i16> %load to <64 x i64>
942 ;   store <64 x i64> %ext, <64 x i64> addrspace(3)* %out
943 ;   ret void
944 ; }
946 ; Tests if ds_read/write_b128 gets generated for the 16 byte aligned load.
947 ; FUNC-LABEL: {{^}}local_v8i16_to_128:
949 ; SI-NOT: ds_read_b128
950 ; SI-NOT: ds_write_b128
952 ; CIVI: ds_read_b128
953 ; CIVI: ds_write_b128
955 ; EG: LDS_READ_RET
956 ; EG: LDS_READ_RET
957 ; EG: LDS_READ_RET
958 ; EG: LDS_READ_RET
959 define amdgpu_kernel void @local_v8i16_to_128(<8 x i16> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) {
960   %ld = load <8 x i16>, <8 x i16> addrspace(3)* %in, align 16
961   store <8 x i16> %ld, <8 x i16> addrspace(3)* %out, align 16
962   ret void
965 attributes #0 = { nounwind }