blob: c0550c1ef384f22a900008ba2461c41c735ff281 [file] [log] [blame]
Matt Arsenaultd1097a32016-06-02 19:54:26 +00001; 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
7; FUNC-LABEL: {{^}}constant_load_i8:
8; GCN-NOHSA: buffer_load_ubyte v{{[0-9]+}}
9; GCN-HSA: flat_load_ubyte
10
11; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0
12define void @constant_load_i8(i8 addrspace(1)* %out, i8 addrspace(2)* %in) #0 {
13entry:
14 %ld = load i8, i8 addrspace(2)* %in
15 store i8 %ld, i8 addrspace(1)* %out
16 ret void
17}
18
19; FUNC-LABEL: {{^}}constant_load_v2i8:
20; GCN-NOHSA: buffer_load_ushort v
21; GCN-HSA: flat_load_ushort v
22
23; EG: VTX_READ_16
24define void @constant_load_v2i8(<2 x i8> addrspace(1)* %out, <2 x i8> addrspace(2)* %in) #0 {
25entry:
26 %ld = load <2 x i8>, <2 x i8> addrspace(2)* %in
27 store <2 x i8> %ld, <2 x i8> addrspace(1)* %out
28 ret void
29}
30
31; FUNC-LABEL: {{^}}constant_load_v3i8:
32; GCN: s_load_dword s
33
34; EG-DAG: VTX_READ_32
35define void @constant_load_v3i8(<3 x i8> addrspace(1)* %out, <3 x i8> addrspace(2)* %in) #0 {
36entry:
37 %ld = load <3 x i8>, <3 x i8> addrspace(2)* %in
38 store <3 x i8> %ld, <3 x i8> addrspace(1)* %out
39 ret void
40}
41
42; FUNC-LABEL: {{^}}constant_load_v4i8:
43; GCN: s_load_dword s
44
45; EG: VTX_READ_32
46define void @constant_load_v4i8(<4 x i8> addrspace(1)* %out, <4 x i8> addrspace(2)* %in) #0 {
47entry:
48 %ld = load <4 x i8>, <4 x i8> addrspace(2)* %in
49 store <4 x i8> %ld, <4 x i8> addrspace(1)* %out
50 ret void
51}
52
53; FUNC-LABEL: {{^}}constant_load_v8i8:
54; GCN: s_load_dwordx2
55
56; EG: VTX_READ_64
57define void @constant_load_v8i8(<8 x i8> addrspace(1)* %out, <8 x i8> addrspace(2)* %in) #0 {
58entry:
59 %ld = load <8 x i8>, <8 x i8> addrspace(2)* %in
60 store <8 x i8> %ld, <8 x i8> addrspace(1)* %out
61 ret void
62}
63
64; FUNC-LABEL: {{^}}constant_load_v16i8:
65; GCN: s_load_dwordx4
66
67; EG: VTX_READ_128
68define void @constant_load_v16i8(<16 x i8> addrspace(1)* %out, <16 x i8> addrspace(2)* %in) #0 {
69entry:
70 %ld = load <16 x i8>, <16 x i8> addrspace(2)* %in
71 store <16 x i8> %ld, <16 x i8> addrspace(1)* %out
72 ret void
73}
74
75; FUNC-LABEL: {{^}}constant_zextload_i8_to_i32:
76; GCN-NOHSA: buffer_load_ubyte v{{[0-9]+}},
77; GCN-HSA: flat_load_ubyte
78
79; EG: VTX_READ_8 T{{[0-9]+\.X, T[0-9]+\.X}}
80define void @constant_zextload_i8_to_i32(i32 addrspace(1)* %out, i8 addrspace(2)* %in) #0 {
81 %a = load i8, i8 addrspace(2)* %in
82 %ext = zext i8 %a to i32
83 store i32 %ext, i32 addrspace(1)* %out
84 ret void
85}
86
87; FUNC-LABEL: {{^}}constant_sextload_i8_to_i32:
88; GCN-NOHSA: buffer_load_sbyte
89; GCN-HSA: flat_load_sbyte
90
91; EG: VTX_READ_8 [[DST:T[0-9]\.[XYZW]]], [[DST]]
92; EG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST]], 0.0, literal
93; EG: 8
94define void @constant_sextload_i8_to_i32(i32 addrspace(1)* %out, i8 addrspace(2)* %in) #0 {
95 %ld = load i8, i8 addrspace(2)* %in
96 %ext = sext i8 %ld to i32
97 store i32 %ext, i32 addrspace(1)* %out
98 ret void
99}
100
101; FUNC-LABEL: {{^}}constant_zextload_v1i8_to_v1i32:
102define void @constant_zextload_v1i8_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i8> addrspace(2)* %in) #0 {
103 %load = load <1 x i8>, <1 x i8> addrspace(2)* %in
104 %ext = zext <1 x i8> %load to <1 x i32>
105 store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
106 ret void
107}
108
109; FUNC-LABEL: {{^}}constant_sextload_v1i8_to_v1i32:
110define void @constant_sextload_v1i8_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i8> addrspace(2)* %in) #0 {
111 %load = load <1 x i8>, <1 x i8> addrspace(2)* %in
112 %ext = sext <1 x i8> %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_zextload_v2i8_to_v2i32:
118; GCN-NOHSA: buffer_load_ubyte
119; GCN-NOHSA: buffer_load_ubyte
120; GCN-HSA: flat_load_ubyte
121; GCN-HSA: flat_load_ubyte
122; EG: VTX_READ_8
123; EG: VTX_READ_8
124define void @constant_zextload_v2i8_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i8> addrspace(2)* %in) #0 {
125 %load = load <2 x i8>, <2 x i8> addrspace(2)* %in
126 %ext = zext <2 x i8> %load to <2 x i32>
127 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
128 ret void
129}
130
131; FUNC-LABEL: {{^}}constant_sextload_v2i8_to_v2i32:
132; GCN-NOHSA: buffer_load_sbyte
133; GCN-NOHSA: buffer_load_sbyte
134; GCN-HSA: flat_load_sbyte
135; GCN-HSA: flat_load_sbyte
136
137; EG-DAG: VTX_READ_8 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]]
138; EG-DAG: VTX_READ_8 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]]
139; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal
140; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal
141; EG-DAG: 8
142; EG-DAG: 8
143define void @constant_sextload_v2i8_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i8> addrspace(2)* %in) #0 {
144 %load = load <2 x i8>, <2 x i8> addrspace(2)* %in
145 %ext = sext <2 x i8> %load to <2 x i32>
146 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
147 ret void
148}
149
150; FUNC-LABEL: {{^}}constant_zextload_v3i8_to_v3i32:
151; GCN: s_load_dword s
152
153; GCN-DAG: s_bfe_u32
154; GCN-DAG: s_bfe_u32
155; GCN-DAG: s_and_b32
156define void @constant_zextload_v3i8_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i8> addrspace(2)* %in) #0 {
157entry:
158 %ld = load <3 x i8>, <3 x i8> addrspace(2)* %in
159 %ext = zext <3 x i8> %ld to <3 x i32>
160 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out
161 ret void
162}
163
164; FUNC-LABEL: {{^}}constant_sextload_v3i8_to_v3i32:
165; GCN: s_load_dword s
166
167; GCN-DAG: s_bfe_i32
168; GCN-DAG: s_bfe_i32
169; GCN-DAG: s_bfe_i32
170define void @constant_sextload_v3i8_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i8> addrspace(2)* %in) #0 {
171entry:
172 %ld = load <3 x i8>, <3 x i8> addrspace(2)* %in
173 %ext = sext <3 x i8> %ld to <3 x i32>
174 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out
175 ret void
176}
177
178; FUNC-LABEL: {{^}}constant_zextload_v4i8_to_v4i32:
179; GCN-NOHSA: buffer_load_ubyte
180; GCN-NOHSA: buffer_load_ubyte
181; GCN-NOHSA: buffer_load_ubyte
182; GCN-NOHSA: buffer_load_ubyte
183; GCN-HSA: flat_load_ubyte
184; GCN-HSA: flat_load_ubyte
185; GCN-HSA: flat_load_ubyte
186; GCN-HSA: flat_load_ubyte
187
188; EG: VTX_READ_8
189; EG: VTX_READ_8
190; EG: VTX_READ_8
191; EG: VTX_READ_8
192define void @constant_zextload_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(2)* %in) #0 {
193 %load = load <4 x i8>, <4 x i8> addrspace(2)* %in
194 %ext = zext <4 x i8> %load to <4 x i32>
195 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
196 ret void
197}
198
199; FUNC-LABEL: {{^}}constant_sextload_v4i8_to_v4i32:
200; GCN-NOHSA: buffer_load_sbyte
201; GCN-NOHSA: buffer_load_sbyte
202; GCN-NOHSA: buffer_load_sbyte
203; GCN-NOHSA: buffer_load_sbyte
204; GCN-HSA: flat_load_sbyte
205; GCN-HSA: flat_load_sbyte
206; GCN-HSA: flat_load_sbyte
207; GCN-HSA: flat_load_sbyte
208
209; EG-DAG: VTX_READ_8 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]]
210; EG-DAG: VTX_READ_8 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]]
211; EG-DAG: VTX_READ_8 [[DST_Z:T[0-9]\.[XYZW]]], [[DST_Z]]
212; EG-DAG: VTX_READ_8 [[DST_W:T[0-9]\.[XYZW]]], [[DST_W]]
213; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal
214; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal
215; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Z]], 0.0, literal
216; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_W]], 0.0, literal
217; EG-DAG: 8
218; EG-DAG: 8
219; EG-DAG: 8
220; EG-DAG: 8
221define void @constant_sextload_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(2)* %in) #0 {
222 %load = load <4 x i8>, <4 x i8> addrspace(2)* %in
223 %ext = sext <4 x i8> %load to <4 x i32>
224 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
225 ret void
226}
227
228; FUNC-LABEL: {{^}}constant_zextload_v8i8_to_v8i32:
229; GCN-NOHSA: buffer_load_ubyte
230; GCN-NOHSA: buffer_load_ubyte
231; GCN-NOHSA: buffer_load_ubyte
232; GCN-NOHSA: buffer_load_ubyte
233; GCN-NOHSA: buffer_load_ubyte
234; GCN-NOHSA: buffer_load_ubyte
235; GCN-NOHSA: buffer_load_ubyte
236; GCN-NOHSA: buffer_load_ubyte
237
238; GCN-HSA: flat_load_ubyte
239; GCN-HSA: flat_load_ubyte
240; GCN-HSA: flat_load_ubyte
241; GCN-HSA: flat_load_ubyte
242; GCN-HSA: flat_load_ubyte
243; GCN-HSA: flat_load_ubyte
244; GCN-HSA: flat_load_ubyte
245; GCN-HSA: flat_load_ubyte
246define void @constant_zextload_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(2)* %in) #0 {
247 %load = load <8 x i8>, <8 x i8> addrspace(2)* %in
248 %ext = zext <8 x i8> %load to <8 x i32>
249 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
250 ret void
251}
252
253; FUNC-LABEL: {{^}}constant_sextload_v8i8_to_v8i32:
254; GCN-NOHSA: buffer_load_sbyte
255; GCN-NOHSA: buffer_load_sbyte
256; GCN-NOHSA: buffer_load_sbyte
257; GCN-NOHSA: buffer_load_sbyte
258; GCN-NOHSA: buffer_load_sbyte
259; GCN-NOHSA: buffer_load_sbyte
260; GCN-NOHSA: buffer_load_sbyte
261; GCN-NOHSA: buffer_load_sbyte
262
263; GCN-HSA: flat_load_sbyte
264; GCN-HSA: flat_load_sbyte
265; GCN-HSA: flat_load_sbyte
266; GCN-HSA: flat_load_sbyte
267; GCN-HSA: flat_load_sbyte
268; GCN-HSA: flat_load_sbyte
269; GCN-HSA: flat_load_sbyte
270; GCN-HSA: flat_load_sbyte
271define void @constant_sextload_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(2)* %in) #0 {
272 %load = load <8 x i8>, <8 x i8> addrspace(2)* %in
273 %ext = sext <8 x i8> %load to <8 x i32>
274 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
275 ret void
276}
277
278; FUNC-LABEL: {{^}}constant_zextload_v16i8_to_v16i32:
279define void @constant_zextload_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(2)* %in) #0 {
280 %load = load <16 x i8>, <16 x i8> addrspace(2)* %in
281 %ext = zext <16 x i8> %load to <16 x i32>
282 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
283 ret void
284}
285
286; FUNC-LABEL: {{^}}constant_sextload_v16i8_to_v16i32:
287define void @constant_sextload_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(2)* %in) #0 {
288 %load = load <16 x i8>, <16 x i8> addrspace(2)* %in
289 %ext = sext <16 x i8> %load to <16 x i32>
290 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
291 ret void
292}
293
294; FUNC-LABEL: {{^}}constant_zextload_v32i8_to_v32i32:
295define void @constant_zextload_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(2)* %in) #0 {
296 %load = load <32 x i8>, <32 x i8> addrspace(2)* %in
297 %ext = zext <32 x i8> %load to <32 x i32>
298 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
299 ret void
300}
301
302; FUNC-LABEL: {{^}}constant_sextload_v32i8_to_v32i32:
303define void @constant_sextload_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(2)* %in) #0 {
304 %load = load <32 x i8>, <32 x i8> addrspace(2)* %in
305 %ext = sext <32 x i8> %load to <32 x i32>
306 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
307 ret void
308}
309
310; FUNC-LABEL: {{^}}constant_zextload_v64i8_to_v64i32:
311define void @constant_zextload_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(2)* %in) #0 {
312 %load = load <64 x i8>, <64 x i8> addrspace(2)* %in
313 %ext = zext <64 x i8> %load to <64 x i32>
314 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
315 ret void
316}
317
318; FUNC-LABEL: {{^}}constant_sextload_v64i8_to_v64i32:
319define void @constant_sextload_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(2)* %in) #0 {
320 %load = load <64 x i8>, <64 x i8> addrspace(2)* %in
321 %ext = sext <64 x i8> %load to <64 x i32>
322 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
323 ret void
324}
325
326; FUNC-LABEL: {{^}}constant_zextload_i8_to_i64:
327; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
328
329; GCN-NOHSA-DAG: buffer_load_ubyte v[[LO:[0-9]+]],
330; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]]
331
332; GCN-HSA-DAG: flat_load_ubyte v[[LO:[0-9]+]],
333; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]]
334define void @constant_zextload_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(2)* %in) #0 {
335 %a = load i8, i8 addrspace(2)* %in
336 %ext = zext i8 %a to i64
337 store i64 %ext, i64 addrspace(1)* %out
338 ret void
339}
340
341; FUNC-LABEL: {{^}}constant_sextload_i8_to_i64:
342; GCN-NOHSA: buffer_load_sbyte v[[LO:[0-9]+]],
343; GCN-HSA: flat_load_sbyte v[[LO:[0-9]+]],
344; GCN: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]]
345
346; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
347; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]{{\]}}
348define void @constant_sextload_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(2)* %in) #0 {
349 %a = load i8, i8 addrspace(2)* %in
350 %ext = sext i8 %a to i64
351 store i64 %ext, i64 addrspace(1)* %out
352 ret void
353}
354
355; FUNC-LABEL: {{^}}constant_zextload_v1i8_to_v1i64:
356define void @constant_zextload_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(2)* %in) #0 {
357 %load = load <1 x i8>, <1 x i8> addrspace(2)* %in
358 %ext = zext <1 x i8> %load to <1 x i64>
359 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
360 ret void
361}
362
363; FUNC-LABEL: {{^}}constant_sextload_v1i8_to_v1i64:
364define void @constant_sextload_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(2)* %in) #0 {
365 %load = load <1 x i8>, <1 x i8> addrspace(2)* %in
366 %ext = sext <1 x i8> %load to <1 x i64>
367 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
368 ret void
369}
370
371; FUNC-LABEL: {{^}}constant_zextload_v2i8_to_v2i64:
372define void @constant_zextload_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(2)* %in) #0 {
373 %load = load <2 x i8>, <2 x i8> addrspace(2)* %in
374 %ext = zext <2 x i8> %load to <2 x i64>
375 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
376 ret void
377}
378
379; FUNC-LABEL: {{^}}constant_sextload_v2i8_to_v2i64:
380define void @constant_sextload_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(2)* %in) #0 {
381 %load = load <2 x i8>, <2 x i8> addrspace(2)* %in
382 %ext = sext <2 x i8> %load to <2 x i64>
383 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
384 ret void
385}
386
387; FUNC-LABEL: {{^}}constant_zextload_v4i8_to_v4i64:
388define void @constant_zextload_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(2)* %in) #0 {
389 %load = load <4 x i8>, <4 x i8> addrspace(2)* %in
390 %ext = zext <4 x i8> %load to <4 x i64>
391 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
392 ret void
393}
394
395; FUNC-LABEL: {{^}}constant_sextload_v4i8_to_v4i64:
396define void @constant_sextload_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(2)* %in) #0 {
397 %load = load <4 x i8>, <4 x i8> addrspace(2)* %in
398 %ext = sext <4 x i8> %load to <4 x i64>
399 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
400 ret void
401}
402
403; FUNC-LABEL: {{^}}constant_zextload_v8i8_to_v8i64:
404define void @constant_zextload_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(2)* %in) #0 {
405 %load = load <8 x i8>, <8 x i8> addrspace(2)* %in
406 %ext = zext <8 x i8> %load to <8 x i64>
407 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
408 ret void
409}
410
411; FUNC-LABEL: {{^}}constant_sextload_v8i8_to_v8i64:
412define void @constant_sextload_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(2)* %in) #0 {
413 %load = load <8 x i8>, <8 x i8> addrspace(2)* %in
414 %ext = sext <8 x i8> %load to <8 x i64>
415 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
416 ret void
417}
418
419; FUNC-LABEL: {{^}}constant_zextload_v16i8_to_v16i64:
420define void @constant_zextload_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(2)* %in) #0 {
421 %load = load <16 x i8>, <16 x i8> addrspace(2)* %in
422 %ext = zext <16 x i8> %load to <16 x i64>
423 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
424 ret void
425}
426
427; FUNC-LABEL: {{^}}constant_sextload_v16i8_to_v16i64:
428define void @constant_sextload_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(2)* %in) #0 {
429 %load = load <16 x i8>, <16 x i8> addrspace(2)* %in
430 %ext = sext <16 x i8> %load to <16 x i64>
431 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
432 ret void
433}
434
435; FUNC-LABEL: {{^}}constant_zextload_v32i8_to_v32i64:
436define void @constant_zextload_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(2)* %in) #0 {
437 %load = load <32 x i8>, <32 x i8> addrspace(2)* %in
438 %ext = zext <32 x i8> %load to <32 x i64>
439 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
440 ret void
441}
442
443; FUNC-LABEL: {{^}}constant_sextload_v32i8_to_v32i64:
444define void @constant_sextload_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(2)* %in) #0 {
445 %load = load <32 x i8>, <32 x i8> addrspace(2)* %in
446 %ext = sext <32 x i8> %load to <32 x i64>
447 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
448 ret void
449}
450
451; XFUNC-LABEL: {{^}}constant_zextload_v64i8_to_v64i64:
452; define void @constant_zextload_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(2)* %in) #0 {
453; %load = load <64 x i8>, <64 x i8> addrspace(2)* %in
454; %ext = zext <64 x i8> %load to <64 x i64>
455; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
456; ret void
457; }
458
459; XFUNC-LABEL: {{^}}constant_sextload_v64i8_to_v64i64:
460; define void @constant_sextload_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(2)* %in) #0 {
461; %load = load <64 x i8>, <64 x i8> addrspace(2)* %in
462; %ext = sext <64 x i8> %load to <64 x i64>
463; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
464; ret void
465; }
466
467; FUNC-LABEL: {{^}}constant_zextload_i8_to_i16:
468; GCN-NOHSA: buffer_load_ubyte v[[VAL:[0-9]+]],
469; GCN-NOHSA: buffer_store_short v[[VAL]]
470
471; GCN-HSA: flat_load_ubyte v[[VAL:[0-9]+]],
472; GCN-HSA: flat_store_short v{{\[[0-9]+:[0-9]+\]}}, v[[VAL]]
473define void @constant_zextload_i8_to_i16(i16 addrspace(1)* %out, i8 addrspace(2)* %in) #0 {
474 %a = load i8, i8 addrspace(2)* %in
475 %ext = zext i8 %a to i16
476 store i16 %ext, i16 addrspace(1)* %out
477 ret void
478}
479
480; FUNC-LABEL: {{^}}constant_sextload_i8_to_i16:
481; GCN-NOHSA: buffer_load_sbyte v[[VAL:[0-9]+]],
482; GCN-HSA: flat_load_sbyte v[[VAL:[0-9]+]],
483
484; GCN-NOHSA: buffer_store_short v[[VAL]]
485; GCN-HSA: flat_store_short v{{\[[0-9]+:[0-9]+\]}}, v[[VAL]]
486define void @constant_sextload_i8_to_i16(i16 addrspace(1)* %out, i8 addrspace(2)* %in) #0 {
487 %a = load i8, i8 addrspace(2)* %in
488 %ext = sext i8 %a to i16
489 store i16 %ext, i16 addrspace(1)* %out
490 ret void
491}
492
493; FUNC-LABEL: {{^}}constant_zextload_v1i8_to_v1i16:
494define void @constant_zextload_v1i8_to_v1i16(<1 x i16> addrspace(1)* %out, <1 x i8> addrspace(2)* %in) #0 {
495 %load = load <1 x i8>, <1 x i8> addrspace(2)* %in
496 %ext = zext <1 x i8> %load to <1 x i16>
497 store <1 x i16> %ext, <1 x i16> addrspace(1)* %out
498 ret void
499}
500
501; FUNC-LABEL: {{^}}constant_sextload_v1i8_to_v1i16:
502define void @constant_sextload_v1i8_to_v1i16(<1 x i16> addrspace(1)* %out, <1 x i8> addrspace(2)* %in) #0 {
503 %load = load <1 x i8>, <1 x i8> addrspace(2)* %in
504 %ext = sext <1 x i8> %load to <1 x i16>
505 store <1 x i16> %ext, <1 x i16> addrspace(1)* %out
506 ret void
507}
508
509; FUNC-LABEL: {{^}}constant_zextload_v2i8_to_v2i16:
510define void @constant_zextload_v2i8_to_v2i16(<2 x i16> addrspace(1)* %out, <2 x i8> addrspace(2)* %in) #0 {
511 %load = load <2 x i8>, <2 x i8> addrspace(2)* %in
512 %ext = zext <2 x i8> %load to <2 x i16>
513 store <2 x i16> %ext, <2 x i16> addrspace(1)* %out
514 ret void
515}
516
517; FUNC-LABEL: {{^}}constant_sextload_v2i8_to_v2i16:
518define void @constant_sextload_v2i8_to_v2i16(<2 x i16> addrspace(1)* %out, <2 x i8> addrspace(2)* %in) #0 {
519 %load = load <2 x i8>, <2 x i8> addrspace(2)* %in
520 %ext = sext <2 x i8> %load to <2 x i16>
521 store <2 x i16> %ext, <2 x i16> addrspace(1)* %out
522 ret void
523}
524
525; FUNC-LABEL: {{^}}constant_zextload_v4i8_to_v4i16:
526define void @constant_zextload_v4i8_to_v4i16(<4 x i16> addrspace(1)* %out, <4 x i8> addrspace(2)* %in) #0 {
527 %load = load <4 x i8>, <4 x i8> addrspace(2)* %in
528 %ext = zext <4 x i8> %load to <4 x i16>
529 store <4 x i16> %ext, <4 x i16> addrspace(1)* %out
530 ret void
531}
532
533; FUNC-LABEL: {{^}}constant_sextload_v4i8_to_v4i16:
534define void @constant_sextload_v4i8_to_v4i16(<4 x i16> addrspace(1)* %out, <4 x i8> addrspace(2)* %in) #0 {
535 %load = load <4 x i8>, <4 x i8> addrspace(2)* %in
536 %ext = sext <4 x i8> %load to <4 x i16>
537 store <4 x i16> %ext, <4 x i16> addrspace(1)* %out
538 ret void
539}
540
541; FUNC-LABEL: {{^}}constant_zextload_v8i8_to_v8i16:
542define void @constant_zextload_v8i8_to_v8i16(<8 x i16> addrspace(1)* %out, <8 x i8> addrspace(2)* %in) #0 {
543 %load = load <8 x i8>, <8 x i8> addrspace(2)* %in
544 %ext = zext <8 x i8> %load to <8 x i16>
545 store <8 x i16> %ext, <8 x i16> addrspace(1)* %out
546 ret void
547}
548
549; FUNC-LABEL: {{^}}constant_sextload_v8i8_to_v8i16:
550define void @constant_sextload_v8i8_to_v8i16(<8 x i16> addrspace(1)* %out, <8 x i8> addrspace(2)* %in) #0 {
551 %load = load <8 x i8>, <8 x i8> addrspace(2)* %in
552 %ext = sext <8 x i8> %load to <8 x i16>
553 store <8 x i16> %ext, <8 x i16> addrspace(1)* %out
554 ret void
555}
556
557; FUNC-LABEL: {{^}}constant_zextload_v16i8_to_v16i16:
558define void @constant_zextload_v16i8_to_v16i16(<16 x i16> addrspace(1)* %out, <16 x i8> addrspace(2)* %in) #0 {
559 %load = load <16 x i8>, <16 x i8> addrspace(2)* %in
560 %ext = zext <16 x i8> %load to <16 x i16>
561 store <16 x i16> %ext, <16 x i16> addrspace(1)* %out
562 ret void
563}
564
565; FUNC-LABEL: {{^}}constant_sextload_v16i8_to_v16i16:
566define void @constant_sextload_v16i8_to_v16i16(<16 x i16> addrspace(1)* %out, <16 x i8> addrspace(2)* %in) #0 {
567 %load = load <16 x i8>, <16 x i8> addrspace(2)* %in
568 %ext = sext <16 x i8> %load to <16 x i16>
569 store <16 x i16> %ext, <16 x i16> addrspace(1)* %out
570 ret void
571}
572
573; FUNC-LABEL: {{^}}constant_zextload_v32i8_to_v32i16:
574define void @constant_zextload_v32i8_to_v32i16(<32 x i16> addrspace(1)* %out, <32 x i8> addrspace(2)* %in) #0 {
575 %load = load <32 x i8>, <32 x i8> addrspace(2)* %in
576 %ext = zext <32 x i8> %load to <32 x i16>
577 store <32 x i16> %ext, <32 x i16> addrspace(1)* %out
578 ret void
579}
580
581; FUNC-LABEL: {{^}}constant_sextload_v32i8_to_v32i16:
582define void @constant_sextload_v32i8_to_v32i16(<32 x i16> addrspace(1)* %out, <32 x i8> addrspace(2)* %in) #0 {
583 %load = load <32 x i8>, <32 x i8> addrspace(2)* %in
584 %ext = sext <32 x i8> %load to <32 x i16>
585 store <32 x i16> %ext, <32 x i16> addrspace(1)* %out
586 ret void
587}
588
589; XFUNC-LABEL: {{^}}constant_zextload_v64i8_to_v64i16:
590; define void @constant_zextload_v64i8_to_v64i16(<64 x i16> addrspace(1)* %out, <64 x i8> addrspace(2)* %in) #0 {
591; %load = load <64 x i8>, <64 x i8> addrspace(2)* %in
592; %ext = zext <64 x i8> %load to <64 x i16>
593; store <64 x i16> %ext, <64 x i16> addrspace(1)* %out
594; ret void
595; }
596
597; XFUNC-LABEL: {{^}}constant_sextload_v64i8_to_v64i16:
598; define void @constant_sextload_v64i8_to_v64i16(<64 x i16> addrspace(1)* %out, <64 x i8> addrspace(2)* %in) #0 {
599; %load = load <64 x i8>, <64 x i8> addrspace(2)* %in
600; %ext = sext <64 x i8> %load to <64 x i16>
601; store <64 x i16> %ext, <64 x i16> addrspace(1)* %out
602; ret void
603; }
604
605attributes #0 = { nounwind }