[clang] Fix crashes when passing VLA to va_arg (#119563)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / load-local-i8.ll
blob97314910f828090d91af3b327fb1c0c8b1cb6c66
1 ; RUN: llc -mtriple=amdgcn-- -verify-machineinstrs < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=GCN,SICIVI,FUNC %s
2 ; RUN: llc -mtriple=amdgcn-- -mcpu=tonga -mattr=-enable-ds128 -verify-machineinstrs < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=GCN,SICIVI,FUNC %s
3 ; RUN: llc -mtriple=amdgcn-- -mcpu=gfx900 -mattr=-enable-ds128 -verify-machineinstrs < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=GCN,GFX9,FUNC %s
4 ; RUN: llc -mtriple=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 -mtriple=amdgcn -mcpu=tonga -mattr=+enable-ds128 < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=CIVI,FUNC %s
8 ; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -mattr=+enable-ds128 < %s | FileCheck -allow-deprecated-dag-overlap -check-prefixes=CIVI,FUNC %s
10 ; FUNC-LABEL: {{^}}local_load_i8:
11 ; GCN-NOT: s_wqm_b64
12 ; SICIVI: s_mov_b32 m0
13 ; GFX9-NOT: m0
14 ; GCN: ds_read_u8
16 ; EG: LDS_UBYTE_READ_RET
17 define amdgpu_kernel void @local_load_i8(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
18 entry:
19   %ld = load i8, ptr addrspace(3) %in
20   store i8 %ld, ptr addrspace(3) %out
21   ret void
24 ; FUNC-LABEL: {{^}}local_load_v2i8:
25 ; GCN-NOT: s_wqm_b64
26 ; SICIVI: s_mov_b32 m0
27 ; GFX9-NOT: m0
28 ; GCN: ds_read_u16
30 ; EG: LDS_USHORT_READ_RET
31 define amdgpu_kernel void @local_load_v2i8(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
32 entry:
33   %ld = load <2 x i8>, ptr addrspace(3) %in
34   store <2 x i8> %ld, ptr addrspace(3) %out
35   ret void
38 ; FUNC-LABEL: {{^}}local_load_v3i8:
39 ; GFX9-NOT: m0
40 ; GCN: ds_read_b32
42 ; EG: DS_READ_RET
43 define amdgpu_kernel void @local_load_v3i8(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
44 entry:
45   %ld = load <3 x i8>, ptr addrspace(3) %in
46   store <3 x i8> %ld, ptr addrspace(3) %out
47   ret void
50 ; FUNC-LABEL: {{^}}local_load_v4i8:
51 ; GFX9-NOT: m0
52 ; GCN: ds_read_b32
54 ; EG: LDS_READ_RET
55 define amdgpu_kernel void @local_load_v4i8(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
56 entry:
57   %ld = load <4 x i8>, ptr addrspace(3) %in
58   store <4 x i8> %ld, ptr addrspace(3) %out
59   ret void
62 ; FUNC-LABEL: {{^}}local_load_v8i8:
63 ; GFX9-NOT: m0
64 ; GCN: ds_read_b64
66 ; EG: LDS_READ_RET
67 ; EG: LDS_READ_RET
68 define amdgpu_kernel void @local_load_v8i8(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
69 entry:
70   %ld = load <8 x i8>, ptr addrspace(3) %in
71   store <8 x i8> %ld, ptr addrspace(3) %out
72   ret void
75 ; FUNC-LABEL: {{^}}local_load_v16i8:
76 ; GFX9-NOT: m0
77 ; GCN: ds_read2_b64  v[[[LO:[0-9]+]]:[[HI:[0-9]+]]], v{{[0-9]+}} offset1:1{{$}}
78 ; GCN: ds_write2_b64 v{{[0-9]+}}, v[[[LO]]:{{[0-9]+}}], v[{{[0-9]+}}:[[HI]]] offset1:1{{$}}
80 ; EG: LDS_READ_RET
81 ; EG: LDS_READ_RET
82 ; EG: LDS_READ_RET
83 ; EG: LDS_READ_RET
84 define amdgpu_kernel void @local_load_v16i8(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
85 entry:
86   %ld = load <16 x i8>, ptr addrspace(3) %in
87   store <16 x i8> %ld, ptr addrspace(3) %out
88   ret void
91 ; FUNC-LABEL: {{^}}local_zextload_i8_to_i32:
92 ; GFX9-NOT: m0
93 ; GCN-NOT: s_wqm_b64
94 ; SICIVI: s_mov_b32 m0
95 ; GCN: ds_read_u8
97 ; EG: LDS_UBYTE_READ_RET
98 define amdgpu_kernel void @local_zextload_i8_to_i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
99   %a = load i8, ptr addrspace(3) %in
100   %ext = zext i8 %a to i32
101   store i32 %ext, ptr addrspace(3) %out
102   ret void
105 ; FUNC-LABEL: {{^}}local_sextload_i8_to_i32:
106 ; GCN-NOT: s_wqm_b64
107 ; GFX9-NOT: m0
108 ; SICIVI: s_mov_b32 m0
109 ; GCN: ds_read_i8
111 ; EG: LDS_UBYTE_READ_RET
112 ; EG: BFE_INT
113 define amdgpu_kernel void @local_sextload_i8_to_i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
114   %ld = load i8, ptr addrspace(3) %in
115   %ext = sext i8 %ld to i32
116   store i32 %ext, ptr addrspace(3) %out
117   ret void
120 ; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i32:
122 ; EG: LDS_UBYTE_READ_RET
123 define amdgpu_kernel void @local_zextload_v1i8_to_v1i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
124   %load = load <1 x i8>, ptr addrspace(3) %in
125   %ext = zext <1 x i8> %load to <1 x i32>
126   store <1 x i32> %ext, ptr addrspace(3) %out
127   ret void
130 ; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i32:
131 ; GFX9-NOT: m0
133 ; EG: LDS_UBYTE_READ_RET
134 ; EG: BFE_INT
135 define amdgpu_kernel void @local_sextload_v1i8_to_v1i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
136   %load = load <1 x i8>, ptr addrspace(3) %in
137   %ext = sext <1 x i8> %load to <1 x i32>
138   store <1 x i32> %ext, ptr addrspace(3) %out
139   ret void
142 ; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i32:
143 ; GFX9-NOT: m0
144 ; GCN: ds_read_u16
146 ; EG: LDS_USHORT_READ_RET
147 define amdgpu_kernel void @local_zextload_v2i8_to_v2i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
148   %load = load <2 x i8>, ptr addrspace(3) %in
149   %ext = zext <2 x i8> %load to <2 x i32>
150   store <2 x i32> %ext, ptr addrspace(3) %out
151   ret void
154 ; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i32:
155 ; GCN-NOT: s_wqm_b64
156 ; GFX9-NOT: m0
157 ; SICIVI: s_mov_b32 m0
158 ; GCN: ds_read_u16
159 ; FIXME: Need to optimize this sequence to avoid extra shift on VI.
160 ;         t23: i16 = srl t39, Constant:i32<8>
161 ;          t31: i32 = any_extend t23
162 ;        t33: i32 = sign_extend_inreg t31, ValueType:ch:i8
164 ; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8
165 ; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 8
167 ; EG: LDS_USHORT_READ_RET
168 ; EG-DAG: BFE_INT
169 ; EG-DAG: BFE_INT
170 define amdgpu_kernel void @local_sextload_v2i8_to_v2i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
171   %load = load <2 x i8>, ptr addrspace(3) %in
172   %ext = sext <2 x i8> %load to <2 x i32>
173   store <2 x i32> %ext, ptr addrspace(3) %out
174   ret void
177 ; FUNC-LABEL: {{^}}local_zextload_v3i8_to_v3i32:
178 ; GFX9-NOT: m0
179 ; GCN: ds_read_b32
181 ; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8
182 ; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 16, 8
183 ; GCN-DAG: v_and_b32_e32 v{{[0-9]+}}, 0xff,
185 ; EG: LDS_READ_RET
186 define amdgpu_kernel void @local_zextload_v3i8_to_v3i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
187 entry:
188   %ld = load <3 x i8>, ptr addrspace(3) %in
189   %ext = zext <3 x i8> %ld to <3 x i32>
190   store <3 x i32> %ext, ptr addrspace(3) %out
191   ret void
194 ; FUNC-LABEL: {{^}}local_sextload_v3i8_to_v3i32:
195 ; GCN-NOT: s_wqm_b64
196 ; GFX9-NOT: m0
197 ; SICIVI: s_mov_b32 m0
198 ; GCN: ds_read_b32
200 ; GCN-DAG: v_bfe_i32
201 ; GCN-DAG: v_bfe_i32
202 ; GCN-DAG: v_bfe_i32
203 ; GCN-DAG: v_bfe_i32
205 ; SI-DAG: ds_write_b64
206 ; SI-DAG: ds_write_b32
207 ; CIVI-DAG: ds_write_b96
208 ; GFX9-DAG: ds_write_b96
210 ; EG: LDS_READ_RET
211 ; EG-DAG: BFE_INT
212 ; EG-DAG: BFE_INT
213 ; EG-DAG: BFE_INT
214 define amdgpu_kernel void @local_sextload_v3i8_to_v3i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
215 entry:
216   %ld = load <3 x i8>, ptr addrspace(3) %in
217   %ext = sext <3 x i8> %ld to <3 x i32>
218   store <3 x i32> %ext, ptr addrspace(3) %out
219   ret void
222 ; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i32:
223 ; GCN-NOT: s_wqm_b64
224 ; GFX9-NOT: m0
225 ; SICIVI: s_mov_b32 m0
226 ; GCN: ds_read_b32
228 ; EG: LDS_READ_RET
229 ; EG-DAG: BFE_UINT
230 ; EG-DAG: BFE_UINT
231 ; EG-DAG: BFE_UINT
232 define amdgpu_kernel void @local_zextload_v4i8_to_v4i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
233   %load = load <4 x i8>, ptr addrspace(3) %in
234   %ext = zext <4 x i8> %load to <4 x i32>
235   store <4 x i32> %ext, ptr addrspace(3) %out
236   ret void
239 ; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i32:
240 ; GCN-NOT: s_wqm_b64
241 ; GFX9-NOT: m0
242 ; SICIVI: s_mov_b32 m0
243 ; GCN: ds_read_b32
245 ; EG-DAG: LDS_READ_RET
246 ; EG-DAG: BFE_INT
247 ; EG-DAG: BFE_INT
248 ; EG-DAG: BFE_INT
249 ; EG-DAG: BFE_INT
250 define amdgpu_kernel void @local_sextload_v4i8_to_v4i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
251   %load = load <4 x i8>, ptr addrspace(3) %in
252   %ext = sext <4 x i8> %load to <4 x i32>
253   store <4 x i32> %ext, ptr addrspace(3) %out
254   ret void
257 ; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i32:
258 ; SICIVI: s_mov_b32 m0
259 ; GFX9-NOT: m0
261 ; EG-DAG: LDS_READ_RET
262 ; EG-DAG: LDS_READ_RET
263 ; EG-DAG: BFE_UINT
264 ; EG-DAG: BFE_UINT
265 ; EG-DAG: BFE_UINT
266 ; EG-DAG: BFE_UINT
267 ; EG-DAG: BFE_UINT
268 ; EG-DAG: BFE_UINT
269 define amdgpu_kernel void @local_zextload_v8i8_to_v8i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
270   %load = load <8 x i8>, ptr addrspace(3) %in
271   %ext = zext <8 x i8> %load to <8 x i32>
272   store <8 x i32> %ext, ptr addrspace(3) %out
273   ret void
276 ; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i32:
277 ; SICIVI: s_mov_b32 m0
278 ; GFX9-NOT: m0
280 ; EG-DAG: LDS_READ_RET
281 ; EG-DAG: LDS_READ_RET
282 ; EG-DAG: BFE_INT
283 ; EG-DAG: BFE_INT
284 ; EG-DAG: BFE_INT
285 ; EG-DAG: BFE_INT
286 ; EG-DAG: BFE_INT
287 ; EG-DAG: BFE_INT
288 ; EG-DAG: BFE_INT
289 ; EG-DAG: BFE_INT
290 define amdgpu_kernel void @local_sextload_v8i8_to_v8i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
291   %load = load <8 x i8>, ptr addrspace(3) %in
292   %ext = sext <8 x i8> %load to <8 x i32>
293   store <8 x i32> %ext, ptr addrspace(3) %out
294   ret void
297 ; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i32:
298 ; SICIVI: s_mov_b32 m0
299 ; GFX9-NOT: m0
301 ; EG-DAG: LDS_READ_RET
302 ; EG-DAG: LDS_READ_RET
303 ; EG-DAG: LDS_READ_RET
304 ; EG-DAG: LDS_READ_RET
305 ; EG-DAG: BFE_UINT
306 ; EG-DAG: BFE_UINT
307 ; EG-DAG: BFE_UINT
308 ; EG-DAG: BFE_UINT
309 ; EG-DAG: BFE_UINT
310 ; EG-DAG: BFE_UINT
311 ; EG-DAG: BFE_UINT
312 ; EG-DAG: BFE_UINT
313 ; EG-DAG: BFE_UINT
314 ; EG-DAG: BFE_UINT
315 ; EG-DAG: BFE_UINT
316 ; EG-DAG: BFE_UINT
317 define amdgpu_kernel void @local_zextload_v16i8_to_v16i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
318   %load = load <16 x i8>, ptr addrspace(3) %in
319   %ext = zext <16 x i8> %load to <16 x i32>
320   store <16 x i32> %ext, ptr addrspace(3) %out
321   ret void
324 ; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i32:
325 ; SICIVI: s_mov_b32 m0
326 ; GFX9-NOT: m0
328 ; EG-DAG: LDS_READ_RET
329 ; EG-DAG: LDS_READ_RET
330 ; EG-DAG: LDS_READ_RET
331 ; EG-DAG: LDS_READ_RET
332 ; EG-DAG: BFE_INT
333 ; EG-DAG: BFE_INT
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 ; EG-DAG: BFE_INT
343 ; EG-DAG: BFE_INT
344 ; EG-DAG: BFE_INT
345 ; EG-DAG: BFE_INT
346 ; EG-DAG: BFE_INT
347 ; EG-DAG: BFE_INT
348 define amdgpu_kernel void @local_sextload_v16i8_to_v16i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
349   %load = load <16 x i8>, ptr addrspace(3) %in
350   %ext = sext <16 x i8> %load to <16 x i32>
351   store <16 x i32> %ext, ptr addrspace(3) %out
352   ret void
355 ; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i32:
356 ; SICIVI: s_mov_b32 m0
357 ; GFX9-NOT: m0
359 ; EG-DAG: LDS_READ_RET
360 ; EG-DAG: LDS_READ_RET
361 ; EG-DAG: LDS_READ_RET
362 ; EG-DAG: LDS_READ_RET
363 ; EG-DAG: LDS_READ_RET
364 ; EG-DAG: LDS_READ_RET
365 ; EG-DAG: LDS_READ_RET
366 ; EG-DAG: LDS_READ_RET
367 define amdgpu_kernel void @local_zextload_v32i8_to_v32i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
368   %load = load <32 x i8>, ptr addrspace(3) %in
369   %ext = zext <32 x i8> %load to <32 x i32>
370   store <32 x i32> %ext, ptr addrspace(3) %out
371   ret void
374 ; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i32:
375 ; SICIVI: s_mov_b32 m0
376 ; GFX9-NOT: m0
378 ; EG-DAG: LDS_READ_RET
379 ; EG-DAG: LDS_READ_RET
380 ; EG-DAG: LDS_READ_RET
381 ; EG-DAG: LDS_READ_RET
382 ; EG-DAG: LDS_READ_RET
383 ; EG-DAG: LDS_READ_RET
384 ; EG-DAG: LDS_READ_RET
385 ; EG-DAG: LDS_READ_RET
386 define amdgpu_kernel void @local_sextload_v32i8_to_v32i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
387   %load = load <32 x i8>, ptr addrspace(3) %in
388   %ext = sext <32 x i8> %load to <32 x i32>
389   store <32 x i32> %ext, ptr addrspace(3) %out
390   ret void
393 ; FUNC-LABEL: {{^}}local_zextload_v64i8_to_v64i32:
394 ; SICIVI: s_mov_b32 m0
395 ; GFX9-NOT: m0
397 ; EG-DAG: LDS_READ_RET
398 ; EG-DAG: LDS_READ_RET
399 ; EG-DAG: LDS_READ_RET
400 ; EG-DAG: LDS_READ_RET
401 ; EG-DAG: LDS_READ_RET
402 ; EG-DAG: LDS_READ_RET
403 ; EG-DAG: LDS_READ_RET
404 ; EG-DAG: LDS_READ_RET
405 ; EG-DAG: LDS_READ_RET
406 ; EG-DAG: LDS_READ_RET
407 ; EG-DAG: LDS_READ_RET
408 ; EG-DAG: LDS_READ_RET
409 ; EG-DAG: LDS_READ_RET
410 ; EG-DAG: LDS_READ_RET
411 ; EG-DAG: LDS_READ_RET
412 ; EG-DAG: LDS_READ_RET
413 define amdgpu_kernel void @local_zextload_v64i8_to_v64i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
414   %load = load <64 x i8>, ptr addrspace(3) %in
415   %ext = zext <64 x i8> %load to <64 x i32>
416   store <64 x i32> %ext, ptr addrspace(3) %out
417   ret void
420 ; FUNC-LABEL: {{^}}local_sextload_v64i8_to_v64i32:
421 ; SICIVI: s_mov_b32 m0
422 ; GFX9-NOT: m0
424 ; EG-DAG: LDS_READ_RET
425 ; EG-DAG: LDS_READ_RET
426 ; EG-DAG: LDS_READ_RET
427 ; EG-DAG: LDS_READ_RET
428 ; EG-DAG: LDS_READ_RET
429 ; EG-DAG: LDS_READ_RET
430 ; EG-DAG: LDS_READ_RET
431 ; EG-DAG: LDS_READ_RET
432 ; EG-DAG: LDS_READ_RET
433 ; EG-DAG: LDS_READ_RET
434 ; EG-DAG: LDS_READ_RET
435 ; EG-DAG: LDS_READ_RET
436 ; EG-DAG: LDS_READ_RET
437 ; EG-DAG: LDS_READ_RET
438 ; EG-DAG: LDS_READ_RET
439 ; EG-DAG: LDS_READ_RET
440 define amdgpu_kernel void @local_sextload_v64i8_to_v64i32(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
441   %load = load <64 x i8>, ptr addrspace(3) %in
442   %ext = sext <64 x i8> %load to <64 x i32>
443   store <64 x i32> %ext, ptr addrspace(3) %out
444   ret void
447 ; FUNC-LABEL: {{^}}local_zextload_i8_to_i64:
448 ; SICIVI: s_mov_b32 m0
449 ; GFX9-NOT: m0
451 ; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
452 ; GCN-DAG: ds_read_u8 v[[LO:[0-9]+]],
453 ; GCN: ds_write_b64 v{{[0-9]+}}, v[[[LO]]:[[HI]]]
455 ; EG: LDS_UBYTE_READ_RET
456 ; EG: MOV {{.*}}, literal
457 ; EG: 0.0
458 define amdgpu_kernel void @local_zextload_i8_to_i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
459   %a = load i8, ptr addrspace(3) %in
460   %ext = zext i8 %a to i64
461   store i64 %ext, ptr addrspace(3) %out
462   ret void
465 ; FUNC-LABEL: {{^}}local_sextload_i8_to_i64:
466 ; SICIVI: s_mov_b32 m0
467 ; GFX9-NOT: m0
469 ; GCN: ds_read_i8 v[[LO:[0-9]+]],
470 ; GCN: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]]
472 ; GCN: ds_write_b64 v{{[0-9]+}}, v[[[LO]]:[[HI]]]
474 ; EG: LDS_UBYTE_READ_RET
475 ; EG: ASHR
476 ; TODO: why not 7?
477 ; EG: 31
478 define amdgpu_kernel void @local_sextload_i8_to_i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
479   %a = load i8, ptr addrspace(3) %in
480   %ext = sext i8 %a to i64
481   store i64 %ext, ptr addrspace(3) %out
482   ret void
485 ; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i64:
486 ; SICIVI: s_mov_b32 m0
487 ; GFX9-NOT: m0
489 ; EG: LDS_UBYTE_READ_RET
490 ; EG: MOV {{.*}}, literal
491 ; TODO: merge?
492 ; EG: 0.0
493 define amdgpu_kernel void @local_zextload_v1i8_to_v1i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
494   %load = load <1 x i8>, ptr addrspace(3) %in
495   %ext = zext <1 x i8> %load to <1 x i64>
496   store <1 x i64> %ext, ptr addrspace(3) %out
497   ret void
500 ; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i64:
501 ; SICIVI: s_mov_b32 m0
502 ; GFX9-NOT: m0
504 ; EG: LDS_UBYTE_READ_RET
505 ; EG: ASHR
506 ; TODO: why not 7?
507 ; EG: 31
508 define amdgpu_kernel void @local_sextload_v1i8_to_v1i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
509   %load = load <1 x i8>, ptr addrspace(3) %in
510   %ext = sext <1 x i8> %load to <1 x i64>
511   store <1 x i64> %ext, ptr addrspace(3) %out
512   ret void
515 ; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i64:
516 ; SICIVI: s_mov_b32 m0
517 ; GFX9-NOT: m0
519 ; EG: LDS_USHORT_READ_RET
520 define amdgpu_kernel void @local_zextload_v2i8_to_v2i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
521   %load = load <2 x i8>, ptr addrspace(3) %in
522   %ext = zext <2 x i8> %load to <2 x i64>
523   store <2 x i64> %ext, ptr addrspace(3) %out
524   ret void
527 ; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i64:
528 ; SICIVI: s_mov_b32 m0
529 ; GFX9-NOT: m0
531 ; EG: LDS_USHORT_READ_RET
532 ; EG: BFE_INT
533 ; EG: BFE_INT
534 define amdgpu_kernel void @local_sextload_v2i8_to_v2i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
535   %load = load <2 x i8>, ptr addrspace(3) %in
536   %ext = sext <2 x i8> %load to <2 x i64>
537   store <2 x i64> %ext, ptr addrspace(3) %out
538   ret void
541 ; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i64:
542 ; SICIVI: s_mov_b32 m0
543 ; GFX9-NOT: m0
545 ; EG: LDS_READ_RET
546 define amdgpu_kernel void @local_zextload_v4i8_to_v4i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
547   %load = load <4 x i8>, ptr addrspace(3) %in
548   %ext = zext <4 x i8> %load to <4 x i64>
549   store <4 x i64> %ext, ptr addrspace(3) %out
550   ret void
553 ; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i64:
554 ; SICIVI: s_mov_b32 m0
555 ; GFX9-NOT: m0
557 ; EG: LDS_READ_RET
558 define amdgpu_kernel void @local_sextload_v4i8_to_v4i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
559   %load = load <4 x i8>, ptr addrspace(3) %in
560   %ext = sext <4 x i8> %load to <4 x i64>
561   store <4 x i64> %ext, ptr addrspace(3) %out
562   ret void
565 ; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i64:
566 ; SICIVI: s_mov_b32 m0
567 ; GFX9-NOT: m0
569 ; EG: LDS_READ_RET
570 ; EG: LDS_READ_RET
571 define amdgpu_kernel void @local_zextload_v8i8_to_v8i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
572   %load = load <8 x i8>, ptr addrspace(3) %in
573   %ext = zext <8 x i8> %load to <8 x i64>
574   store <8 x i64> %ext, ptr addrspace(3) %out
575   ret void
578 ; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i64:
579 ; SICIVI: s_mov_b32 m0
580 ; GFX9-NOT: m0
582 ; EG: LDS_READ_RET
583 ; EG: LDS_READ_RET
584 ; EG-DAG: ASHR
585 ; EG-DAG: ASHR
586 ; EG-DAG: BFE_INT
587 ; EG-DAG: BFE_INT
588 ; EG-DAG: BFE_INT
589 ; EG-DAG: BFE_INT
590 ; EG-DAG: BFE_INT
591 ; EG-DAG: BFE_INT
592 ; EG-DAG: BFE_INT
593 define amdgpu_kernel void @local_sextload_v8i8_to_v8i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
594   %load = load <8 x i8>, ptr addrspace(3) %in
595   %ext = sext <8 x i8> %load to <8 x i64>
596   store <8 x i64> %ext, ptr addrspace(3) %out
597   ret void
600 ; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i64:
601 ; SICIVI: s_mov_b32 m0
602 ; GFX9-NOT: m0
604 ; EG: LDS_READ_RET
605 ; EG: LDS_READ_RET
606 ; EG: LDS_READ_RET
607 ; EG: LDS_READ_RET
608 define amdgpu_kernel void @local_zextload_v16i8_to_v16i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
609   %load = load <16 x i8>, ptr addrspace(3) %in
610   %ext = zext <16 x i8> %load to <16 x i64>
611   store <16 x i64> %ext, ptr addrspace(3) %out
612   ret void
615 ; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i64:
616 ; SICIVI: s_mov_b32 m0
617 ; GFX9-NOT: m0
619 ; EG: LDS_READ_RET
620 ; EG: LDS_READ_RET
621 ; EG: LDS_READ_RET
622 ; EG: LDS_READ_RET
623 define amdgpu_kernel void @local_sextload_v16i8_to_v16i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
624   %load = load <16 x i8>, ptr addrspace(3) %in
625   %ext = sext <16 x i8> %load to <16 x i64>
626   store <16 x i64> %ext, ptr addrspace(3) %out
627   ret void
630 ; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i64:
631 ; SICIVI: s_mov_b32 m0
632 ; GFX9-NOT: m0
634 ; EG: LDS_READ_RET
635 ; EG: LDS_READ_RET
636 ; EG: LDS_READ_RET
637 ; EG: LDS_READ_RET
638 ; EG: LDS_READ_RET
639 ; EG: LDS_READ_RET
640 ; EG: LDS_READ_RET
641 ; EG: LDS_READ_RET
642 define amdgpu_kernel void @local_zextload_v32i8_to_v32i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
643   %load = load <32 x i8>, ptr addrspace(3) %in
644   %ext = zext <32 x i8> %load to <32 x i64>
645   store <32 x i64> %ext, ptr addrspace(3) %out
646   ret void
649 ; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i64:
650 ; SICIVI: s_mov_b32 m0
651 ; GFX9-NOT: m0
653 ; EG: LDS_READ_RET
654 ; EG: LDS_READ_RET
655 ; EG: LDS_READ_RET
656 ; EG: LDS_READ_RET
657 ; EG: LDS_READ_RET
658 ; EG: LDS_READ_RET
659 ; EG: LDS_READ_RET
660 ; EG: LDS_READ_RET
661 define amdgpu_kernel void @local_sextload_v32i8_to_v32i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
662   %load = load <32 x i8>, ptr addrspace(3) %in
663   %ext = sext <32 x i8> %load to <32 x i64>
664   store <32 x i64> %ext, ptr addrspace(3) %out
665   ret void
668 ; XFUNC-LABEL: {{^}}local_zextload_v64i8_to_v64i64:
669 ; define amdgpu_kernel void @local_zextload_v64i8_to_v64i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
670 ;   %load = load <64 x i8>, ptr addrspace(3) %in
671 ;   %ext = zext <64 x i8> %load to <64 x i64>
672 ;   store <64 x i64> %ext, ptr addrspace(3) %out
673 ;   ret void
674 ; }
676 ; XFUNC-LABEL: {{^}}local_sextload_v64i8_to_v64i64:
677 ; define amdgpu_kernel void @local_sextload_v64i8_to_v64i64(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
678 ;   %load = load <64 x i8>, ptr addrspace(3) %in
679 ;   %ext = sext <64 x i8> %load to <64 x i64>
680 ;   store <64 x i64> %ext, ptr addrspace(3) %out
681 ;   ret void
682 ; }
684 ; FUNC-LABEL: {{^}}local_zextload_i8_to_i16:
685 ; SICIVI: s_mov_b32 m0
686 ; GFX9-NOT: m0
687 ; GCN: ds_read_u8 v[[VAL:[0-9]+]],
688 ; GCN: ds_write_b16 v[[VAL:[0-9]+]]
690 ; EG: LDS_UBYTE_READ_RET
691 ; EG: LDS_SHORT_WRITE
692 define amdgpu_kernel void @local_zextload_i8_to_i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
693   %a = load i8, ptr addrspace(3) %in
694   %ext = zext i8 %a to i16
695   store i16 %ext, ptr addrspace(3) %out
696   ret void
699 ; FUNC-LABEL: {{^}}local_sextload_i8_to_i16:
700 ; SICIVI: s_mov_b32 m0
701 ; GFX9-NOT: m0
702 ; GCN: ds_read_i8 v[[VAL:[0-9]+]],
703 ; GCN: ds_write_b16 v{{[0-9]+}}, v[[VAL]]
705 ; EG: LDS_UBYTE_READ_RET
706 ; EG: BFE_INT
707 ; EG: LDS_SHORT_WRITE
708 define amdgpu_kernel void @local_sextload_i8_to_i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
709   %a = load i8, ptr addrspace(3) %in
710   %ext = sext i8 %a to i16
711   store i16 %ext, ptr addrspace(3) %out
712   ret void
715 ; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i16:
716 ; SICIVI: s_mov_b32 m0
717 ; GFX9-NOT: m0
719 ; EG: LDS_UBYTE_READ_RET
720 ; EG: LDS_SHORT_WRITE
721 define amdgpu_kernel void @local_zextload_v1i8_to_v1i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
722   %load = load <1 x i8>, ptr addrspace(3) %in
723   %ext = zext <1 x i8> %load to <1 x i16>
724   store <1 x i16> %ext, ptr addrspace(3) %out
725   ret void
728 ; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i16:
729 ; SICIVI: s_mov_b32 m0
730 ; GFX9-NOT: m0
732 ; EG: LDS_UBYTE_READ_RET
733 ; EG: BFE_INT
734 ; EG: LDS_SHORT_WRITE
735 define amdgpu_kernel void @local_sextload_v1i8_to_v1i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
736   %load = load <1 x i8>, ptr addrspace(3) %in
737   %ext = sext <1 x i8> %load to <1 x i16>
738   store <1 x i16> %ext, ptr addrspace(3) %out
739   ret void
742 ; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i16:
743 ; SICIVI: s_mov_b32 m0
744 ; GFX9-NOT: m0
746 ; EG: LDS_USHORT_READ_RET
747 ; EG: LDS_WRITE
748 define amdgpu_kernel void @local_zextload_v2i8_to_v2i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
749   %load = load <2 x i8>, ptr addrspace(3) %in
750   %ext = zext <2 x i8> %load to <2 x i16>
751   store <2 x i16> %ext, ptr addrspace(3) %out
752   ret void
755 ; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i16:
756 ; SICIVI: s_mov_b32 m0
757 ; GFX9-NOT: m0
759 ; EG: LDS_USHORT_READ_RET
760 ; EG: BFE_INT
761 ; EG: BFE_INT
762 ; EG: LDS_WRITE
763 define amdgpu_kernel void @local_sextload_v2i8_to_v2i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
764   %load = load <2 x i8>, ptr addrspace(3) %in
765   %ext = sext <2 x i8> %load to <2 x i16>
766   store <2 x i16> %ext, ptr addrspace(3) %out
767   ret void
770 ; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i16:
771 ; SICIVI: s_mov_b32 m0
772 ; GFX9-NOT: m0
774 ; EG: LDS_READ_RET
775 ; EG: LDS_WRITE
776 ; EG: LDS_WRITE
777 define amdgpu_kernel void @local_zextload_v4i8_to_v4i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
778   %load = load <4 x i8>, ptr addrspace(3) %in
779   %ext = zext <4 x i8> %load to <4 x i16>
780   store <4 x i16> %ext, ptr addrspace(3) %out
781   ret void
784 ; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i16:
785 ; SICIVI: s_mov_b32 m0
786 ; GFX9-NOT: m0
788 ; EG: LDS_READ_RET
789 ; TODO: these do LSHR + BFE_INT, instead of just BFE_INT/ASHR
790 ; EG-DAG: BFE_INT
791 ; EG-DAG: BFE_INT
792 ; EG-DAG: BFE_INT
793 ; EG-DAG: BFE_INT
794 ; EG: LDS_WRITE
795 ; EG: LDS_WRITE
796 define amdgpu_kernel void @local_sextload_v4i8_to_v4i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
797   %load = load <4 x i8>, ptr addrspace(3) %in
798   %ext = sext <4 x i8> %load to <4 x i16>
799   store <4 x i16> %ext, ptr addrspace(3) %out
800   ret void
803 ; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i16:
804 ; SICIVI: s_mov_b32 m0
805 ; GFX9-NOT: m0
807 ; EG: LDS_READ_RET
808 ; EG: LDS_READ_RET
809 ; EG: LDS_WRITE
810 ; EG: LDS_WRITE
811 ; EG: LDS_WRITE
812 ; EG: LDS_WRITE
813 define amdgpu_kernel void @local_zextload_v8i8_to_v8i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
814   %load = load <8 x i8>, ptr addrspace(3) %in
815   %ext = zext <8 x i8> %load to <8 x i16>
816   store <8 x i16> %ext, ptr addrspace(3) %out
817   ret void
820 ; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i16:
821 ; SICIVI: s_mov_b32 m0
822 ; GFX9-NOT: m0
824 ; EG: LDS_READ_RET
825 ; EG: LDS_READ_RET
826 ; TODO: these do LSHR + BFE_INT, instead of just BFE_INT/ASHR
827 ; EG-DAG: BFE_INT
828 ; EG-DAG: BFE_INT
829 ; EG-DAG: BFE_INT
830 ; EG-DAG: BFE_INT
831 ; EG-DAG: BFE_INT
832 ; EG-DAG: BFE_INT
833 ; EG-DAG: BFE_INT
834 ; EG-DAG: BFE_INT
835 ; EG: LDS_WRITE
836 ; EG: LDS_WRITE
837 ; EG: LDS_WRITE
838 ; EG: LDS_WRITE
839 define amdgpu_kernel void @local_sextload_v8i8_to_v8i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
840   %load = load <8 x i8>, ptr addrspace(3) %in
841   %ext = sext <8 x i8> %load to <8 x i16>
842   store <8 x i16> %ext, ptr addrspace(3) %out
843   ret void
846 ; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i16:
847 ; SICIVI: s_mov_b32 m0
848 ; GFX9-NOT: m0
850 ; EG: LDS_READ_RET
851 ; EG: LDS_READ_RET
852 ; EG: LDS_READ_RET
853 ; EG: LDS_READ_RET
854 ; EG: LDS_WRITE
855 ; EG: LDS_WRITE
856 ; EG: LDS_WRITE
857 ; EG: LDS_WRITE
858 ; EG: LDS_WRITE
859 ; EG: LDS_WRITE
860 ; EG: LDS_WRITE
861 ; EG: LDS_WRITE
862 define amdgpu_kernel void @local_zextload_v16i8_to_v16i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
863   %load = load <16 x i8>, ptr addrspace(3) %in
864   %ext = zext <16 x i8> %load to <16 x i16>
865   store <16 x i16> %ext, ptr addrspace(3) %out
866   ret void
869 ; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i16:
870 ; SICIVI: s_mov_b32 m0
871 ; GFX9-NOT: m0
873 ; EG: LDS_READ_RET
874 ; EG: LDS_READ_RET
875 ; EG: LDS_READ_RET
876 ; EG: LDS_READ_RET
877 ; TODO: these do LSHR + BFE_INT, instead of just BFE_INT/ASHR
878 ; EG-DAG: BFE_INT
879 ; EG-DAG: BFE_INT
880 ; EG-DAG: BFE_INT
881 ; EG-DAG: BFE_INT
882 ; EG-DAG: BFE_INT
883 ; EG-DAG: BFE_INT
884 ; EG-DAG: BFE_INT
885 ; EG-DAG: BFE_INT
886 ; EG-DAG: BFE_INT
887 ; EG-DAG: BFE_INT
888 ; EG-DAG: BFE_INT
889 ; EG-DAG: BFE_INT
890 ; EG-DAG: BFE_INT
891 ; EG-DAG: BFE_INT
892 ; EG-DAG: BFE_INT
893 ; EG-DAG: BFE_INT
894 ; EG: LDS_WRITE
895 ; EG: LDS_WRITE
896 ; EG: LDS_WRITE
897 ; EG: LDS_WRITE
898 ; EG: LDS_WRITE
899 ; EG: LDS_WRITE
900 ; EG: LDS_WRITE
901 ; EG: LDS_WRITE
902 define amdgpu_kernel void @local_sextload_v16i8_to_v16i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
903   %load = load <16 x i8>, ptr addrspace(3) %in
904   %ext = sext <16 x i8> %load to <16 x i16>
905   store <16 x i16> %ext, ptr addrspace(3) %out
906   ret void
909 ; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i16:
910 ; SICIVI: s_mov_b32 m0
911 ; GFX9-NOT: m0
913 ; EG: LDS_READ_RET
914 ; EG: LDS_READ_RET
915 ; EG: LDS_READ_RET
916 ; EG: LDS_READ_RET
917 ; EG: LDS_READ_RET
918 ; EG: LDS_READ_RET
919 ; EG: LDS_READ_RET
920 ; EG: LDS_READ_RET
921 ; EG: LDS_WRITE
922 ; EG: LDS_WRITE
923 ; EG: LDS_WRITE
924 ; EG: LDS_WRITE
925 ; EG: LDS_WRITE
926 ; EG: LDS_WRITE
927 ; EG: LDS_WRITE
928 ; EG: LDS_WRITE
929 ; EG: LDS_WRITE
930 ; EG: LDS_WRITE
931 ; EG: LDS_WRITE
932 ; EG: LDS_WRITE
933 ; EG: LDS_WRITE
934 ; EG: LDS_WRITE
935 ; EG: LDS_WRITE
936 ; EG: LDS_WRITE
937 define amdgpu_kernel void @local_zextload_v32i8_to_v32i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
938   %load = load <32 x i8>, ptr addrspace(3) %in
939   %ext = zext <32 x i8> %load to <32 x i16>
940   store <32 x i16> %ext, ptr addrspace(3) %out
941   ret void
944 ; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i16:
945 ; SICIVI: s_mov_b32 m0
946 ; GFX9-NOT: m0
948 ; EG: LDS_READ_RET
949 ; EG: LDS_READ_RET
950 ; EG: LDS_READ_RET
951 ; EG: LDS_READ_RET
952 ; EG: LDS_READ_RET
953 ; EG: LDS_READ_RET
954 ; EG: LDS_READ_RET
955 ; EG: LDS_READ_RET
956 ; TODO: these do LSHR + BFE_INT, instead of just BFE_INT/ASHR
957 ; EG-DAG: BFE_INT
958 ; EG-DAG: BFE_INT
959 ; EG-DAG: BFE_INT
960 ; EG-DAG: BFE_INT
961 ; EG-DAG: BFE_INT
962 ; EG-DAG: BFE_INT
963 ; EG-DAG: BFE_INT
964 ; EG-DAG: BFE_INT
965 ; EG-DAG: BFE_INT
966 ; EG-DAG: BFE_INT
967 ; EG-DAG: BFE_INT
968 ; EG-DAG: BFE_INT
969 ; EG-DAG: BFE_INT
970 ; EG-DAG: BFE_INT
971 ; EG-DAG: BFE_INT
972 ; EG-DAG: BFE_INT
973 ; EG-DAG: BFE_INT
974 ; EG-DAG: BFE_INT
975 ; EG-DAG: BFE_INT
976 ; EG-DAG: BFE_INT
977 ; EG-DAG: BFE_INT
978 ; EG-DAG: BFE_INT
979 ; EG-DAG: BFE_INT
980 ; EG-DAG: BFE_INT
981 ; EG-DAG: BFE_INT
982 ; EG-DAG: BFE_INT
983 ; EG-DAG: BFE_INT
984 ; EG-DAG: BFE_INT
985 ; EG: LDS_WRITE
986 ; EG: LDS_WRITE
987 ; EG: LDS_WRITE
988 ; EG: LDS_WRITE
989 ; EG: LDS_WRITE
990 ; EG: LDS_WRITE
991 ; EG: LDS_WRITE
992 ; EG: LDS_WRITE
993 ; EG: LDS_WRITE
994 ; EG: LDS_WRITE
995 ; EG: LDS_WRITE
996 ; EG: LDS_WRITE
997 ; EG: LDS_WRITE
998 ; EG: LDS_WRITE
999 ; EG: LDS_WRITE
1000 ; EG: LDS_WRITE
1001 define amdgpu_kernel void @local_sextload_v32i8_to_v32i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
1002   %load = load <32 x i8>, ptr addrspace(3) %in
1003   %ext = sext <32 x i8> %load to <32 x i16>
1004   store <32 x i16> %ext, ptr addrspace(3) %out
1005   ret void
1008 ; XFUNC-LABEL: {{^}}local_zextload_v64i8_to_v64i16:
1009 ; define amdgpu_kernel void @local_zextload_v64i8_to_v64i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
1010 ;   %load = load <64 x i8>, ptr addrspace(3) %in
1011 ;   %ext = zext <64 x i8> %load to <64 x i16>
1012 ;   store <64 x i16> %ext, ptr addrspace(3) %out
1013 ;   ret void
1014 ; }
1016 ; XFUNC-LABEL: {{^}}local_sextload_v64i8_to_v64i16:
1017 ; define amdgpu_kernel void @local_sextload_v64i8_to_v64i16(ptr addrspace(3) %out, ptr addrspace(3) %in) #0 {
1018 ;   %load = load <64 x i8>, ptr addrspace(3) %in
1019 ;   %ext = sext <64 x i8> %load to <64 x i16>
1020 ;   store <64 x i16> %ext, ptr addrspace(3) %out
1021 ;   ret void
1022 ; }
1024 ; Tests if ds_read/write_b128 gets generated for the 16 byte aligned load.
1025 ; FUNC-LABEL: {{^}}local_v16i8_to_128:
1027 ; SI-NOT: ds_read_b128
1028 ; SI-NOT: ds_write_b128
1030 ; CIVI: ds_read_b128
1031 ; CIVI: ds_write_b128
1033 ; EG: LDS_READ_RET
1034 ; EG: LDS_READ_RET
1035 ; EG: LDS_READ_RET
1036 ; EG: LDS_READ_RET
1037 define amdgpu_kernel void @local_v16i8_to_128(ptr addrspace(3) %out, ptr addrspace(3) %in) {
1038   %ld = load <16 x i8>, ptr addrspace(3) %in, align 16
1039   store <16 x i8> %ld, ptr addrspace(3) %out, align 16
1040   ret void
1043 attributes #0 = { nounwind }