1; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-NOHSA -check-prefix=FUNC %s
2; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=kaveri -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-HSA -check-prefix=FUNC %s
3; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-NOHSA -check-prefix=FUNC %s
4; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
5
6; FUNC-LABEL: {{^}}constant_load_i16:
7; GCN-NOHSA: buffer_load_ushort v{{[0-9]+}}
8; GCN-HSA: flat_load_ushort
9
10; EG: VTX_READ_16 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0
11define void @constant_load_i16(i16 addrspace(1)* %out, i16 addrspace(2)* %in) {
12entry:
13  %ld = load i16, i16 addrspace(2)* %in
14  store i16 %ld, i16 addrspace(1)* %out
15  ret void
16}
17
18; FUNC-LABEL: {{^}}constant_load_v2i16:
19; GCN: s_load_dword s
20
21; EG: VTX_READ_32
22define void @constant_load_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) {
23entry:
24  %ld = load <2 x i16>, <2 x i16> addrspace(2)* %in
25  store <2 x i16> %ld, <2 x i16> addrspace(1)* %out
26  ret void
27}
28
29; FUNC-LABEL: {{^}}constant_load_v3i16:
30; GCN: s_load_dwordx2 s
31
32; EG-DAG: VTX_READ_32
33; EG-DAG: VTX_READ_16
34define void @constant_load_v3i16(<3 x i16> addrspace(1)* %out, <3 x i16> addrspace(2)* %in) {
35entry:
36  %ld = load <3 x i16>, <3 x i16> addrspace(2)* %in
37  store <3 x i16> %ld, <3 x i16> addrspace(1)* %out
38  ret void
39}
40
41; FUNC-LABEL: {{^}}constant_load_v4i16:
42; GCN: s_load_dwordx2
43
44; EG: VTX_READ_64
45define void @constant_load_v4i16(<4 x i16> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) {
46entry:
47  %ld = load <4 x i16>, <4 x i16> addrspace(2)* %in
48  store <4 x i16> %ld, <4 x i16> addrspace(1)* %out
49  ret void
50}
51
52; FUNC-LABEL: {{^}}constant_load_v8i16:
53; GCN: s_load_dwordx4
54
55; EG: VTX_READ_128
56define void @constant_load_v8i16(<8 x i16> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) {
57entry:
58  %ld = load <8 x i16>, <8 x i16> addrspace(2)* %in
59  store <8 x i16> %ld, <8 x i16> addrspace(1)* %out
60  ret void
61}
62
63; FUNC-LABEL: {{^}}constant_load_v16i16:
64; GCN: s_load_dwordx8
65
66; EG: VTX_READ_128
67; EG: VTX_READ_128
68define void @constant_load_v16i16(<16 x i16> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) {
69entry:
70  %ld = load <16 x i16>, <16 x i16> addrspace(2)* %in
71  store <16 x i16> %ld, <16 x i16> addrspace(1)* %out
72  ret void
73}
74
75; FUNC-LABEL: {{^}}constant_zextload_i16_to_i32:
76; GCN-NOHSA: buffer_load_ushort
77; GCN-NOHSA: buffer_store_dword
78
79; GCN-HSA: flat_load_ushort
80; GCN-HSA: flat_store_dword
81
82; EG: VTX_READ_16 T{{[0-9]+\.X, T[0-9]+\.X}}
83define void @constant_zextload_i16_to_i32(i32 addrspace(1)* %out, i16 addrspace(2)* %in) #0 {
84  %a = load i16, i16 addrspace(2)* %in
85  %ext = zext i16 %a to i32
86  store i32 %ext, i32 addrspace(1)* %out
87  ret void
88}
89
90; FUNC-LABEL: {{^}}constant_sextload_i16_to_i32:
91; GCN-NOHSA: buffer_load_sshort
92; GCN-NOHSA: buffer_store_dword
93
94; GCN-HSA: flat_load_sshort
95; GCN-HSA: flat_store_dword
96
97; EG: VTX_READ_16 [[DST:T[0-9]\.[XYZW]]], [[DST]]
98; EG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST]], 0.0, literal
99; EG: 16
100define void @constant_sextload_i16_to_i32(i32 addrspace(1)* %out, i16 addrspace(2)* %in) #0 {
101  %a = load i16, i16 addrspace(2)* %in
102  %ext = sext i16 %a to i32
103  store i32 %ext, i32 addrspace(1)* %out
104  ret void
105}
106
107; FUNC-LABEL: {{^}}constant_zextload_v1i16_to_v1i32:
108; GCN-NOHSA: buffer_load_ushort
109; GCN-HSA: flat_load_ushort
110define void @constant_zextload_v1i16_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i16> addrspace(2)* %in) #0 {
111  %load = load <1 x i16>, <1 x i16> addrspace(2)* %in
112  %ext = zext <1 x i16> %load to <1 x i32>
113  store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
114  ret void
115}
116
117; FUNC-LABEL: {{^}}constant_sextload_v1i16_to_v1i32:
118; GCN-NOHSA: buffer_load_sshort
119; GCN-HSA: flat_load_sshort
120define void @constant_sextload_v1i16_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i16> addrspace(2)* %in) #0 {
121  %load = load <1 x i16>, <1 x i16> addrspace(2)* %in
122  %ext = sext <1 x i16> %load to <1 x i32>
123  store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
124  ret void
125}
126
127; FUNC-LABEL: {{^}}constant_zextload_v2i16_to_v2i32:
128; GCN-NOHSA: buffer_load_ushort
129; GCN-NOHSA: buffer_load_ushort
130; GCN-HSA: flat_load_ushort
131; GCN-HSA: flat_load_ushort
132define void @constant_zextload_v2i16_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) #0 {
133  %load = load <2 x i16>, <2 x i16> addrspace(2)* %in
134  %ext = zext <2 x i16> %load to <2 x i32>
135  store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
136  ret void
137}
138
139; FUNC-LABEL: {{^}}constant_sextload_v2i16_to_v2i32:
140; GCN-NOHSA: buffer_load_sshort
141; GCN-NOHSA: buffer_load_sshort
142
143; GCN-HSA: flat_load_sshort
144; GCN-HSA: flat_load_sshort
145
146; EG-DAG: VTX_READ_16 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]]
147; EG-DAG: VTX_READ_16 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]]
148; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal
149; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal
150; EG-DAG: 16
151; EG-DAG: 16
152define void @constant_sextload_v2i16_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) #0 {
153  %load = load <2 x i16>, <2 x i16> addrspace(2)* %in
154  %ext = sext <2 x i16> %load to <2 x i32>
155  store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
156  ret void
157}
158
159; FUNC-LABEL: {{^}}constant_constant_zextload_v3i16_to_v3i32:
160; GCN: s_load_dwordx2
161define void @constant_constant_zextload_v3i16_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i16> addrspace(2)* %in) {
162entry:
163  %ld = load <3 x i16>, <3 x i16> addrspace(2)* %in
164  %ext = zext <3 x i16> %ld to <3 x i32>
165  store <3 x i32> %ext, <3 x i32> addrspace(1)* %out
166  ret void
167}
168
169; FUNC-LABEL: {{^}}constant_constant_sextload_v3i16_to_v3i32:
170; GCN: s_load_dwordx2
171define void @constant_constant_sextload_v3i16_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i16> addrspace(2)* %in) {
172entry:
173  %ld = load <3 x i16>, <3 x i16> addrspace(2)* %in
174  %ext = sext <3 x i16> %ld to <3 x i32>
175  store <3 x i32> %ext, <3 x i32> addrspace(1)* %out
176  ret void
177}
178
179; FUNC-LABEL: {{^}}constant_constant_zextload_v4i16_to_v4i32:
180; GCN-NOHSA: buffer_load_ushort
181; GCN-NOHSA: buffer_load_ushort
182; GCN-NOHSA: buffer_load_ushort
183; GCN-NOHSA: buffer_load_ushort
184
185; GCN-HSA: flat_load_ushort
186; GCN-HSA: flat_load_ushort
187; GCN-HSA: flat_load_ushort
188; GCN-HSA: flat_load_ushort
189
190; EG: VTX_READ_16
191; EG: VTX_READ_16
192; EG: VTX_READ_16
193; EG: VTX_READ_16
194define void @constant_constant_zextload_v4i16_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) #0 {
195  %load = load <4 x i16>, <4 x i16> addrspace(2)* %in
196  %ext = zext <4 x i16> %load to <4 x i32>
197  store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
198  ret void
199}
200
201; FUNC-LABEL: {{^}}constant_sextload_v4i16_to_v4i32:
202; GCN-NOHSA: buffer_load_sshort
203; GCN-NOHSA: buffer_load_sshort
204; GCN-NOHSA: buffer_load_sshort
205; GCN-NOHSA: buffer_load_sshort
206
207; GCN-HSA: flat_load_sshort
208; GCN-HSA: flat_load_sshort
209; GCN-HSA: flat_load_sshort
210; GCN-HSA: flat_load_sshort
211
212; EG-DAG: VTX_READ_16 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]]
213; EG-DAG: VTX_READ_16 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]]
214; EG-DAG: VTX_READ_16 [[DST_Z:T[0-9]\.[XYZW]]], [[DST_Z]]
215; EG-DAG: VTX_READ_16 [[DST_W:T[0-9]\.[XYZW]]], [[DST_W]]
216; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal
217; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal
218; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Z]], 0.0, literal
219; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_W]], 0.0, literal
220; EG-DAG: 16
221; EG-DAG: 16
222; EG-DAG: 16
223; EG-DAG: 16
224define void @constant_sextload_v4i16_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) #0 {
225  %load = load <4 x i16>, <4 x i16> addrspace(2)* %in
226  %ext = sext <4 x i16> %load to <4 x i32>
227  store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
228  ret void
229}
230
231; FUNC-LABEL: {{^}}constant_zextload_v8i16_to_v8i32:
232; GCN-NOHSA: buffer_load_ushort
233; GCN-NOHSA: buffer_load_ushort
234; GCN-NOHSA: buffer_load_ushort
235; GCN-NOHSA: buffer_load_ushort
236; GCN-NOHSA: buffer_load_ushort
237; GCN-NOHSA: buffer_load_ushort
238; GCN-NOHSA: buffer_load_ushort
239; GCN-NOHSA: buffer_load_ushort
240
241; GCN-HSA: flat_load_ushort
242; GCN-HSA: flat_load_ushort
243; GCN-HSA: flat_load_ushort
244; GCN-HSA: flat_load_ushort
245; GCN-HSA: flat_load_ushort
246; GCN-HSA: flat_load_ushort
247; GCN-HSA: flat_load_ushort
248; GCN-HSA: flat_load_ushort
249define void @constant_zextload_v8i16_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) #0 {
250  %load = load <8 x i16>, <8 x i16> addrspace(2)* %in
251  %ext = zext <8 x i16> %load to <8 x i32>
252  store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
253  ret void
254}
255
256; FUNC-LABEL: {{^}}constant_sextload_v8i16_to_v8i32:
257; GCN-NOHSA: buffer_load_sshort
258; GCN-NOHSA: buffer_load_sshort
259; GCN-NOHSA: buffer_load_sshort
260; GCN-NOHSA: buffer_load_sshort
261; GCN-NOHSA: buffer_load_sshort
262; GCN-NOHSA: buffer_load_sshort
263; GCN-NOHSA: buffer_load_sshort
264; GCN-NOHSA: buffer_load_sshort
265
266; GCN-HSA: flat_load_sshort
267; GCN-HSA: flat_load_sshort
268; GCN-HSA: flat_load_sshort
269; GCN-HSA: flat_load_sshort
270; GCN-HSA: flat_load_sshort
271; GCN-HSA: flat_load_sshort
272; GCN-HSA: flat_load_sshort
273; GCN-HSA: flat_load_sshort
274define void @constant_sextload_v8i16_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) #0 {
275  %load = load <8 x i16>, <8 x i16> addrspace(2)* %in
276  %ext = sext <8 x i16> %load to <8 x i32>
277  store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
278  ret void
279}
280
281; FUNC-LABEL: {{^}}constant_zextload_v16i16_to_v16i32:
282; GCN-NOHSA: buffer_load_ushort
283; GCN-NOHSA: buffer_load_ushort
284; GCN-NOHSA: buffer_load_ushort
285; GCN-NOHSA: buffer_load_ushort
286; GCN-NOHSA: buffer_load_ushort
287; GCN-NOHSA: buffer_load_ushort
288; GCN-NOHSA: buffer_load_ushort
289; GCN-NOHSA: buffer_load_ushort
290; GCN-NOHSA: buffer_load_ushort
291; GCN-NOHSA: buffer_load_ushort
292; GCN-NOHSA: buffer_load_ushort
293; GCN-NOHSA: buffer_load_ushort
294; GCN-NOHSA: buffer_load_ushort
295; GCN-NOHSA: buffer_load_ushort
296; GCN-NOHSA: buffer_load_ushort
297; GCN-NOHSA: buffer_load_ushort
298
299; GCN-HSA: flat_load_ushort
300; GCN-HSA: flat_load_ushort
301; GCN-HSA: flat_load_ushort
302; GCN-HSA: flat_load_ushort
303; GCN-HSA: flat_load_ushort
304; GCN-HSA: flat_load_ushort
305; GCN-HSA: flat_load_ushort
306; GCN-HSA: flat_load_ushort
307; GCN-HSA: flat_load_ushort
308; GCN-HSA: flat_load_ushort
309; GCN-HSA: flat_load_ushort
310; GCN-HSA: flat_load_ushort
311; GCN-HSA: flat_load_ushort
312; GCN-HSA: flat_load_ushort
313; GCN-HSA: flat_load_ushort
314; GCN-HSA: flat_load_ushort
315define void @constant_zextload_v16i16_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) #0 {
316  %load = load <16 x i16>, <16 x i16> addrspace(2)* %in
317  %ext = zext <16 x i16> %load to <16 x i32>
318  store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
319  ret void
320}
321
322; FUNC-LABEL: {{^}}constant_sextload_v16i16_to_v16i32:
323define void @constant_sextload_v16i16_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) #0 {
324  %load = load <16 x i16>, <16 x i16> addrspace(2)* %in
325  %ext = sext <16 x i16> %load to <16 x i32>
326  store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
327  ret void
328}
329
330; FUNC-LABEL: {{^}}constant_zextload_v32i16_to_v32i32:
331; GCN-NOHSA: buffer_load_ushort
332; GCN-NOHSA: buffer_load_ushort
333; GCN-NOHSA: buffer_load_ushort
334; GCN-NOHSA: buffer_load_ushort
335; GCN-NOHSA: buffer_load_ushort
336; GCN-NOHSA: buffer_load_ushort
337; GCN-NOHSA: buffer_load_ushort
338; GCN-NOHSA: buffer_load_ushort
339; GCN-NOHSA: buffer_load_ushort
340; GCN-NOHSA: buffer_load_ushort
341; GCN-NOHSA: buffer_load_ushort
342; GCN-NOHSA: buffer_load_ushort
343; GCN-NOHSA: buffer_load_ushort
344; GCN-NOHSA: buffer_load_ushort
345; GCN-NOHSA: buffer_load_ushort
346; GCN-NOHSA: buffer_load_ushort
347; GCN-NOHSA: buffer_load_ushort
348; GCN-NOHSA: buffer_load_ushort
349; GCN-NOHSA: buffer_load_ushort
350; GCN-NOHSA: buffer_load_ushort
351; GCN-NOHSA: buffer_load_ushort
352; GCN-NOHSA: buffer_load_ushort
353; GCN-NOHSA: buffer_load_ushort
354; GCN-NOHSA: buffer_load_ushort
355; GCN-NOHSA: buffer_load_ushort
356; GCN-NOHSA: buffer_load_ushort
357; GCN-NOHSA: buffer_load_ushort
358; GCN-NOHSA: buffer_load_ushort
359; GCN-NOHSA: buffer_load_ushort
360; GCN-NOHSA: buffer_load_ushort
361; GCN-NOHSA: buffer_load_ushort
362; GCN-NOHSA: buffer_load_ushort
363
364; GCN-HSA: flat_load_ushort
365; GCN-HSA: flat_load_ushort
366; GCN-HSA: flat_load_ushort
367; GCN-HSA: flat_load_ushort
368; GCN-HSA: flat_load_ushort
369; GCN-HSA: flat_load_ushort
370; GCN-HSA: flat_load_ushort
371; GCN-HSA: flat_load_ushort
372; GCN-HSA: flat_load_ushort
373; GCN-HSA: flat_load_ushort
374; GCN-HSA: flat_load_ushort
375; GCN-HSA: flat_load_ushort
376; GCN-HSA: flat_load_ushort
377; GCN-HSA: flat_load_ushort
378; GCN-HSA: flat_load_ushort
379; GCN-HSA: flat_load_ushort
380; GCN-HSA: flat_load_ushort
381; GCN-HSA: flat_load_ushort
382; GCN-HSA: flat_load_ushort
383; GCN-HSA: flat_load_ushort
384; GCN-HSA: flat_load_ushort
385; GCN-HSA: flat_load_ushort
386; GCN-HSA: flat_load_ushort
387; GCN-HSA: flat_load_ushort
388; GCN-HSA: flat_load_ushort
389; GCN-HSA: flat_load_ushort
390; GCN-HSA: flat_load_ushort
391; GCN-HSA: flat_load_ushort
392; GCN-HSA: flat_load_ushort
393; GCN-HSA: flat_load_ushort
394; GCN-HSA: flat_load_ushort
395; GCN-HSA: flat_load_ushort
396define void @constant_zextload_v32i16_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i16> addrspace(2)* %in) #0 {
397  %load = load <32 x i16>, <32 x i16> addrspace(2)* %in
398  %ext = zext <32 x i16> %load to <32 x i32>
399  store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
400  ret void
401}
402
403; FUNC-LABEL: {{^}}constant_sextload_v32i16_to_v32i32:
404; GCN-NOHSA: buffer_load_sshort
405; GCN-NOHSA: buffer_load_sshort
406; GCN-NOHSA: buffer_load_sshort
407; GCN-NOHSA: buffer_load_sshort
408; GCN-NOHSA: buffer_load_sshort
409; GCN-NOHSA: buffer_load_sshort
410; GCN-NOHSA: buffer_load_sshort
411; GCN-NOHSA: buffer_load_sshort
412; GCN-NOHSA: buffer_load_sshort
413; GCN-NOHSA: buffer_load_sshort
414; GCN-NOHSA: buffer_load_sshort
415; GCN-NOHSA: buffer_load_sshort
416; GCN-NOHSA: buffer_load_sshort
417; GCN-NOHSA: buffer_load_sshort
418; GCN-NOHSA: buffer_load_sshort
419; GCN-NOHSA: buffer_load_sshort
420; GCN-NOHSA: buffer_load_sshort
421; GCN-NOHSA: buffer_load_sshort
422; GCN-NOHSA: buffer_load_sshort
423; GCN-NOHSA: buffer_load_sshort
424; GCN-NOHSA: buffer_load_sshort
425; GCN-NOHSA: buffer_load_sshort
426; GCN-NOHSA: buffer_load_sshort
427; GCN-NOHSA: buffer_load_sshort
428; GCN-NOHSA: buffer_load_sshort
429; GCN-NOHSA: buffer_load_sshort
430; GCN-NOHSA: buffer_load_sshort
431; GCN-NOHSA: buffer_load_sshort
432; GCN-NOHSA: buffer_load_sshort
433; GCN-NOHSA: buffer_load_sshort
434; GCN-NOHSA: buffer_load_sshort
435; GCN-NOHSA: buffer_load_sshort
436
437; GCN-HSA: flat_load_sshort
438; GCN-HSA: flat_load_sshort
439; GCN-HSA: flat_load_sshort
440; GCN-HSA: flat_load_sshort
441; GCN-HSA: flat_load_sshort
442; GCN-HSA: flat_load_sshort
443; GCN-HSA: flat_load_sshort
444; GCN-HSA: flat_load_sshort
445; GCN-HSA: flat_load_sshort
446; GCN-HSA: flat_load_sshort
447; GCN-HSA: flat_load_sshort
448; GCN-HSA: flat_load_sshort
449; GCN-HSA: flat_load_sshort
450; GCN-HSA: flat_load_sshort
451; GCN-HSA: flat_load_sshort
452; GCN-HSA: flat_load_sshort
453; GCN-HSA: flat_load_sshort
454; GCN-HSA: flat_load_sshort
455; GCN-HSA: flat_load_sshort
456; GCN-HSA: flat_load_sshort
457; GCN-HSA: flat_load_sshort
458; GCN-HSA: flat_load_sshort
459; GCN-HSA: flat_load_sshort
460; GCN-HSA: flat_load_sshort
461; GCN-HSA: flat_load_sshort
462; GCN-HSA: flat_load_sshort
463; GCN-HSA: flat_load_sshort
464; GCN-HSA: flat_load_sshort
465; GCN-HSA: flat_load_sshort
466; GCN-HSA: flat_load_sshort
467; GCN-HSA: flat_load_sshort
468; GCN-HSA: flat_load_sshort
469define void @constant_sextload_v32i16_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i16> addrspace(2)* %in) #0 {
470  %load = load <32 x i16>, <32 x i16> addrspace(2)* %in
471  %ext = sext <32 x i16> %load to <32 x i32>
472  store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
473  ret void
474}
475
476; FUNC-LABEL: {{^}}constant_zextload_v64i16_to_v64i32:
477; GCN-NOHSA: buffer_load_ushort
478; GCN-NOHSA: buffer_load_ushort
479; GCN-NOHSA: buffer_load_ushort
480; GCN-NOHSA: buffer_load_ushort
481; GCN-NOHSA: buffer_load_ushort
482; GCN-NOHSA: buffer_load_ushort
483; GCN-NOHSA: buffer_load_ushort
484; GCN-NOHSA: buffer_load_ushort
485; GCN-NOHSA: buffer_load_ushort
486; GCN-NOHSA: buffer_load_ushort
487; GCN-NOHSA: buffer_load_ushort
488; GCN-NOHSA: buffer_load_ushort
489; GCN-NOHSA: buffer_load_ushort
490; GCN-NOHSA: buffer_load_ushort
491; GCN-NOHSA: buffer_load_ushort
492; GCN-NOHSA: buffer_load_ushort
493; GCN-NOHSA: buffer_load_ushort
494; GCN-NOHSA: buffer_load_ushort
495; GCN-NOHSA: buffer_load_ushort
496; GCN-NOHSA: buffer_load_ushort
497; GCN-NOHSA: buffer_load_ushort
498; GCN-NOHSA: buffer_load_ushort
499; GCN-NOHSA: buffer_load_ushort
500; GCN-NOHSA: buffer_load_ushort
501; GCN-NOHSA: buffer_load_ushort
502; GCN-NOHSA: buffer_load_ushort
503; GCN-NOHSA: buffer_load_ushort
504; GCN-NOHSA: buffer_load_ushort
505; GCN-NOHSA: buffer_load_ushort
506; GCN-NOHSA: buffer_load_ushort
507; GCN-NOHSA: buffer_load_ushort
508; GCN-NOHSA: buffer_load_ushort
509; GCN-NOHSA: buffer_load_ushort
510; GCN-NOHSA: buffer_load_ushort
511; GCN-NOHSA: buffer_load_ushort
512; GCN-NOHSA: buffer_load_ushort
513; GCN-NOHSA: buffer_load_ushort
514; GCN-NOHSA: buffer_load_ushort
515; GCN-NOHSA: buffer_load_ushort
516; GCN-NOHSA: buffer_load_ushort
517; GCN-NOHSA: buffer_load_ushort
518; GCN-NOHSA: buffer_load_ushort
519; GCN-NOHSA: buffer_load_ushort
520; GCN-NOHSA: buffer_load_ushort
521; GCN-NOHSA: buffer_load_ushort
522; GCN-NOHSA: buffer_load_ushort
523; GCN-NOHSA: buffer_load_ushort
524; GCN-NOHSA: buffer_load_ushort
525; GCN-NOHSA: buffer_load_ushort
526; GCN-NOHSA: buffer_load_ushort
527; GCN-NOHSA: buffer_load_ushort
528; GCN-NOHSA: buffer_load_ushort
529; GCN-NOHSA: buffer_load_ushort
530; GCN-NOHSA: buffer_load_ushort
531; GCN-NOHSA: buffer_load_ushort
532; GCN-NOHSA: buffer_load_ushort
533; GCN-NOHSA: buffer_load_ushort
534; GCN-NOHSA: buffer_load_ushort
535; GCN-NOHSA: buffer_load_ushort
536; GCN-NOHSA: buffer_load_ushort
537; GCN-NOHSA: buffer_load_ushort
538; GCN-NOHSA: buffer_load_ushort
539; GCN-NOHSA: buffer_load_ushort
540; GCN-NOHSA: buffer_load_ushort
541
542; GCN-HSA: flat_load_ushort
543; GCN-HSA: flat_load_ushort
544; GCN-HSA: flat_load_ushort
545; GCN-HSA: flat_load_ushort
546; GCN-HSA: flat_load_ushort
547; GCN-HSA: flat_load_ushort
548; GCN-HSA: flat_load_ushort
549; GCN-HSA: flat_load_ushort
550; GCN-HSA: flat_load_ushort
551; GCN-HSA: flat_load_ushort
552; GCN-HSA: flat_load_ushort
553; GCN-HSA: flat_load_ushort
554; GCN-HSA: flat_load_ushort
555; GCN-HSA: flat_load_ushort
556; GCN-HSA: flat_load_ushort
557; GCN-HSA: flat_load_ushort
558; GCN-HSA: flat_load_ushort
559; GCN-HSA: flat_load_ushort
560; GCN-HSA: flat_load_ushort
561; GCN-HSA: flat_load_ushort
562; GCN-HSA: flat_load_ushort
563; GCN-HSA: flat_load_ushort
564; GCN-HSA: flat_load_ushort
565; GCN-HSA: flat_load_ushort
566; GCN-HSA: flat_load_ushort
567; GCN-HSA: flat_load_ushort
568; GCN-HSA: flat_load_ushort
569; GCN-HSA: flat_load_ushort
570; GCN-HSA: flat_load_ushort
571; GCN-HSA: flat_load_ushort
572; GCN-HSA: flat_load_ushort
573; GCN-HSA: flat_load_ushort
574; GCN-HSA: flat_load_ushort
575; GCN-HSA: flat_load_ushort
576; GCN-HSA: flat_load_ushort
577; GCN-HSA: flat_load_ushort
578; GCN-HSA: flat_load_ushort
579; GCN-HSA: flat_load_ushort
580; GCN-HSA: flat_load_ushort
581; GCN-HSA: flat_load_ushort
582; GCN-HSA: flat_load_ushort
583; GCN-HSA: flat_load_ushort
584; GCN-HSA: flat_load_ushort
585; GCN-HSA: flat_load_ushort
586; GCN-HSA: flat_load_ushort
587; GCN-HSA: flat_load_ushort
588; GCN-HSA: flat_load_ushort
589; GCN-HSA: flat_load_ushort
590; GCN-HSA: flat_load_ushort
591; GCN-HSA: flat_load_ushort
592; GCN-HSA: flat_load_ushort
593; GCN-HSA: flat_load_ushort
594; GCN-HSA: flat_load_ushort
595; GCN-HSA: flat_load_ushort
596; GCN-HSA: flat_load_ushort
597; GCN-HSA: flat_load_ushort
598; GCN-HSA: flat_load_ushort
599; GCN-HSA: flat_load_ushort
600; GCN-HSA: flat_load_ushort
601; GCN-HSA: flat_load_ushort
602; GCN-HSA: flat_load_ushort
603; GCN-HSA: flat_load_ushort
604; GCN-HSA: flat_load_ushort
605; GCN-HSA: flat_load_ushort
606define void @constant_zextload_v64i16_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i16> addrspace(2)* %in) #0 {
607  %load = load <64 x i16>, <64 x i16> addrspace(2)* %in
608  %ext = zext <64 x i16> %load to <64 x i32>
609  store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
610  ret void
611}
612
613; FUNC-LABEL: {{^}}constant_sextload_v64i16_to_v64i32:
614define void @constant_sextload_v64i16_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i16> addrspace(2)* %in) #0 {
615  %load = load <64 x i16>, <64 x i16> addrspace(2)* %in
616  %ext = sext <64 x i16> %load to <64 x i32>
617  store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
618  ret void
619}
620
621; FUNC-LABEL: {{^}}constant_zextload_i16_to_i64:
622; GCN-NOHSA-DAG: buffer_load_ushort v[[LO:[0-9]+]],
623; GCN-HSA-DAG: flat_load_ushort v[[LO:[0-9]+]],
624; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
625
626; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]]
627; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]{{\]}}
628define void @constant_zextload_i16_to_i64(i64 addrspace(1)* %out, i16 addrspace(2)* %in) #0 {
629  %a = load i16, i16 addrspace(2)* %in
630  %ext = zext i16 %a to i64
631  store i64 %ext, i64 addrspace(1)* %out
632  ret void
633}
634
635; FUNC-LABEL: {{^}}constant_sextload_i16_to_i64:
636; GCN-NOHSA-DAG: buffer_load_sshort v[[LO:[0-9]+]],
637; GCN-HSA-DAG: flat_load_sshort v[[LO:[0-9]+]],
638; GCN-DAG: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]]
639
640; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]]
641; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]{{\]}}
642define void @constant_sextload_i16_to_i64(i64 addrspace(1)* %out, i16 addrspace(2)* %in) #0 {
643  %a = load i16, i16 addrspace(2)* %in
644  %ext = sext i16 %a to i64
645  store i64 %ext, i64 addrspace(1)* %out
646  ret void
647}
648
649; FUNC-LABEL: {{^}}constant_zextload_v1i16_to_v1i64:
650define void @constant_zextload_v1i16_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i16> addrspace(2)* %in) #0 {
651  %load = load <1 x i16>, <1 x i16> addrspace(2)* %in
652  %ext = zext <1 x i16> %load to <1 x i64>
653  store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
654  ret void
655}
656
657; FUNC-LABEL: {{^}}constant_sextload_v1i16_to_v1i64:
658define void @constant_sextload_v1i16_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i16> addrspace(2)* %in) #0 {
659  %load = load <1 x i16>, <1 x i16> addrspace(2)* %in
660  %ext = sext <1 x i16> %load to <1 x i64>
661  store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
662  ret void
663}
664
665; FUNC-LABEL: {{^}}constant_zextload_v2i16_to_v2i64:
666define void @constant_zextload_v2i16_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) #0 {
667  %load = load <2 x i16>, <2 x i16> addrspace(2)* %in
668  %ext = zext <2 x i16> %load to <2 x i64>
669  store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
670  ret void
671}
672
673; FUNC-LABEL: {{^}}constant_sextload_v2i16_to_v2i64:
674define void @constant_sextload_v2i16_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i16> addrspace(2)* %in) #0 {
675  %load = load <2 x i16>, <2 x i16> addrspace(2)* %in
676  %ext = sext <2 x i16> %load to <2 x i64>
677  store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
678  ret void
679}
680
681; FUNC-LABEL: {{^}}constant_zextload_v4i16_to_v4i64:
682define void @constant_zextload_v4i16_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) #0 {
683  %load = load <4 x i16>, <4 x i16> addrspace(2)* %in
684  %ext = zext <4 x i16> %load to <4 x i64>
685  store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
686  ret void
687}
688
689; FUNC-LABEL: {{^}}constant_sextload_v4i16_to_v4i64:
690define void @constant_sextload_v4i16_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i16> addrspace(2)* %in) #0 {
691  %load = load <4 x i16>, <4 x i16> addrspace(2)* %in
692  %ext = sext <4 x i16> %load to <4 x i64>
693  store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
694  ret void
695}
696
697; FUNC-LABEL: {{^}}constant_zextload_v8i16_to_v8i64:
698define void @constant_zextload_v8i16_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) #0 {
699  %load = load <8 x i16>, <8 x i16> addrspace(2)* %in
700  %ext = zext <8 x i16> %load to <8 x i64>
701  store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
702  ret void
703}
704
705; FUNC-LABEL: {{^}}constant_sextload_v8i16_to_v8i64:
706define void @constant_sextload_v8i16_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i16> addrspace(2)* %in) #0 {
707  %load = load <8 x i16>, <8 x i16> addrspace(2)* %in
708  %ext = sext <8 x i16> %load to <8 x i64>
709  store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
710  ret void
711}
712
713; FUNC-LABEL: {{^}}constant_zextload_v16i16_to_v16i64:
714define void @constant_zextload_v16i16_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) #0 {
715  %load = load <16 x i16>, <16 x i16> addrspace(2)* %in
716  %ext = zext <16 x i16> %load to <16 x i64>
717  store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
718  ret void
719}
720
721; FUNC-LABEL: {{^}}constant_sextload_v16i16_to_v16i64:
722define void @constant_sextload_v16i16_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i16> addrspace(2)* %in) #0 {
723  %load = load <16 x i16>, <16 x i16> addrspace(2)* %in
724  %ext = sext <16 x i16> %load to <16 x i64>
725  store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
726  ret void
727}
728
729; FUNC-LABEL: {{^}}constant_zextload_v32i16_to_v32i64:
730define void @constant_zextload_v32i16_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i16> addrspace(2)* %in) #0 {
731  %load = load <32 x i16>, <32 x i16> addrspace(2)* %in
732  %ext = zext <32 x i16> %load to <32 x i64>
733  store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
734  ret void
735}
736
737; FUNC-LABEL: {{^}}constant_sextload_v32i16_to_v32i64:
738define void @constant_sextload_v32i16_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i16> addrspace(2)* %in) #0 {
739  %load = load <32 x i16>, <32 x i16> addrspace(2)* %in
740  %ext = sext <32 x i16> %load to <32 x i64>
741  store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
742  ret void
743}
744
745; ; XFUNC-LABEL: {{^}}constant_zextload_v64i16_to_v64i64:
746; define void @constant_zextload_v64i16_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i16> addrspace(2)* %in) #0 {
747;   %load = load <64 x i16>, <64 x i16> addrspace(2)* %in
748;   %ext = zext <64 x i16> %load to <64 x i64>
749;   store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
750;   ret void
751; }
752
753; ; XFUNC-LABEL: {{^}}constant_sextload_v64i16_to_v64i64:
754; define void @constant_sextload_v64i16_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i16> addrspace(2)* %in) #0 {
755;   %load = load <64 x i16>, <64 x i16> addrspace(2)* %in
756;   %ext = sext <64 x i16> %load to <64 x i64>
757;   store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
758;   ret void
759; }
760
761attributes #0 = { nounwind }
762