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; FUNC-LABEL: {{^}}local_load_i16:
6; GCN: ds_read_u16 v{{[0-9]+}}
7
8; EG: LDS_USHORT_READ_RET
9define void @local_load_i16(i16 addrspace(3)* %out, i16 addrspace(3)* %in) {
10entry:
11  %ld = load i16, i16 addrspace(3)* %in
12  store i16 %ld, i16 addrspace(3)* %out
13  ret void
14}
15
16; FUNC-LABEL: {{^}}local_load_v2i16:
17; GCN: ds_read_b32
18
19; EG: LDS_READ_RET
20define void @local_load_v2i16(<2 x i16> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) {
21entry:
22  %ld = load <2 x i16>, <2 x i16> addrspace(3)* %in
23  store <2 x i16> %ld, <2 x i16> addrspace(3)* %out
24  ret void
25}
26
27; FUNC-LABEL: {{^}}local_load_v3i16:
28; GCN: ds_read_b64
29; GCN-DAG: ds_write_b32
30; GCN-DAG: ds_write_b16
31
32; EG-DAG: LDS_USHORT_READ_RET
33; EG-DAG: LDS_READ_RET
34define void @local_load_v3i16(<3 x i16> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) {
35entry:
36  %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in
37  store <3 x i16> %ld, <3 x i16> addrspace(3)* %out
38  ret void
39}
40
41; FUNC-LABEL: {{^}}local_load_v4i16:
42; GCN: ds_read_b64
43
44; EG: LDS_READ_RET
45; EG: LDS_READ_RET
46define void @local_load_v4i16(<4 x i16> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) {
47entry:
48  %ld = load <4 x i16>, <4 x i16> addrspace(3)* %in
49  store <4 x i16> %ld, <4 x i16> addrspace(3)* %out
50  ret void
51}
52
53; FUNC-LABEL: {{^}}local_load_v8i16:
54; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1{{$}}
55
56; EG: LDS_READ_RET
57; EG: LDS_READ_RET
58; EG: LDS_READ_RET
59; EG: LDS_READ_RET
60define void @local_load_v8i16(<8 x i16> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) {
61entry:
62  %ld = load <8 x i16>, <8 x i16> addrspace(3)* %in
63  store <8 x i16> %ld, <8 x i16> addrspace(3)* %out
64  ret void
65}
66
67; FUNC-LABEL: {{^}}local_load_v16i16:
68; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:3 offset1:2{{$}}
69; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1{{$}}
70
71
72; EG: LDS_READ_RET
73; EG: LDS_READ_RET
74; EG: LDS_READ_RET
75; EG: LDS_READ_RET
76
77; EG: LDS_READ_RET
78; EG: LDS_READ_RET
79; EG: LDS_READ_RET
80; EG: LDS_READ_RET
81define void @local_load_v16i16(<16 x i16> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) {
82entry:
83  %ld = load <16 x i16>, <16 x i16> addrspace(3)* %in
84  store <16 x i16> %ld, <16 x i16> addrspace(3)* %out
85  ret void
86}
87
88; FUNC-LABEL: {{^}}local_zextload_i16_to_i32:
89; GCN: ds_read_u16
90; GCN: ds_write_b32
91
92; EG: LDS_USHORT_READ_RET
93define void @local_zextload_i16_to_i32(i32 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
94  %a = load i16, i16 addrspace(3)* %in
95  %ext = zext i16 %a to i32
96  store i32 %ext, i32 addrspace(3)* %out
97  ret void
98}
99
100; FUNC-LABEL: {{^}}local_sextload_i16_to_i32:
101; GCN-NOT: s_wqm_b64
102; GCN: s_mov_b32 m0
103; GCN: ds_read_i16
104
105; EG: LDS_USHORT_READ_RET
106; EG: BFE_INT
107define void @local_sextload_i16_to_i32(i32 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
108  %a = load i16, i16 addrspace(3)* %in
109  %ext = sext i16 %a to i32
110  store i32 %ext, i32 addrspace(3)* %out
111  ret void
112}
113
114; FUNC-LABEL: {{^}}local_zextload_v1i16_to_v1i32:
115; GCN: ds_read_u16
116define void @local_zextload_v1i16_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
117  %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
118  %ext = zext <1 x i16> %load to <1 x i32>
119  store <1 x i32> %ext, <1 x i32> addrspace(3)* %out
120  ret void
121}
122
123; FUNC-LABEL: {{^}}local_sextload_v1i16_to_v1i32:
124; GCN: ds_read_i16
125define void @local_sextload_v1i16_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
126  %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
127  %ext = sext <1 x i16> %load to <1 x i32>
128  store <1 x i32> %ext, <1 x i32> addrspace(3)* %out
129  ret void
130}
131
132; FUNC-LABEL: {{^}}local_zextload_v2i16_to_v2i32:
133; GCN-NOT: s_wqm_b64
134; GCN: s_mov_b32 m0
135; GCN: ds_read_u16
136; GCN: ds_read_u16
137
138; EG: LDS_USHORT_READ_RET
139; EG: LDS_USHORT_READ_RET
140define void @local_zextload_v2i16_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
141  %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
142  %ext = zext <2 x i16> %load to <2 x i32>
143  store <2 x i32> %ext, <2 x i32> addrspace(3)* %out
144  ret void
145}
146
147; FUNC-LABEL: {{^}}local_sextload_v2i16_to_v2i32:
148; GCN-NOT: s_wqm_b64
149; GCN: s_mov_b32 m0
150; GCN: ds_read_i16
151; GCN: ds_read_i16
152
153; EG-DAG: LDS_USHORT_READ_RET
154; EG-DAG: LDS_USHORT_READ_RET
155; EG-DAG: BFE_INT
156; EG-DAG: BFE_INT
157define void @local_sextload_v2i16_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
158  %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
159  %ext = sext <2 x i16> %load to <2 x i32>
160  store <2 x i32> %ext, <2 x i32> addrspace(3)* %out
161  ret void
162}
163
164; FUNC-LABEL: {{^}}local_local_zextload_v3i16_to_v3i32:
165; GCN: ds_read_b64
166; GCN-DAG: ds_write_b32
167; GCN-DAG: ds_write_b64
168define void @local_local_zextload_v3i16_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) {
169entry:
170  %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in
171  %ext = zext <3 x i16> %ld to <3 x i32>
172  store <3 x i32> %ext, <3 x i32> addrspace(3)* %out
173  ret void
174}
175
176; FUNC-LABEL: {{^}}local_local_sextload_v3i16_to_v3i32:
177; GCN: ds_read_b64
178; GCN-DAG: ds_write_b32
179; GCN-DAG: ds_write_b64
180define void @local_local_sextload_v3i16_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) {
181entry:
182  %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in
183  %ext = sext <3 x i16> %ld to <3 x i32>
184  store <3 x i32> %ext, <3 x i32> addrspace(3)* %out
185  ret void
186}
187
188; FUNC-LABEL: {{^}}local_local_zextload_v4i16_to_v4i32:
189; GCN-NOT: s_wqm_b64
190; GCN: s_mov_b32 m0
191; GCN: ds_read_u16
192; GCN: ds_read_u16
193; GCN: ds_read_u16
194; GCN: ds_read_u16
195
196; EG: LDS_USHORT_READ_RET
197; EG: LDS_USHORT_READ_RET
198; EG: LDS_USHORT_READ_RET
199; EG: LDS_USHORT_READ_RET
200define void @local_local_zextload_v4i16_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
201  %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
202  %ext = zext <4 x i16> %load to <4 x i32>
203  store <4 x i32> %ext, <4 x i32> addrspace(3)* %out
204  ret void
205}
206
207; FUNC-LABEL: {{^}}local_sextload_v4i16_to_v4i32:
208; GCN-NOT: s_wqm_b64
209; GCN: s_mov_b32 m0
210; GCN: ds_read_i16
211; GCN: ds_read_i16
212; GCN: ds_read_i16
213; GCN: ds_read_i16
214
215; EG-DAG: LDS_USHORT_READ_RET
216; EG-DAG: LDS_USHORT_READ_RET
217; EG-DAG: LDS_USHORT_READ_RET
218; EG-DAG: LDS_USHORT_READ_RET
219; EG-DAG: BFE_INT
220; EG-DAG: BFE_INT
221; EG-DAG: BFE_INT
222; EG-DAG: BFE_INT
223define void @local_sextload_v4i16_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
224  %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
225  %ext = sext <4 x i16> %load to <4 x i32>
226  store <4 x i32> %ext, <4 x i32> addrspace(3)* %out
227  ret void
228}
229
230; FUNC-LABEL: {{^}}local_zextload_v8i16_to_v8i32:
231; GCN: ds_read_u16
232; GCN: ds_read_u16
233; GCN: ds_read_u16
234; GCN: ds_read_u16
235; GCN: ds_read_u16
236; GCN: ds_read_u16
237; GCN: ds_read_u16
238; GCN: ds_read_u16
239define void @local_zextload_v8i16_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
240  %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
241  %ext = zext <8 x i16> %load to <8 x i32>
242  store <8 x i32> %ext, <8 x i32> addrspace(3)* %out
243  ret void
244}
245
246; FUNC-LABEL: {{^}}local_sextload_v8i16_to_v8i32:
247; GCN: ds_read_i16
248; GCN: ds_read_i16
249; GCN: ds_read_i16
250; GCN: ds_read_i16
251; GCN: ds_read_i16
252; GCN: ds_read_i16
253; GCN: ds_read_i16
254; GCN: ds_read_i16
255define void @local_sextload_v8i16_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
256  %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
257  %ext = sext <8 x i16> %load to <8 x i32>
258  store <8 x i32> %ext, <8 x i32> addrspace(3)* %out
259  ret void
260}
261
262; FUNC-LABEL: {{^}}local_zextload_v16i16_to_v16i32:
263; GCN: ds_read_u16
264; GCN: ds_read_u16
265; GCN: ds_read_u16
266; GCN: ds_read_u16
267; GCN: ds_read_u16
268; GCN: ds_read_u16
269; GCN: ds_read_u16
270; GCN: ds_read_u16
271; GCN: ds_read_u16
272; GCN: ds_read_u16
273; GCN: ds_read_u16
274; GCN: ds_read_u16
275; GCN: ds_read_u16
276; GCN: ds_read_u16
277; GCN: ds_read_u16
278; GCN: ds_read_u16
279define void @local_zextload_v16i16_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
280  %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
281  %ext = zext <16 x i16> %load to <16 x i32>
282  store <16 x i32> %ext, <16 x i32> addrspace(3)* %out
283  ret void
284}
285
286; FUNC-LABEL: {{^}}local_sextload_v16i16_to_v16i32:
287; GCN: ds_read_i16
288; GCN: ds_read_i16
289; GCN: ds_read_i16
290; GCN: ds_read_i16
291; GCN: ds_read_i16
292; GCN: ds_read_i16
293; GCN: ds_read_i16
294; GCN: ds_read_i16
295; GCN: ds_read_i16
296; GCN: ds_read_i16
297; GCN: ds_read_i16
298; GCN: ds_read_i16
299; GCN: ds_read_i16
300; GCN: ds_read_i16
301; GCN: ds_read_i16
302; GCN: ds_read_i16
303define void @local_sextload_v16i16_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
304  %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
305  %ext = sext <16 x i16> %load to <16 x i32>
306  store <16 x i32> %ext, <16 x i32> addrspace(3)* %out
307  ret void
308}
309
310; FUNC-LABEL: {{^}}local_zextload_v32i16_to_v32i32:
311; GCN: ds_read_u16
312; GCN: ds_read_u16
313; GCN: ds_read_u16
314; GCN: ds_read_u16
315; GCN: ds_read_u16
316; GCN: ds_read_u16
317; GCN: ds_read_u16
318; GCN: ds_read_u16
319; GCN: ds_read_u16
320; GCN: ds_read_u16
321; GCN: ds_read_u16
322; GCN: ds_read_u16
323; GCN: ds_read_u16
324; GCN: ds_read_u16
325; GCN: ds_read_u16
326; GCN: ds_read_u16
327; GCN: ds_read_u16
328; GCN: ds_read_u16
329; GCN: ds_read_u16
330; GCN: ds_read_u16
331; GCN: ds_read_u16
332; GCN: ds_read_u16
333; GCN: ds_read_u16
334; GCN: ds_read_u16
335; GCN: ds_read_u16
336; GCN: ds_read_u16
337; GCN: ds_read_u16
338; GCN: ds_read_u16
339; GCN: ds_read_u16
340; GCN: ds_read_u16
341; GCN: ds_read_u16
342; GCN: ds_read_u16
343
344define void @local_zextload_v32i16_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
345  %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
346  %ext = zext <32 x i16> %load to <32 x i32>
347  store <32 x i32> %ext, <32 x i32> addrspace(3)* %out
348  ret void
349}
350
351; FUNC-LABEL: {{^}}local_sextload_v32i16_to_v32i32:
352; GCN: ds_read_i16
353; GCN: ds_read_i16
354; GCN: ds_read_i16
355; GCN: ds_read_i16
356; GCN: ds_read_i16
357; GCN: ds_read_i16
358; GCN: ds_read_i16
359; GCN: ds_read_i16
360; GCN: ds_read_i16
361; GCN: ds_read_i16
362; GCN: ds_read_i16
363; GCN: ds_read_i16
364; GCN: ds_read_i16
365; GCN: ds_read_i16
366; GCN: ds_read_i16
367; GCN: ds_read_i16
368; GCN: ds_read_i16
369; GCN: ds_read_i16
370; GCN: ds_read_i16
371; GCN: ds_read_i16
372; GCN: ds_read_i16
373; GCN: ds_read_i16
374; GCN: ds_read_i16
375; GCN: ds_read_i16
376; GCN: ds_read_i16
377; GCN: ds_read_i16
378; GCN: ds_read_i16
379; GCN: ds_read_i16
380; GCN: ds_read_i16
381; GCN: ds_read_i16
382; GCN: ds_read_i16
383; GCN: ds_read_i16
384define void @local_sextload_v32i16_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
385  %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
386  %ext = sext <32 x i16> %load to <32 x i32>
387  store <32 x i32> %ext, <32 x i32> addrspace(3)* %out
388  ret void
389}
390
391; FUNC-LABEL: {{^}}local_zextload_v64i16_to_v64i32:
392; GCN: ds_read_u16
393; GCN: ds_read_u16
394; GCN: ds_read_u16
395; GCN: ds_read_u16
396; GCN: ds_read_u16
397; GCN: ds_read_u16
398; GCN: ds_read_u16
399; GCN: ds_read_u16
400; GCN: ds_read_u16
401; GCN: ds_read_u16
402; GCN: ds_read_u16
403; GCN: ds_read_u16
404; GCN: ds_read_u16
405; GCN: ds_read_u16
406; GCN: ds_read_u16
407; GCN: ds_read_u16
408; GCN: ds_read_u16
409; GCN: ds_read_u16
410; GCN: ds_read_u16
411; GCN: ds_read_u16
412; GCN: ds_read_u16
413; GCN: ds_read_u16
414; GCN: ds_read_u16
415; GCN: ds_read_u16
416; GCN: ds_read_u16
417; GCN: ds_read_u16
418; GCN: ds_read_u16
419; GCN: ds_read_u16
420; GCN: ds_read_u16
421; GCN: ds_read_u16
422; GCN: ds_read_u16
423; GCN: ds_read_u16
424; GCN: ds_read_u16
425; GCN: ds_read_u16
426; GCN: ds_read_u16
427; GCN: ds_read_u16
428; GCN: ds_read_u16
429; GCN: ds_read_u16
430; GCN: ds_read_u16
431; GCN: ds_read_u16
432; GCN: ds_read_u16
433; GCN: ds_read_u16
434; GCN: ds_read_u16
435; GCN: ds_read_u16
436; GCN: ds_read_u16
437; GCN: ds_read_u16
438; GCN: ds_read_u16
439; GCN: ds_read_u16
440; GCN: ds_read_u16
441; GCN: ds_read_u16
442; GCN: ds_read_u16
443; GCN: ds_read_u16
444; GCN: ds_read_u16
445; GCN: ds_read_u16
446; GCN: ds_read_u16
447; GCN: ds_read_u16
448; GCN: ds_read_u16
449; GCN: ds_read_u16
450; GCN: ds_read_u16
451; GCN: ds_read_u16
452; GCN: ds_read_u16
453; GCN: ds_read_u16
454; GCN: ds_read_u16
455; GCN: ds_read_u16
456
457define void @local_zextload_v64i16_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
458  %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
459  %ext = zext <64 x i16> %load to <64 x i32>
460  store <64 x i32> %ext, <64 x i32> addrspace(3)* %out
461  ret void
462}
463
464; FUNC-LABEL: {{^}}local_sextload_v64i16_to_v64i32:
465define void @local_sextload_v64i16_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
466  %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
467  %ext = sext <64 x i16> %load to <64 x i32>
468  store <64 x i32> %ext, <64 x i32> addrspace(3)* %out
469  ret void
470}
471
472; FUNC-LABEL: {{^}}local_zextload_i16_to_i64:
473; GCN-DAG: ds_read_u16 v[[LO:[0-9]+]],
474; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
475
476; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]]
477define void @local_zextload_i16_to_i64(i64 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
478  %a = load i16, i16 addrspace(3)* %in
479  %ext = zext i16 %a to i64
480  store i64 %ext, i64 addrspace(3)* %out
481  ret void
482}
483
484; FUNC-LABEL: {{^}}local_sextload_i16_to_i64:
485; GCN: ds_read_i16 v[[LO:[0-9]+]],
486; GCN-DAG: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]]
487
488; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]]
489define void @local_sextload_i16_to_i64(i64 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
490  %a = load i16, i16 addrspace(3)* %in
491  %ext = sext i16 %a to i64
492  store i64 %ext, i64 addrspace(3)* %out
493  ret void
494}
495
496; FUNC-LABEL: {{^}}local_zextload_v1i16_to_v1i64:
497define void @local_zextload_v1i16_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
498  %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
499  %ext = zext <1 x i16> %load to <1 x i64>
500  store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
501  ret void
502}
503
504; FUNC-LABEL: {{^}}local_sextload_v1i16_to_v1i64:
505define void @local_sextload_v1i16_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
506  %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
507  %ext = sext <1 x i16> %load to <1 x i64>
508  store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
509  ret void
510}
511
512; FUNC-LABEL: {{^}}local_zextload_v2i16_to_v2i64:
513define void @local_zextload_v2i16_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
514  %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
515  %ext = zext <2 x i16> %load to <2 x i64>
516  store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
517  ret void
518}
519
520; FUNC-LABEL: {{^}}local_sextload_v2i16_to_v2i64:
521define void @local_sextload_v2i16_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
522  %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
523  %ext = sext <2 x i16> %load to <2 x i64>
524  store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
525  ret void
526}
527
528; FUNC-LABEL: {{^}}local_zextload_v4i16_to_v4i64:
529define void @local_zextload_v4i16_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
530  %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
531  %ext = zext <4 x i16> %load to <4 x i64>
532  store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
533  ret void
534}
535
536; FUNC-LABEL: {{^}}local_sextload_v4i16_to_v4i64:
537define void @local_sextload_v4i16_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
538  %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
539  %ext = sext <4 x i16> %load to <4 x i64>
540  store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
541  ret void
542}
543
544; FUNC-LABEL: {{^}}local_zextload_v8i16_to_v8i64:
545define void @local_zextload_v8i16_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
546  %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
547  %ext = zext <8 x i16> %load to <8 x i64>
548  store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
549  ret void
550}
551
552; FUNC-LABEL: {{^}}local_sextload_v8i16_to_v8i64:
553define void @local_sextload_v8i16_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
554  %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
555  %ext = sext <8 x i16> %load to <8 x i64>
556  store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
557  ret void
558}
559
560; FUNC-LABEL: {{^}}local_zextload_v16i16_to_v16i64:
561define void @local_zextload_v16i16_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
562  %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
563  %ext = zext <16 x i16> %load to <16 x i64>
564  store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
565  ret void
566}
567
568; FUNC-LABEL: {{^}}local_sextload_v16i16_to_v16i64:
569define void @local_sextload_v16i16_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
570  %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
571  %ext = sext <16 x i16> %load to <16 x i64>
572  store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
573  ret void
574}
575
576; FUNC-LABEL: {{^}}local_zextload_v32i16_to_v32i64:
577define void @local_zextload_v32i16_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
578  %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
579  %ext = zext <32 x i16> %load to <32 x i64>
580  store <32 x i64> %ext, <32 x i64> addrspace(3)* %out
581  ret void
582}
583
584; FUNC-LABEL: {{^}}local_sextload_v32i16_to_v32i64:
585define void @local_sextload_v32i16_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
586  %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
587  %ext = sext <32 x i16> %load to <32 x i64>
588  store <32 x i64> %ext, <32 x i64> addrspace(3)* %out
589  ret void
590}
591
592; ; XFUNC-LABEL: {{^}}local_zextload_v64i16_to_v64i64:
593; define void @local_zextload_v64i16_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
594;   %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
595;   %ext = zext <64 x i16> %load to <64 x i64>
596;   store <64 x i64> %ext, <64 x i64> addrspace(3)* %out
597;   ret void
598; }
599
600; ; XFUNC-LABEL: {{^}}local_sextload_v64i16_to_v64i64:
601; define void @local_sextload_v64i16_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
602;   %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
603;   %ext = sext <64 x i16> %load to <64 x i64>
604;   store <64 x i64> %ext, <64 x i64> addrspace(3)* %out
605;   ret void
606; }
607
608attributes #0 = { nounwind }
609