1; 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:
67; GCN: ds_read2_b64  v{{\[}}[[LO:[0-9]+]]:[[HI:[0-9]+]]{{\]}}, v{{[0-9]+}} offset0:1{{$}}
68; GCN: ds_write2_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:{{[0-9]+}}], v[{{[0-9]+}}:[[HI]]{{\]}} offset0:1{{$}}
69
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:
109define void @local_zextload_v1i8_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 {
110  %load = load <1 x i8>, <1 x i8> addrspace(3)* %in
111  %ext = zext <1 x i8> %load to <1 x i32>
112  store <1 x i32> %ext, <1 x i32> addrspace(3)* %out
113  ret void
114}
115
116; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i32:
117define void @local_sextload_v1i8_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 {
118  %load = load <1 x i8>, <1 x i8> addrspace(3)* %in
119  %ext = sext <1 x i8> %load to <1 x i32>
120  store <1 x i32> %ext, <1 x i32> addrspace(3)* %out
121  ret void
122}
123
124; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i32:
125; GCN: ds_read_u8
126; GCN: ds_read_u8
127
128; EG: LDS_UBYTE_READ_RET
129; EG: LDS_UBYTE_READ_RET
130define void @local_zextload_v2i8_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 {
131  %load = load <2 x i8>, <2 x i8> addrspace(3)* %in
132  %ext = zext <2 x i8> %load to <2 x i32>
133  store <2 x i32> %ext, <2 x i32> addrspace(3)* %out
134  ret void
135}
136
137; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i32:
138; GCN-NOT: s_wqm_b64
139; GCN: s_mov_b32 m0
140; GCN: ds_read_i8
141; GCN: ds_read_i8
142
143; EG-DAG: LDS_UBYTE_READ_RET
144; EG-DAG: LDS_UBYTE_READ_RET
145; EG-DAG: BFE_INT
146; EG-DAG: BFE_INT
147define void @local_sextload_v2i8_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 {
148  %load = load <2 x i8>, <2 x i8> addrspace(3)* %in
149  %ext = sext <2 x i8> %load to <2 x i32>
150  store <2 x i32> %ext, <2 x i32> addrspace(3)* %out
151  ret void
152}
153
154; FUNC-LABEL: {{^}}local_zextload_v3i8_to_v3i32:
155; GCN: ds_read_b32
156
157; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8
158; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 16, 8
159; GCN-DAG: v_and_b32_e32 v{{[0-9]+}}, 0xff,
160define void @local_zextload_v3i8_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i8> addrspace(3)* %in) #0 {
161entry:
162  %ld = load <3 x i8>, <3 x i8> addrspace(3)* %in
163  %ext = zext <3 x i8> %ld to <3 x i32>
164  store <3 x i32> %ext, <3 x i32> addrspace(3)* %out
165  ret void
166}
167
168; FUNC-LABEL: {{^}}local_sextload_v3i8_to_v3i32:
169; GCN-NOT: s_wqm_b64
170; GCN: s_mov_b32 m0
171; GCN: ds_read_b32
172
173; GCN-DAG: v_bfe_i32
174; GCN-DAG: v_bfe_i32
175; GCN-DAG: v_bfe_i32
176; GCN-DAG: v_bfe_i32
177
178; GCN-DAG: ds_write_b64
179; GCN-DAG: ds_write_b32
180
181define void @local_sextload_v3i8_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i8> addrspace(3)* %in) #0 {
182entry:
183  %ld = load <3 x i8>, <3 x i8> addrspace(3)* %in
184  %ext = sext <3 x i8> %ld to <3 x i32>
185  store <3 x i32> %ext, <3 x i32> addrspace(3)* %out
186  ret void
187}
188
189; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i32:
190; GCN-NOT: s_wqm_b64
191; GCN: s_mov_b32 m0
192; GCN: ds_read_u8
193; GCN: ds_read_u8
194; GCN: ds_read_u8
195; GCN: ds_read_u8
196
197; EG: LDS_UBYTE_READ_RET
198; EG: LDS_UBYTE_READ_RET
199; EG: LDS_UBYTE_READ_RET
200; EG: LDS_UBYTE_READ_RET
201define void @local_zextload_v4i8_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 {
202  %load = load <4 x i8>, <4 x i8> addrspace(3)* %in
203  %ext = zext <4 x i8> %load to <4 x i32>
204  store <4 x i32> %ext, <4 x i32> addrspace(3)* %out
205  ret void
206}
207
208; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i32:
209; GCN-NOT: s_wqm_b64
210; GCN: s_mov_b32 m0
211; GCN: ds_read_i8
212; GCN: ds_read_i8
213; GCN: ds_read_i8
214; GCN: ds_read_i8
215
216; EG-DAG: LDS_UBYTE_READ_RET
217; EG-DAG: LDS_UBYTE_READ_RET
218; EG-DAG: LDS_UBYTE_READ_RET
219; EG-DAG: LDS_UBYTE_READ_RET
220; 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:
232define void @local_zextload_v8i8_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 {
233  %load = load <8 x i8>, <8 x i8> addrspace(3)* %in
234  %ext = zext <8 x i8> %load to <8 x i32>
235  store <8 x i32> %ext, <8 x i32> addrspace(3)* %out
236  ret void
237}
238
239; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i32:
240define void @local_sextload_v8i8_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 {
241  %load = load <8 x i8>, <8 x i8> addrspace(3)* %in
242  %ext = sext <8 x i8> %load to <8 x i32>
243  store <8 x i32> %ext, <8 x i32> addrspace(3)* %out
244  ret void
245}
246
247; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i32:
248define void @local_zextload_v16i8_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 {
249  %load = load <16 x i8>, <16 x i8> addrspace(3)* %in
250  %ext = zext <16 x i8> %load to <16 x i32>
251  store <16 x i32> %ext, <16 x i32> addrspace(3)* %out
252  ret void
253}
254
255; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i32:
256define void @local_sextload_v16i8_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 {
257  %load = load <16 x i8>, <16 x i8> addrspace(3)* %in
258  %ext = sext <16 x i8> %load to <16 x i32>
259  store <16 x i32> %ext, <16 x i32> addrspace(3)* %out
260  ret void
261}
262
263; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i32:
264define void @local_zextload_v32i8_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 {
265  %load = load <32 x i8>, <32 x i8> addrspace(3)* %in
266  %ext = zext <32 x i8> %load to <32 x i32>
267  store <32 x i32> %ext, <32 x i32> addrspace(3)* %out
268  ret void
269}
270
271; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i32:
272define void @local_sextload_v32i8_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 {
273  %load = load <32 x i8>, <32 x i8> addrspace(3)* %in
274  %ext = sext <32 x i8> %load to <32 x i32>
275  store <32 x i32> %ext, <32 x i32> addrspace(3)* %out
276  ret void
277}
278
279; FUNC-LABEL: {{^}}local_zextload_v64i8_to_v64i32:
280define void @local_zextload_v64i8_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 {
281  %load = load <64 x i8>, <64 x i8> addrspace(3)* %in
282  %ext = zext <64 x i8> %load to <64 x i32>
283  store <64 x i32> %ext, <64 x i32> addrspace(3)* %out
284  ret void
285}
286
287; FUNC-LABEL: {{^}}local_sextload_v64i8_to_v64i32:
288define void @local_sextload_v64i8_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 {
289  %load = load <64 x i8>, <64 x i8> addrspace(3)* %in
290  %ext = sext <64 x i8> %load to <64 x i32>
291  store <64 x i32> %ext, <64 x i32> addrspace(3)* %out
292  ret void
293}
294
295; FUNC-LABEL: {{^}}local_zextload_i8_to_i64:
296; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
297; GCN-DAG: ds_read_u8 v[[LO:[0-9]+]],
298; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]]
299define void @local_zextload_i8_to_i64(i64 addrspace(3)* %out, i8 addrspace(3)* %in) #0 {
300  %a = load i8, i8 addrspace(3)* %in
301  %ext = zext i8 %a to i64
302  store i64 %ext, i64 addrspace(3)* %out
303  ret void
304}
305
306; FUNC-LABEL: {{^}}local_sextload_i8_to_i64:
307; GCN: ds_read_i8 v[[LO:[0-9]+]],
308; GCN: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]]
309
310; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]{{\]}}
311define void @local_sextload_i8_to_i64(i64 addrspace(3)* %out, i8 addrspace(3)* %in) #0 {
312  %a = load i8, i8 addrspace(3)* %in
313  %ext = sext i8 %a to i64
314  store i64 %ext, i64 addrspace(3)* %out
315  ret void
316}
317
318; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i64:
319define void @local_zextload_v1i8_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 {
320  %load = load <1 x i8>, <1 x i8> addrspace(3)* %in
321  %ext = zext <1 x i8> %load to <1 x i64>
322  store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
323  ret void
324}
325
326; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i64:
327define void @local_sextload_v1i8_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 {
328  %load = load <1 x i8>, <1 x i8> addrspace(3)* %in
329  %ext = sext <1 x i8> %load to <1 x i64>
330  store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
331  ret void
332}
333
334; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i64:
335define void @local_zextload_v2i8_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 {
336  %load = load <2 x i8>, <2 x i8> addrspace(3)* %in
337  %ext = zext <2 x i8> %load to <2 x i64>
338  store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
339  ret void
340}
341
342; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i64:
343define void @local_sextload_v2i8_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 {
344  %load = load <2 x i8>, <2 x i8> addrspace(3)* %in
345  %ext = sext <2 x i8> %load to <2 x i64>
346  store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
347  ret void
348}
349
350; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i64:
351define void @local_zextload_v4i8_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 {
352  %load = load <4 x i8>, <4 x i8> addrspace(3)* %in
353  %ext = zext <4 x i8> %load to <4 x i64>
354  store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
355  ret void
356}
357
358; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i64:
359define void @local_sextload_v4i8_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 {
360  %load = load <4 x i8>, <4 x i8> addrspace(3)* %in
361  %ext = sext <4 x i8> %load to <4 x i64>
362  store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
363  ret void
364}
365
366; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i64:
367define void @local_zextload_v8i8_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 {
368  %load = load <8 x i8>, <8 x i8> addrspace(3)* %in
369  %ext = zext <8 x i8> %load to <8 x i64>
370  store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
371  ret void
372}
373
374; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i64:
375define void @local_sextload_v8i8_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 {
376  %load = load <8 x i8>, <8 x i8> addrspace(3)* %in
377  %ext = sext <8 x i8> %load to <8 x i64>
378  store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
379  ret void
380}
381
382; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i64:
383define void @local_zextload_v16i8_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 {
384  %load = load <16 x i8>, <16 x i8> addrspace(3)* %in
385  %ext = zext <16 x i8> %load to <16 x i64>
386  store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
387  ret void
388}
389
390; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i64:
391define void @local_sextload_v16i8_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 {
392  %load = load <16 x i8>, <16 x i8> addrspace(3)* %in
393  %ext = sext <16 x i8> %load to <16 x i64>
394  store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
395  ret void
396}
397
398; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i64:
399define void @local_zextload_v32i8_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 {
400  %load = load <32 x i8>, <32 x i8> addrspace(3)* %in
401  %ext = zext <32 x i8> %load to <32 x i64>
402  store <32 x i64> %ext, <32 x i64> addrspace(3)* %out
403  ret void
404}
405
406; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i64:
407define void @local_sextload_v32i8_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 {
408  %load = load <32 x i8>, <32 x i8> addrspace(3)* %in
409  %ext = sext <32 x i8> %load to <32 x i64>
410  store <32 x i64> %ext, <32 x i64> addrspace(3)* %out
411  ret void
412}
413
414; XFUNC-LABEL: {{^}}local_zextload_v64i8_to_v64i64:
415; define void @local_zextload_v64i8_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 {
416;   %load = load <64 x i8>, <64 x i8> addrspace(3)* %in
417;   %ext = zext <64 x i8> %load to <64 x i64>
418;   store <64 x i64> %ext, <64 x i64> addrspace(3)* %out
419;   ret void
420; }
421
422; XFUNC-LABEL: {{^}}local_sextload_v64i8_to_v64i64:
423; define void @local_sextload_v64i8_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 {
424;   %load = load <64 x i8>, <64 x i8> addrspace(3)* %in
425;   %ext = sext <64 x i8> %load to <64 x i64>
426;   store <64 x i64> %ext, <64 x i64> addrspace(3)* %out
427;   ret void
428; }
429
430; FUNC-LABEL: {{^}}local_zextload_i8_to_i16:
431; GCN: ds_read_u8 v[[VAL:[0-9]+]],
432; GCN: ds_write_b16 v[[VAL:[0-9]+]]
433define void @local_zextload_i8_to_i16(i16 addrspace(3)* %out, i8 addrspace(3)* %in) #0 {
434  %a = load i8, i8 addrspace(3)* %in
435  %ext = zext i8 %a to i16
436  store i16 %ext, i16 addrspace(3)* %out
437  ret void
438}
439
440; FUNC-LABEL: {{^}}local_sextload_i8_to_i16:
441; GCN: ds_read_i8 v[[VAL:[0-9]+]],
442; GCN: ds_write_b16 v{{[0-9]+}}, v[[VAL]]
443define void @local_sextload_i8_to_i16(i16 addrspace(3)* %out, i8 addrspace(3)* %in) #0 {
444  %a = load i8, i8 addrspace(3)* %in
445  %ext = sext i8 %a to i16
446  store i16 %ext, i16 addrspace(3)* %out
447  ret void
448}
449
450; FUNC-LABEL: {{^}}local_zextload_v1i8_to_v1i16:
451define void @local_zextload_v1i8_to_v1i16(<1 x i16> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 {
452  %load = load <1 x i8>, <1 x i8> addrspace(3)* %in
453  %ext = zext <1 x i8> %load to <1 x i16>
454  store <1 x i16> %ext, <1 x i16> addrspace(3)* %out
455  ret void
456}
457
458; FUNC-LABEL: {{^}}local_sextload_v1i8_to_v1i16:
459define void @local_sextload_v1i8_to_v1i16(<1 x i16> addrspace(3)* %out, <1 x i8> addrspace(3)* %in) #0 {
460  %load = load <1 x i8>, <1 x i8> addrspace(3)* %in
461  %ext = sext <1 x i8> %load to <1 x i16>
462  store <1 x i16> %ext, <1 x i16> addrspace(3)* %out
463  ret void
464}
465
466; FUNC-LABEL: {{^}}local_zextload_v2i8_to_v2i16:
467define void @local_zextload_v2i8_to_v2i16(<2 x i16> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 {
468  %load = load <2 x i8>, <2 x i8> addrspace(3)* %in
469  %ext = zext <2 x i8> %load to <2 x i16>
470  store <2 x i16> %ext, <2 x i16> addrspace(3)* %out
471  ret void
472}
473
474; FUNC-LABEL: {{^}}local_sextload_v2i8_to_v2i16:
475define void @local_sextload_v2i8_to_v2i16(<2 x i16> addrspace(3)* %out, <2 x i8> addrspace(3)* %in) #0 {
476  %load = load <2 x i8>, <2 x i8> addrspace(3)* %in
477  %ext = sext <2 x i8> %load to <2 x i16>
478  store <2 x i16> %ext, <2 x i16> addrspace(3)* %out
479  ret void
480}
481
482; FUNC-LABEL: {{^}}local_zextload_v4i8_to_v4i16:
483define void @local_zextload_v4i8_to_v4i16(<4 x i16> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 {
484  %load = load <4 x i8>, <4 x i8> addrspace(3)* %in
485  %ext = zext <4 x i8> %load to <4 x i16>
486  store <4 x i16> %ext, <4 x i16> addrspace(3)* %out
487  ret void
488}
489
490; FUNC-LABEL: {{^}}local_sextload_v4i8_to_v4i16:
491define void @local_sextload_v4i8_to_v4i16(<4 x i16> addrspace(3)* %out, <4 x i8> addrspace(3)* %in) #0 {
492  %load = load <4 x i8>, <4 x i8> addrspace(3)* %in
493  %ext = sext <4 x i8> %load to <4 x i16>
494  store <4 x i16> %ext, <4 x i16> addrspace(3)* %out
495  ret void
496}
497
498; FUNC-LABEL: {{^}}local_zextload_v8i8_to_v8i16:
499define void @local_zextload_v8i8_to_v8i16(<8 x i16> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 {
500  %load = load <8 x i8>, <8 x i8> addrspace(3)* %in
501  %ext = zext <8 x i8> %load to <8 x i16>
502  store <8 x i16> %ext, <8 x i16> addrspace(3)* %out
503  ret void
504}
505
506; FUNC-LABEL: {{^}}local_sextload_v8i8_to_v8i16:
507define void @local_sextload_v8i8_to_v8i16(<8 x i16> addrspace(3)* %out, <8 x i8> addrspace(3)* %in) #0 {
508  %load = load <8 x i8>, <8 x i8> addrspace(3)* %in
509  %ext = sext <8 x i8> %load to <8 x i16>
510  store <8 x i16> %ext, <8 x i16> addrspace(3)* %out
511  ret void
512}
513
514; FUNC-LABEL: {{^}}local_zextload_v16i8_to_v16i16:
515define void @local_zextload_v16i8_to_v16i16(<16 x i16> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 {
516  %load = load <16 x i8>, <16 x i8> addrspace(3)* %in
517  %ext = zext <16 x i8> %load to <16 x i16>
518  store <16 x i16> %ext, <16 x i16> addrspace(3)* %out
519  ret void
520}
521
522; FUNC-LABEL: {{^}}local_sextload_v16i8_to_v16i16:
523define void @local_sextload_v16i8_to_v16i16(<16 x i16> addrspace(3)* %out, <16 x i8> addrspace(3)* %in) #0 {
524  %load = load <16 x i8>, <16 x i8> addrspace(3)* %in
525  %ext = sext <16 x i8> %load to <16 x i16>
526  store <16 x i16> %ext, <16 x i16> addrspace(3)* %out
527  ret void
528}
529
530; FUNC-LABEL: {{^}}local_zextload_v32i8_to_v32i16:
531define void @local_zextload_v32i8_to_v32i16(<32 x i16> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 {
532  %load = load <32 x i8>, <32 x i8> addrspace(3)* %in
533  %ext = zext <32 x i8> %load to <32 x i16>
534  store <32 x i16> %ext, <32 x i16> addrspace(3)* %out
535  ret void
536}
537
538; FUNC-LABEL: {{^}}local_sextload_v32i8_to_v32i16:
539define void @local_sextload_v32i8_to_v32i16(<32 x i16> addrspace(3)* %out, <32 x i8> addrspace(3)* %in) #0 {
540  %load = load <32 x i8>, <32 x i8> addrspace(3)* %in
541  %ext = sext <32 x i8> %load to <32 x i16>
542  store <32 x i16> %ext, <32 x i16> addrspace(3)* %out
543  ret void
544}
545
546; XFUNC-LABEL: {{^}}local_zextload_v64i8_to_v64i16:
547; define void @local_zextload_v64i8_to_v64i16(<64 x i16> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 {
548;   %load = load <64 x i8>, <64 x i8> addrspace(3)* %in
549;   %ext = zext <64 x i8> %load to <64 x i16>
550;   store <64 x i16> %ext, <64 x i16> addrspace(3)* %out
551;   ret void
552; }
553
554; XFUNC-LABEL: {{^}}local_sextload_v64i8_to_v64i16:
555; define void @local_sextload_v64i8_to_v64i16(<64 x i16> addrspace(3)* %out, <64 x i8> addrspace(3)* %in) #0 {
556;   %load = load <64 x i8>, <64 x i8> addrspace(3)* %in
557;   %ext = sext <64 x i8> %load to <64 x i16>
558;   store <64 x i16> %ext, <64 x i16> addrspace(3)* %out
559;   ret void
560; }
561
562attributes #0 = { nounwind }
563