blob: 423fddac3cf400fa8ca8ca00a18a448fc129afd9 [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:
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 }