blob: 6b5b1cf990643646a1a8ab2864ddd5b036f35c96 [file] [log] [blame]
Matt Arsenaultd1097a32016-06-02 19:54:26 +00001; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s
2; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s
3; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
4
5
6; FUNC-LABEL: {{^}}local_load_i8:
7; GCN-NOT: s_wqm_b64
8; GCN: s_mov_b32 m0
9; GCN: ds_read_u8
10
11; EG: LDS_UBYTE_READ_RET
12define void @local_load_i8(i8 addrspace(3)* %out, i8 addrspace(3)* %in) #0 {
13entry:
14 %ld = load i8, i8 addrspace(3)* %in
15 store i8 %ld, i8 addrspace(3)* %out
16 ret void
17}
18
19; FUNC-LABEL: {{^}}local_load_v2i8:
20; GCN-NOT: s_wqm_b64
21; GCN: s_mov_b32 m0
22; GCN: ds_read_u16
23
24; EG: LDS_USHORT_READ_RET
25define void @local_load_v2i8(<2 x i8> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 {
26entry:
27 %ld = load <2 x i8>, <2 x i8> addrspace(3)* %in
28 store <2 x i8> %ld, <2 x i8> addrspace(3)* %out
29 ret void
30}
31
32; FUNC-LABEL: {{^}}local_load_v3i8:
33; GCN: ds_read_b32
34
35; EG: DS_READ_RET
36define void @local_load_v3i8(<3 x i8> addrspace(3)* %out, <3 x i8> addrspace(3)* %in) #0 {
37entry:
38 %ld = load <3 x i8>, <3 x i8> addrspace(3)* %in
39 store <3 x i8> %ld, <3 x i8> addrspace(3)* %out
40 ret void
41}
42
43; FUNC-LABEL: {{^}}local_load_v4i8:
44; GCN: ds_read_b32
45
46; EG: LDS_READ_RET
47define void @local_load_v4i8(<4 x i8> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 {
48entry:
49 %ld = load <4 x i8>, <4 x i8> addrspace(3)* %in
50 store <4 x i8> %ld, <4 x i8> addrspace(3)* %out
51 ret void
52}
53
54; FUNC-LABEL: {{^}}local_load_v8i8:
55; GCN: ds_read_b64
56
57; EG: LDS_READ_RET
58; EG: LDS_READ_RET
59define void @local_load_v8i8(<8 x i8> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 {
60entry:
61 %ld = load <8 x i8>, <8 x i8> addrspace(3)* %in
62 store <8 x i8> %ld, <8 x i8> addrspace(3)* %out
63 ret void
64}
65
66; FUNC-LABEL: {{^}}local_load_v16i8:
Tom Stellarde175d8a2016-08-26 21:36:47 +000067; GCN: ds_read2_b64 v{{\[}}[[LO:[0-9]+]]:[[HI:[0-9]+]]{{\]}}, v{{[0-9]+}} offset1:1{{$}}
68; GCN: ds_write2_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:{{[0-9]+}}], v[{{[0-9]+}}:[[HI]]{{\]}} offset1:1{{$}}
Matt Arsenaultd1097a32016-06-02 19:54:26 +000069
70; EG: LDS_READ_RET
71; EG: LDS_READ_RET
72; EG: LDS_READ_RET
73; EG: LDS_READ_RET
74define void @local_load_v16i8(<16 x i8> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 {
75entry:
76 %ld = load <16 x i8>, <16 x i8> addrspace(3)* %in
77 store <16 x i8> %ld, <16 x i8> addrspace(3)* %out
78 ret void
79}
80
81; FUNC-LABEL: {{^}}local_zextload_i8_to_i32:
82; GCN-NOT: s_wqm_b64
83; GCN: s_mov_b32 m0
84; GCN: ds_read_u8
85
86; EG: LDS_UBYTE_READ_RET
87define void @local_zextload_i8_to_i32(i32 addrspace(3)* %out, i8 addrspace(3)* %in) #0 {
88 %a = load i8, i8 addrspace(3)* %in
89 %ext = zext i8 %a to i32
90 store i32 %ext, i32 addrspace(3)* %out
91 ret void
92}
93
94; FUNC-LABEL: {{^}}local_sextload_i8_to_i32:
95; GCN-NOT: s_wqm_b64
96; GCN: s_mov_b32 m0
97; GCN: ds_read_i8
98
99; EG: LDS_UBYTE_READ_RET
100; EG: BFE_INT
101define void @local_sextload_i8_to_i32(i32 addrspace(3)* %out, i8 addrspace(3)* %in) #0 {
102 %ld = load i8, i8 addrspace(3)* %in
103 %ext = sext i8 %ld to i32
104 store i32 %ext, i32 addrspace(3)* %out
105 ret void
106}
107
108; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000109
110; EG: LDS_UBYTE_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000111define void @local_zextload_v1i8_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 {
112 %load = load <1 x i8>, <1 x i8> addrspace(3)* %in
113 %ext = zext <1 x i8> %load to <1 x i32>
114 store <1 x i32> %ext, <1 x i32> addrspace(3)* %out
115 ret void
116}
117
118; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000119
120; EG: LDS_UBYTE_READ_RET
121; EG: BFE_INT
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000122define void @local_sextload_v1i8_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 {
123 %load = load <1 x i8>, <1 x i8> addrspace(3)* %in
124 %ext = sext <1 x i8> %load to <1 x i32>
125 store <1 x i32> %ext, <1 x i32> addrspace(3)* %out
126 ret void
127}
128
129; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i32:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000130; GCN: ds_read_u16
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000131
Jan Vesely38814fa2016-08-27 19:09:43 +0000132; EG: LDS_USHORT_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000133define void @local_zextload_v2i8_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 {
134 %load = load <2 x i8>, <2 x i8> addrspace(3)* %in
135 %ext = zext <2 x i8> %load to <2 x i32>
136 store <2 x i32> %ext, <2 x i32> addrspace(3)* %out
137 ret void
138}
139
140; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i32:
141; GCN-NOT: s_wqm_b64
142; GCN: s_mov_b32 m0
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000143; GCN: ds_read_u16
144; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8
145; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 8
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000146
Jan Vesely38814fa2016-08-27 19:09:43 +0000147; EG: LDS_USHORT_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000148; EG-DAG: BFE_INT
149; EG-DAG: BFE_INT
150define void @local_sextload_v2i8_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 {
151 %load = load <2 x i8>, <2 x i8> addrspace(3)* %in
152 %ext = sext <2 x i8> %load to <2 x i32>
153 store <2 x i32> %ext, <2 x i32> addrspace(3)* %out
154 ret void
155}
156
157; FUNC-LABEL: {{^}}local_zextload_v3i8_to_v3i32:
158; GCN: ds_read_b32
159
160; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8
161; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 16, 8
162; GCN-DAG: v_and_b32_e32 v{{[0-9]+}}, 0xff,
Jan Vesely38814fa2016-08-27 19:09:43 +0000163
164; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000165define void @local_zextload_v3i8_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i8> addrspace(3)* %in) #0 {
166entry:
167 %ld = load <3 x i8>, <3 x i8> addrspace(3)* %in
168 %ext = zext <3 x i8> %ld to <3 x i32>
169 store <3 x i32> %ext, <3 x i32> addrspace(3)* %out
170 ret void
171}
172
173; FUNC-LABEL: {{^}}local_sextload_v3i8_to_v3i32:
174; GCN-NOT: s_wqm_b64
175; GCN: s_mov_b32 m0
176; GCN: ds_read_b32
177
178; GCN-DAG: v_bfe_i32
179; GCN-DAG: v_bfe_i32
180; GCN-DAG: v_bfe_i32
181; GCN-DAG: v_bfe_i32
182
183; GCN-DAG: ds_write_b64
184; GCN-DAG: ds_write_b32
185
Jan Vesely38814fa2016-08-27 19:09:43 +0000186; EG: LDS_READ_RET
187; EG-DAG: BFE_INT
188; EG-DAG: BFE_INT
189; EG-DAG: BFE_INT
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000190define void @local_sextload_v3i8_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i8> addrspace(3)* %in) #0 {
191entry:
192 %ld = load <3 x i8>, <3 x i8> addrspace(3)* %in
193 %ext = sext <3 x i8> %ld to <3 x i32>
194 store <3 x i32> %ext, <3 x i32> addrspace(3)* %out
195 ret void
196}
197
198; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i32:
199; GCN-NOT: s_wqm_b64
200; GCN: s_mov_b32 m0
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000201; GCN: ds_read_b32
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000202
Jan Vesely38814fa2016-08-27 19:09:43 +0000203; EG: LDS_READ_RET
204; EG-DAG: BFE_UINT
205; EG-DAG: BFE_UINT
206; EG-DAG: BFE_UINT
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000207define void @local_zextload_v4i8_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 {
208 %load = load <4 x i8>, <4 x i8> addrspace(3)* %in
209 %ext = zext <4 x i8> %load to <4 x i32>
210 store <4 x i32> %ext, <4 x i32> addrspace(3)* %out
211 ret void
212}
213
214; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i32:
215; GCN-NOT: s_wqm_b64
216; GCN: s_mov_b32 m0
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000217; GCN: ds_read_b32
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000218
Jan Vesely38814fa2016-08-27 19:09:43 +0000219; EG-DAG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000220; EG-DAG: BFE_INT
221; EG-DAG: BFE_INT
222; EG-DAG: BFE_INT
223; EG-DAG: BFE_INT
224define void @local_sextload_v4i8_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 {
225 %load = load <4 x i8>, <4 x i8> addrspace(3)* %in
226 %ext = sext <4 x i8> %load to <4 x i32>
227 store <4 x i32> %ext, <4 x i32> addrspace(3)* %out
228 ret void
229}
230
231; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000232
233; EG-DAG: LDS_READ_RET
234; EG-DAG: LDS_READ_RET
235; EG-DAG: BFE_UINT
236; EG-DAG: BFE_UINT
237; EG-DAG: BFE_UINT
238; EG-DAG: BFE_UINT
239; EG-DAG: BFE_UINT
240; EG-DAG: BFE_UINT
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000241define void @local_zextload_v8i8_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 {
242 %load = load <8 x i8>, <8 x i8> addrspace(3)* %in
243 %ext = zext <8 x i8> %load to <8 x i32>
244 store <8 x i32> %ext, <8 x i32> addrspace(3)* %out
245 ret void
246}
247
248; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000249
250; EG-DAG: LDS_READ_RET
251; EG-DAG: LDS_READ_RET
252; EG-DAG: BFE_INT
253; EG-DAG: BFE_INT
254; EG-DAG: BFE_INT
255; EG-DAG: BFE_INT
256; EG-DAG: BFE_INT
257; EG-DAG: BFE_INT
258; EG-DAG: BFE_INT
259; EG-DAG: BFE_INT
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000260define void @local_sextload_v8i8_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 {
261 %load = load <8 x i8>, <8 x i8> addrspace(3)* %in
262 %ext = sext <8 x i8> %load to <8 x i32>
263 store <8 x i32> %ext, <8 x i32> addrspace(3)* %out
264 ret void
265}
266
267; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000268
269; EG-DAG: LDS_READ_RET
270; EG-DAG: LDS_READ_RET
271; EG-DAG: LDS_READ_RET
272; EG-DAG: LDS_READ_RET
273; EG-DAG: BFE_UINT
274; EG-DAG: BFE_UINT
275; EG-DAG: BFE_UINT
276; EG-DAG: BFE_UINT
277; EG-DAG: BFE_UINT
278; EG-DAG: BFE_UINT
279; EG-DAG: BFE_UINT
280; EG-DAG: BFE_UINT
281; EG-DAG: BFE_UINT
282; EG-DAG: BFE_UINT
283; EG-DAG: BFE_UINT
284; EG-DAG: BFE_UINT
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000285define void @local_zextload_v16i8_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 {
286 %load = load <16 x i8>, <16 x i8> addrspace(3)* %in
287 %ext = zext <16 x i8> %load to <16 x i32>
288 store <16 x i32> %ext, <16 x i32> addrspace(3)* %out
289 ret void
290}
291
292; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000293
294; EG-DAG: LDS_READ_RET
295; EG-DAG: LDS_READ_RET
296; EG-DAG: LDS_READ_RET
297; EG-DAG: LDS_READ_RET
298; EG-DAG: BFE_INT
299; EG-DAG: BFE_INT
300; EG-DAG: BFE_INT
301; EG-DAG: BFE_INT
302; EG-DAG: BFE_INT
303; EG-DAG: BFE_INT
304; EG-DAG: BFE_INT
305; EG-DAG: BFE_INT
306; EG-DAG: BFE_INT
307; EG-DAG: BFE_INT
308; EG-DAG: BFE_INT
309; EG-DAG: BFE_INT
310; EG-DAG: BFE_INT
311; EG-DAG: BFE_INT
312; EG-DAG: BFE_INT
313; EG-DAG: BFE_INT
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000314define void @local_sextload_v16i8_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 {
315 %load = load <16 x i8>, <16 x i8> addrspace(3)* %in
316 %ext = sext <16 x i8> %load to <16 x i32>
317 store <16 x i32> %ext, <16 x i32> addrspace(3)* %out
318 ret void
319}
320
321; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000322
323; EG-DAG: LDS_READ_RET
324; EG-DAG: LDS_READ_RET
325; EG-DAG: LDS_READ_RET
326; EG-DAG: LDS_READ_RET
327; EG-DAG: LDS_READ_RET
328; EG-DAG: LDS_READ_RET
329; EG-DAG: LDS_READ_RET
330; EG-DAG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000331define void @local_zextload_v32i8_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 {
332 %load = load <32 x i8>, <32 x i8> addrspace(3)* %in
333 %ext = zext <32 x i8> %load to <32 x i32>
334 store <32 x i32> %ext, <32 x i32> addrspace(3)* %out
335 ret void
336}
337
338; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000339
340; EG-DAG: LDS_READ_RET
341; EG-DAG: LDS_READ_RET
342; EG-DAG: LDS_READ_RET
343; EG-DAG: LDS_READ_RET
344; EG-DAG: LDS_READ_RET
345; EG-DAG: LDS_READ_RET
346; EG-DAG: LDS_READ_RET
347; EG-DAG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000348define void @local_sextload_v32i8_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 {
349 %load = load <32 x i8>, <32 x i8> addrspace(3)* %in
350 %ext = sext <32 x i8> %load to <32 x i32>
351 store <32 x i32> %ext, <32 x i32> addrspace(3)* %out
352 ret void
353}
354
355; FUNC-LABEL: {{^}}local_zextload_v64i8_to_v64i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000356
357; EG-DAG: LDS_READ_RET
358; EG-DAG: LDS_READ_RET
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; EG-DAG: LDS_READ_RET
368; EG-DAG: LDS_READ_RET
369; EG-DAG: LDS_READ_RET
370; EG-DAG: LDS_READ_RET
371; EG-DAG: LDS_READ_RET
372; EG-DAG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000373define void @local_zextload_v64i8_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 {
374 %load = load <64 x i8>, <64 x i8> addrspace(3)* %in
375 %ext = zext <64 x i8> %load to <64 x i32>
376 store <64 x i32> %ext, <64 x i32> addrspace(3)* %out
377 ret void
378}
379
380; FUNC-LABEL: {{^}}local_sextload_v64i8_to_v64i32:
Jan Vesely38814fa2016-08-27 19:09:43 +0000381
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; EG-DAG: LDS_READ_RET
387; EG-DAG: LDS_READ_RET
388; EG-DAG: LDS_READ_RET
389; EG-DAG: LDS_READ_RET
390; EG-DAG: LDS_READ_RET
391; EG-DAG: LDS_READ_RET
392; EG-DAG: LDS_READ_RET
393; EG-DAG: LDS_READ_RET
394; EG-DAG: LDS_READ_RET
395; EG-DAG: LDS_READ_RET
396; EG-DAG: LDS_READ_RET
397; EG-DAG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000398define void @local_sextload_v64i8_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 {
399 %load = load <64 x i8>, <64 x i8> addrspace(3)* %in
400 %ext = sext <64 x i8> %load to <64 x i32>
401 store <64 x i32> %ext, <64 x i32> addrspace(3)* %out
402 ret void
403}
404
405; FUNC-LABEL: {{^}}local_zextload_i8_to_i64:
406; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
407; GCN-DAG: ds_read_u8 v[[LO:[0-9]+]],
408; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]]
Jan Vesely38814fa2016-08-27 19:09:43 +0000409
410; EG: LDS_UBYTE_READ_RET
411; EG: MOV {{.*}}, literal
412; EG: 0.0
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000413define void @local_zextload_i8_to_i64(i64 addrspace(3)* %out, i8 addrspace(3)* %in) #0 {
414 %a = load i8, i8 addrspace(3)* %in
415 %ext = zext i8 %a to i64
416 store i64 %ext, i64 addrspace(3)* %out
417 ret void
418}
419
420; FUNC-LABEL: {{^}}local_sextload_i8_to_i64:
421; GCN: ds_read_i8 v[[LO:[0-9]+]],
422; GCN: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]]
423
424; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]{{\]}}
Jan Vesely38814fa2016-08-27 19:09:43 +0000425
426; EG: LDS_UBYTE_READ_RET
427; EG: ASHR
428; TODO: why not 7?
429; EG: 31
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000430define void @local_sextload_i8_to_i64(i64 addrspace(3)* %out, i8 addrspace(3)* %in) #0 {
431 %a = load i8, i8 addrspace(3)* %in
432 %ext = sext i8 %a to i64
433 store i64 %ext, i64 addrspace(3)* %out
434 ret void
435}
436
437; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000438
439; EG: LDS_UBYTE_READ_RET
440; EG: MOV {{.*}}, literal
441; TODO: merge?
442; EG: 0.0
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000443define void @local_zextload_v1i8_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 {
444 %load = load <1 x i8>, <1 x i8> addrspace(3)* %in
445 %ext = zext <1 x i8> %load to <1 x i64>
446 store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
447 ret void
448}
449
450; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000451
452; EG: LDS_UBYTE_READ_RET
453; EG: ASHR
454; TODO: why not 7?
455; EG: 31
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000456define void @local_sextload_v1i8_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 {
457 %load = load <1 x i8>, <1 x i8> addrspace(3)* %in
458 %ext = sext <1 x i8> %load to <1 x i64>
459 store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
460 ret void
461}
462
463; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000464
465; EG: LDS_USHORT_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000466define void @local_zextload_v2i8_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 {
467 %load = load <2 x i8>, <2 x i8> addrspace(3)* %in
468 %ext = zext <2 x i8> %load to <2 x i64>
469 store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
470 ret void
471}
472
473; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000474
475; EG: LDS_USHORT_READ_RET
476; EG: BFE_INT
477; EG: BFE_INT
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000478define void @local_sextload_v2i8_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 {
479 %load = load <2 x i8>, <2 x i8> addrspace(3)* %in
480 %ext = sext <2 x i8> %load to <2 x i64>
481 store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
482 ret void
483}
484
485; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000486
487; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000488define void @local_zextload_v4i8_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 {
489 %load = load <4 x i8>, <4 x i8> addrspace(3)* %in
490 %ext = zext <4 x i8> %load to <4 x i64>
491 store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
492 ret void
493}
494
495; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000496
497; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000498define void @local_sextload_v4i8_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 {
499 %load = load <4 x i8>, <4 x i8> addrspace(3)* %in
500 %ext = sext <4 x i8> %load to <4 x i64>
501 store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
502 ret void
503}
504
505; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000506
507; EG: LDS_READ_RET
508; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000509define void @local_zextload_v8i8_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 {
510 %load = load <8 x i8>, <8 x i8> addrspace(3)* %in
511 %ext = zext <8 x i8> %load to <8 x i64>
512 store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
513 ret void
514}
515
516; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000517
518; EG: LDS_READ_RET
519; EG: LDS_READ_RET
520; EG-DAG: ASHR
521; EG-DAG: ASHR
522; EG-DAG: BFE_INT
523; EG-DAG: BFE_INT
524; EG-DAG: BFE_INT
525; EG-DAG: BFE_INT
526; EG-DAG: BFE_INT
527; EG-DAG: BFE_INT
528; EG-DAG: BFE_INT
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000529define void @local_sextload_v8i8_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 {
530 %load = load <8 x i8>, <8 x i8> addrspace(3)* %in
531 %ext = sext <8 x i8> %load to <8 x i64>
532 store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
533 ret void
534}
535
536; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000537
538; EG: LDS_READ_RET
539; EG: LDS_READ_RET
540; EG: LDS_READ_RET
541; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000542define void @local_zextload_v16i8_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 {
543 %load = load <16 x i8>, <16 x i8> addrspace(3)* %in
544 %ext = zext <16 x i8> %load to <16 x i64>
545 store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
546 ret void
547}
548
549; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000550
551; EG: LDS_READ_RET
552; EG: LDS_READ_RET
553; EG: LDS_READ_RET
554; EG: LDS_READ_RET
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000555define void @local_sextload_v16i8_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 {
556 %load = load <16 x i8>, <16 x i8> addrspace(3)* %in
557 %ext = sext <16 x i8> %load to <16 x i64>
558 store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
559 ret void
560}
561
562; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000563
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
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000572define void @local_zextload_v32i8_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 {
573 %load = load <32 x i8>, <32 x i8> addrspace(3)* %in
574 %ext = zext <32 x i8> %load to <32 x i64>
575 store <32 x i64> %ext, <32 x i64> addrspace(3)* %out
576 ret void
577}
578
579; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i64:
Jan Vesely38814fa2016-08-27 19:09:43 +0000580
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
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000589define void @local_sextload_v32i8_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 {
590 %load = load <32 x i8>, <32 x i8> addrspace(3)* %in
591 %ext = sext <32 x i8> %load to <32 x i64>
592 store <32 x i64> %ext, <32 x i64> addrspace(3)* %out
593 ret void
594}
595
596; XFUNC-LABEL: {{^}}local_zextload_v64i8_to_v64i64:
597; define void @local_zextload_v64i8_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 {
598; %load = load <64 x i8>, <64 x i8> addrspace(3)* %in
599; %ext = zext <64 x i8> %load to <64 x i64>
600; store <64 x i64> %ext, <64 x i64> addrspace(3)* %out
601; ret void
602; }
603
604; XFUNC-LABEL: {{^}}local_sextload_v64i8_to_v64i64:
605; define void @local_sextload_v64i8_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 {
606; %load = load <64 x i8>, <64 x i8> addrspace(3)* %in
607; %ext = sext <64 x i8> %load to <64 x i64>
608; store <64 x i64> %ext, <64 x i64> addrspace(3)* %out
609; ret void
610; }
611
612; FUNC-LABEL: {{^}}local_zextload_i8_to_i16:
613; GCN: ds_read_u8 v[[VAL:[0-9]+]],
614; GCN: ds_write_b16 v[[VAL:[0-9]+]]
Jan Vesely38814fa2016-08-27 19:09:43 +0000615
616; EG: LDS_UBYTE_READ_RET
617; EG: LDS_SHORT_WRITE
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000618define void @local_zextload_i8_to_i16(i16 addrspace(3)* %out, i8 addrspace(3)* %in) #0 {
619 %a = load i8, i8 addrspace(3)* %in
620 %ext = zext i8 %a to i16
621 store i16 %ext, i16 addrspace(3)* %out
622 ret void
623}
624
625; FUNC-LABEL: {{^}}local_sextload_i8_to_i16:
626; GCN: ds_read_i8 v[[VAL:[0-9]+]],
627; GCN: ds_write_b16 v{{[0-9]+}}, v[[VAL]]
Jan Vesely38814fa2016-08-27 19:09:43 +0000628
629; EG: LDS_UBYTE_READ_RET
630; EG: BFE_INT
631; EG: LDS_SHORT_WRITE
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000632define void @local_sextload_i8_to_i16(i16 addrspace(3)* %out, i8 addrspace(3)* %in) #0 {
633 %a = load i8, i8 addrspace(3)* %in
634 %ext = sext i8 %a to i16
635 store i16 %ext, i16 addrspace(3)* %out
636 ret void
637}
638
639; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000640
641; EG: LDS_UBYTE_READ_RET
642; EG: LDS_SHORT_WRITE
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000643define void @local_zextload_v1i8_to_v1i16(<1 x i16> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 {
644 %load = load <1 x i8>, <1 x i8> addrspace(3)* %in
645 %ext = zext <1 x i8> %load to <1 x i16>
646 store <1 x i16> %ext, <1 x i16> addrspace(3)* %out
647 ret void
648}
649
650; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000651
652; EG: LDS_UBYTE_READ_RET
653; EG: BFE_INT
654; EG: LDS_SHORT_WRITE
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000655define void @local_sextload_v1i8_to_v1i16(<1 x i16> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 {
656 %load = load <1 x i8>, <1 x i8> addrspace(3)* %in
657 %ext = sext <1 x i8> %load to <1 x i16>
658 store <1 x i16> %ext, <1 x i16> addrspace(3)* %out
659 ret void
660}
661
662; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000663
664; EG: LDS_USHORT_READ_RET
665; EG: LDS_WRITE
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000666define void @local_zextload_v2i8_to_v2i16(<2 x i16> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 {
667 %load = load <2 x i8>, <2 x i8> addrspace(3)* %in
668 %ext = zext <2 x i8> %load to <2 x i16>
669 store <2 x i16> %ext, <2 x i16> addrspace(3)* %out
670 ret void
671}
672
673; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000674
675; EG: LDS_USHORT_READ_RET
676; EG: BFE_INT
677; EG: BFE_INT
678; EG: LDS_WRITE
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000679define void @local_sextload_v2i8_to_v2i16(<2 x i16> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 {
680 %load = load <2 x i8>, <2 x i8> addrspace(3)* %in
681 %ext = sext <2 x i8> %load to <2 x i16>
682 store <2 x i16> %ext, <2 x i16> addrspace(3)* %out
683 ret void
684}
685
686; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000687
688; EG: LDS_READ_RET
689; EG: LDS_WRITE
690; EG: LDS_WRITE
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000691define void @local_zextload_v4i8_to_v4i16(<4 x i16> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 {
692 %load = load <4 x i8>, <4 x i8> addrspace(3)* %in
693 %ext = zext <4 x i8> %load to <4 x i16>
694 store <4 x i16> %ext, <4 x i16> addrspace(3)* %out
695 ret void
696}
697
698; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000699
700; EG: LDS_READ_RET
701; EG-DAG: BFE_INT
702; EG-DAG: BFE_INT
703; EG-DAG: BFE_INT
704; EG-DAG: ASHR
705; EG: LDS_WRITE
706; EG: LDS_WRITE
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000707define void @local_sextload_v4i8_to_v4i16(<4 x i16> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 {
708 %load = load <4 x i8>, <4 x i8> addrspace(3)* %in
709 %ext = sext <4 x i8> %load to <4 x i16>
710 store <4 x i16> %ext, <4 x i16> addrspace(3)* %out
711 ret void
712}
713
714; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000715
716; EG: LDS_READ_RET
717; EG: LDS_READ_RET
718; EG: LDS_WRITE
719; EG: LDS_WRITE
720; EG: LDS_WRITE
721; EG: LDS_WRITE
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000722define void @local_zextload_v8i8_to_v8i16(<8 x i16> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 {
723 %load = load <8 x i8>, <8 x i8> addrspace(3)* %in
724 %ext = zext <8 x i8> %load to <8 x i16>
725 store <8 x i16> %ext, <8 x i16> addrspace(3)* %out
726 ret void
727}
728
729; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000730
731; EG: LDS_READ_RET
732; EG: LDS_READ_RET
733; EG-DAG: BFE_INT
734; EG-DAG: BFE_INT
735; EG-DAG: BFE_INT
736; EG-DAG: BFE_INT
737; EG-DAG: BFE_INT
738; EG-DAG: BFE_INT
739; EG-DAG: ASHR
740; EG-DAG: ASHR
741; EG: LDS_WRITE
742; EG: LDS_WRITE
743; EG: LDS_WRITE
744; EG: LDS_WRITE
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000745define void @local_sextload_v8i8_to_v8i16(<8 x i16> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 {
746 %load = load <8 x i8>, <8 x i8> addrspace(3)* %in
747 %ext = sext <8 x i8> %load to <8 x i16>
748 store <8 x i16> %ext, <8 x i16> addrspace(3)* %out
749 ret void
750}
751
752; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000753
754; EG: LDS_READ_RET
755; EG: LDS_READ_RET
756; EG: LDS_READ_RET
757; EG: LDS_READ_RET
758; EG: LDS_WRITE
759; EG: LDS_WRITE
760; EG: LDS_WRITE
761; EG: LDS_WRITE
762; EG: LDS_WRITE
763; EG: LDS_WRITE
764; EG: LDS_WRITE
765; EG: LDS_WRITE
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000766define void @local_zextload_v16i8_to_v16i16(<16 x i16> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 {
767 %load = load <16 x i8>, <16 x i8> addrspace(3)* %in
768 %ext = zext <16 x i8> %load to <16 x i16>
769 store <16 x i16> %ext, <16 x i16> addrspace(3)* %out
770 ret void
771}
772
773; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000774
775; EG: LDS_READ_RET
776; EG: LDS_READ_RET
777; EG: LDS_READ_RET
778; EG: LDS_READ_RET
779; EG-DAG: BFE_INT
780; EG-DAG: BFE_INT
781; EG-DAG: BFE_INT
782; EG-DAG: BFE_INT
783; EG-DAG: BFE_INT
784; EG-DAG: BFE_INT
785; EG-DAG: BFE_INT
786; EG-DAG: BFE_INT
787; EG-DAG: BFE_INT
788; EG-DAG: BFE_INT
789; EG-DAG: BFE_INT
790; EG-DAG: BFE_INT
791; EG-DAG: ASHR
792; EG-DAG: ASHR
793; EG-DAG: ASHR
794; EG-DAG: ASHR
795; EG: LDS_WRITE
796; EG: LDS_WRITE
797; EG: LDS_WRITE
798; EG: LDS_WRITE
799; EG: LDS_WRITE
800; EG: LDS_WRITE
801; EG: LDS_WRITE
802; EG: LDS_WRITE
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000803define void @local_sextload_v16i8_to_v16i16(<16 x i16> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 {
804 %load = load <16 x i8>, <16 x i8> addrspace(3)* %in
805 %ext = sext <16 x i8> %load to <16 x i16>
806 store <16 x i16> %ext, <16 x i16> addrspace(3)* %out
807 ret void
808}
809
810; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000811
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: LDS_READ_RET
820; EG: LDS_WRITE
821; EG: LDS_WRITE
822; EG: LDS_WRITE
823; EG: LDS_WRITE
824; EG: LDS_WRITE
825; EG: LDS_WRITE
826; EG: LDS_WRITE
827; EG: LDS_WRITE
828; EG: LDS_WRITE
829; EG: LDS_WRITE
830; EG: LDS_WRITE
831; EG: LDS_WRITE
832; EG: LDS_WRITE
833; EG: LDS_WRITE
834; EG: LDS_WRITE
835; EG: LDS_WRITE
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000836define void @local_zextload_v32i8_to_v32i16(<32 x i16> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 {
837 %load = load <32 x i8>, <32 x i8> addrspace(3)* %in
838 %ext = zext <32 x i8> %load to <32 x i16>
839 store <32 x i16> %ext, <32 x i16> addrspace(3)* %out
840 ret void
841}
842
843; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i16:
Jan Vesely38814fa2016-08-27 19:09:43 +0000844
845; EG: LDS_READ_RET
846; EG: LDS_READ_RET
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-DAG: BFE_INT
854; EG-DAG: BFE_INT
855; EG-DAG: BFE_INT
856; EG-DAG: BFE_INT
857; EG-DAG: BFE_INT
858; EG-DAG: BFE_INT
859; EG-DAG: BFE_INT
860; EG-DAG: BFE_INT
861; EG-DAG: BFE_INT
862; EG-DAG: BFE_INT
863; EG-DAG: BFE_INT
864; EG-DAG: BFE_INT
865; EG-DAG: BFE_INT
866; EG-DAG: BFE_INT
867; EG-DAG: BFE_INT
868; EG-DAG: BFE_INT
869; EG-DAG: BFE_INT
870; EG-DAG: BFE_INT
871; EG-DAG: BFE_INT
872; EG-DAG: BFE_INT
873; EG-DAG: BFE_INT
874; EG-DAG: BFE_INT
875; EG-DAG: BFE_INT
876; EG-DAG: BFE_INT
877; EG-DAG: ASHR
878; EG-DAG: ASHR
879; EG-DAG: ASHR
880; EG-DAG: ASHR
881; EG-DAG: ASHR
882; EG-DAG: ASHR
883; EG-DAG: ASHR
884; EG-DAG: ASHR
885; EG: LDS_WRITE
886; EG: LDS_WRITE
887; EG: LDS_WRITE
888; EG: LDS_WRITE
889; EG: LDS_WRITE
890; EG: LDS_WRITE
891; EG: LDS_WRITE
892; EG: LDS_WRITE
893; EG: LDS_WRITE
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
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000901define void @local_sextload_v32i8_to_v32i16(<32 x i16> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 {
902 %load = load <32 x i8>, <32 x i8> addrspace(3)* %in
903 %ext = sext <32 x i8> %load to <32 x i16>
904 store <32 x i16> %ext, <32 x i16> addrspace(3)* %out
905 ret void
906}
907
908; XFUNC-LABEL: {{^}}local_zextload_v64i8_to_v64i16:
909; define void @local_zextload_v64i8_to_v64i16(<64 x i16> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 {
910; %load = load <64 x i8>, <64 x i8> addrspace(3)* %in
911; %ext = zext <64 x i8> %load to <64 x i16>
912; store <64 x i16> %ext, <64 x i16> addrspace(3)* %out
913; ret void
914; }
915
916; XFUNC-LABEL: {{^}}local_sextload_v64i8_to_v64i16:
917; define void @local_sextload_v64i8_to_v64i16(<64 x i16> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 {
918; %load = load <64 x i8>, <64 x i8> addrspace(3)* %in
919; %ext = sext <64 x i8> %load to <64 x i16>
920; store <64 x i16> %ext, <64 x i16> addrspace(3)* %out
921; ret void
922; }
923
924attributes #0 = { nounwind }