blob: 87828982a9870f5f25c8372c2094d35c4bb291b4 [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:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000118; GCN-NOHSA: buffer_load_ushort
119; GCN-HSA: flat_load_ushort
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000120; EG: VTX_READ_8
121; EG: VTX_READ_8
122define void @constant_zextload_v2i8_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i8> addrspace(2)* %in) #0 {
123 %load = load <2 x i8>, <2 x i8> addrspace(2)* %in
124 %ext = zext <2 x i8> %load to <2 x i32>
125 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
126 ret void
127}
128
129; FUNC-LABEL: {{^}}constant_sextload_v2i8_to_v2i32:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000130; GCN-NOHSA: buffer_load_ushort
131
132; GCN-HSA: flat_load_ushort
133
134; GCN: v_bfe_i32
135; GCN: v_bfe_i32
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000136
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:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000179; GCN: s_load_dword s
180; GCN-DAG: s_and_b32
181; GCN-DAG: s_lshr_b32
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000182
183; EG: VTX_READ_8
184; EG: VTX_READ_8
185; EG: VTX_READ_8
186; EG: VTX_READ_8
187define void @constant_zextload_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(2)* %in) #0 {
188 %load = load <4 x i8>, <4 x i8> addrspace(2)* %in
189 %ext = zext <4 x i8> %load to <4 x i32>
190 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
191 ret void
192}
193
194; FUNC-LABEL: {{^}}constant_sextload_v4i8_to_v4i32:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000195; GCN: s_load_dword s
196; GCN-DAG: s_sext_i32_i8
197; GCN-DAG: s_ashr_i32
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000198
199; EG-DAG: VTX_READ_8 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]]
200; EG-DAG: VTX_READ_8 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]]
201; EG-DAG: VTX_READ_8 [[DST_Z:T[0-9]\.[XYZW]]], [[DST_Z]]
202; EG-DAG: VTX_READ_8 [[DST_W:T[0-9]\.[XYZW]]], [[DST_W]]
203; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal
204; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal
205; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Z]], 0.0, literal
206; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_W]], 0.0, literal
207; EG-DAG: 8
208; EG-DAG: 8
209; EG-DAG: 8
210; EG-DAG: 8
211define void @constant_sextload_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(2)* %in) #0 {
212 %load = load <4 x i8>, <4 x i8> addrspace(2)* %in
213 %ext = sext <4 x i8> %load to <4 x i32>
214 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
215 ret void
216}
217
218; FUNC-LABEL: {{^}}constant_zextload_v8i8_to_v8i32:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000219; GCN: s_load_dwordx2
220; GCN-DAG: s_and_b32
221; GCN-DAG: s_lshr_b32
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000222define void @constant_zextload_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(2)* %in) #0 {
223 %load = load <8 x i8>, <8 x i8> addrspace(2)* %in
224 %ext = zext <8 x i8> %load to <8 x i32>
225 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
226 ret void
227}
228
229; FUNC-LABEL: {{^}}constant_sextload_v8i8_to_v8i32:
Matt Arsenault327bb5a2016-07-01 22:47:50 +0000230; GCN: s_load_dwordx2
231; GCN-DAG: s_ashr_i32
232; GCN-DAG: s_sext_i32_i8
Matt Arsenaultd1097a32016-06-02 19:54:26 +0000233define void @constant_sextload_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(2)* %in) #0 {
234 %load = load <8 x i8>, <8 x i8> addrspace(2)* %in
235 %ext = sext <8 x i8> %load to <8 x i32>
236 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
237 ret void
238}
239
240; FUNC-LABEL: {{^}}constant_zextload_v16i8_to_v16i32:
241define void @constant_zextload_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(2)* %in) #0 {
242 %load = load <16 x i8>, <16 x i8> addrspace(2)* %in
243 %ext = zext <16 x i8> %load to <16 x i32>
244 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
245 ret void
246}
247
248; FUNC-LABEL: {{^}}constant_sextload_v16i8_to_v16i32:
249define void @constant_sextload_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(2)* %in) #0 {
250 %load = load <16 x i8>, <16 x i8> addrspace(2)* %in
251 %ext = sext <16 x i8> %load to <16 x i32>
252 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
253 ret void
254}
255
256; FUNC-LABEL: {{^}}constant_zextload_v32i8_to_v32i32:
257define void @constant_zextload_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(2)* %in) #0 {
258 %load = load <32 x i8>, <32 x i8> addrspace(2)* %in
259 %ext = zext <32 x i8> %load to <32 x i32>
260 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
261 ret void
262}
263
264; FUNC-LABEL: {{^}}constant_sextload_v32i8_to_v32i32:
265define void @constant_sextload_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(2)* %in) #0 {
266 %load = load <32 x i8>, <32 x i8> addrspace(2)* %in
267 %ext = sext <32 x i8> %load to <32 x i32>
268 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
269 ret void
270}
271
272; FUNC-LABEL: {{^}}constant_zextload_v64i8_to_v64i32:
273define void @constant_zextload_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(2)* %in) #0 {
274 %load = load <64 x i8>, <64 x i8> addrspace(2)* %in
275 %ext = zext <64 x i8> %load to <64 x i32>
276 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
277 ret void
278}
279
280; FUNC-LABEL: {{^}}constant_sextload_v64i8_to_v64i32:
281define void @constant_sextload_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(2)* %in) #0 {
282 %load = load <64 x i8>, <64 x i8> addrspace(2)* %in
283 %ext = sext <64 x i8> %load to <64 x i32>
284 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
285 ret void
286}
287
288; FUNC-LABEL: {{^}}constant_zextload_i8_to_i64:
289; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
290
291; GCN-NOHSA-DAG: buffer_load_ubyte v[[LO:[0-9]+]],
292; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]]
293
294; GCN-HSA-DAG: flat_load_ubyte v[[LO:[0-9]+]],
295; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]]
296define void @constant_zextload_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(2)* %in) #0 {
297 %a = load i8, i8 addrspace(2)* %in
298 %ext = zext i8 %a to i64
299 store i64 %ext, i64 addrspace(1)* %out
300 ret void
301}
302
303; FUNC-LABEL: {{^}}constant_sextload_i8_to_i64:
304; GCN-NOHSA: buffer_load_sbyte v[[LO:[0-9]+]],
305; GCN-HSA: flat_load_sbyte v[[LO:[0-9]+]],
306; GCN: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]]
307
308; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
309; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]{{\]}}
310define void @constant_sextload_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(2)* %in) #0 {
311 %a = load i8, i8 addrspace(2)* %in
312 %ext = sext i8 %a to i64
313 store i64 %ext, i64 addrspace(1)* %out
314 ret void
315}
316
317; FUNC-LABEL: {{^}}constant_zextload_v1i8_to_v1i64:
318define void @constant_zextload_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(2)* %in) #0 {
319 %load = load <1 x i8>, <1 x i8> addrspace(2)* %in
320 %ext = zext <1 x i8> %load to <1 x i64>
321 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
322 ret void
323}
324
325; FUNC-LABEL: {{^}}constant_sextload_v1i8_to_v1i64:
326define void @constant_sextload_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(2)* %in) #0 {
327 %load = load <1 x i8>, <1 x i8> addrspace(2)* %in
328 %ext = sext <1 x i8> %load to <1 x i64>
329 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
330 ret void
331}
332
333; FUNC-LABEL: {{^}}constant_zextload_v2i8_to_v2i64:
334define void @constant_zextload_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(2)* %in) #0 {
335 %load = load <2 x i8>, <2 x i8> addrspace(2)* %in
336 %ext = zext <2 x i8> %load to <2 x i64>
337 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
338 ret void
339}
340
341; FUNC-LABEL: {{^}}constant_sextload_v2i8_to_v2i64:
342define void @constant_sextload_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(2)* %in) #0 {
343 %load = load <2 x i8>, <2 x i8> addrspace(2)* %in
344 %ext = sext <2 x i8> %load to <2 x i64>
345 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
346 ret void
347}
348
349; FUNC-LABEL: {{^}}constant_zextload_v4i8_to_v4i64:
350define void @constant_zextload_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(2)* %in) #0 {
351 %load = load <4 x i8>, <4 x i8> addrspace(2)* %in
352 %ext = zext <4 x i8> %load to <4 x i64>
353 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
354 ret void
355}
356
357; FUNC-LABEL: {{^}}constant_sextload_v4i8_to_v4i64:
358define void @constant_sextload_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(2)* %in) #0 {
359 %load = load <4 x i8>, <4 x i8> addrspace(2)* %in
360 %ext = sext <4 x i8> %load to <4 x i64>
361 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
362 ret void
363}
364
365; FUNC-LABEL: {{^}}constant_zextload_v8i8_to_v8i64:
366define void @constant_zextload_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(2)* %in) #0 {
367 %load = load <8 x i8>, <8 x i8> addrspace(2)* %in
368 %ext = zext <8 x i8> %load to <8 x i64>
369 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
370 ret void
371}
372
373; FUNC-LABEL: {{^}}constant_sextload_v8i8_to_v8i64:
374define void @constant_sextload_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(2)* %in) #0 {
375 %load = load <8 x i8>, <8 x i8> addrspace(2)* %in
376 %ext = sext <8 x i8> %load to <8 x i64>
377 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
378 ret void
379}
380
381; FUNC-LABEL: {{^}}constant_zextload_v16i8_to_v16i64:
382define void @constant_zextload_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(2)* %in) #0 {
383 %load = load <16 x i8>, <16 x i8> addrspace(2)* %in
384 %ext = zext <16 x i8> %load to <16 x i64>
385 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
386 ret void
387}
388
389; FUNC-LABEL: {{^}}constant_sextload_v16i8_to_v16i64:
390define void @constant_sextload_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(2)* %in) #0 {
391 %load = load <16 x i8>, <16 x i8> addrspace(2)* %in
392 %ext = sext <16 x i8> %load to <16 x i64>
393 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
394 ret void
395}
396
397; FUNC-LABEL: {{^}}constant_zextload_v32i8_to_v32i64:
398define void @constant_zextload_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(2)* %in) #0 {
399 %load = load <32 x i8>, <32 x i8> addrspace(2)* %in
400 %ext = zext <32 x i8> %load to <32 x i64>
401 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
402 ret void
403}
404
405; FUNC-LABEL: {{^}}constant_sextload_v32i8_to_v32i64:
406define void @constant_sextload_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(2)* %in) #0 {
407 %load = load <32 x i8>, <32 x i8> addrspace(2)* %in
408 %ext = sext <32 x i8> %load to <32 x i64>
409 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
410 ret void
411}
412
413; XFUNC-LABEL: {{^}}constant_zextload_v64i8_to_v64i64:
414; define void @constant_zextload_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(2)* %in) #0 {
415; %load = load <64 x i8>, <64 x i8> addrspace(2)* %in
416; %ext = zext <64 x i8> %load to <64 x i64>
417; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
418; ret void
419; }
420
421; XFUNC-LABEL: {{^}}constant_sextload_v64i8_to_v64i64:
422; define void @constant_sextload_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(2)* %in) #0 {
423; %load = load <64 x i8>, <64 x i8> addrspace(2)* %in
424; %ext = sext <64 x i8> %load to <64 x i64>
425; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
426; ret void
427; }
428
429; FUNC-LABEL: {{^}}constant_zextload_i8_to_i16:
430; GCN-NOHSA: buffer_load_ubyte v[[VAL:[0-9]+]],
431; GCN-NOHSA: buffer_store_short v[[VAL]]
432
433; GCN-HSA: flat_load_ubyte v[[VAL:[0-9]+]],
434; GCN-HSA: flat_store_short v{{\[[0-9]+:[0-9]+\]}}, v[[VAL]]
435define void @constant_zextload_i8_to_i16(i16 addrspace(1)* %out, i8 addrspace(2)* %in) #0 {
436 %a = load i8, i8 addrspace(2)* %in
437 %ext = zext i8 %a to i16
438 store i16 %ext, i16 addrspace(1)* %out
439 ret void
440}
441
442; FUNC-LABEL: {{^}}constant_sextload_i8_to_i16:
443; GCN-NOHSA: buffer_load_sbyte v[[VAL:[0-9]+]],
444; GCN-HSA: flat_load_sbyte v[[VAL:[0-9]+]],
445
446; GCN-NOHSA: buffer_store_short v[[VAL]]
447; GCN-HSA: flat_store_short v{{\[[0-9]+:[0-9]+\]}}, v[[VAL]]
448define void @constant_sextload_i8_to_i16(i16 addrspace(1)* %out, i8 addrspace(2)* %in) #0 {
449 %a = load i8, i8 addrspace(2)* %in
450 %ext = sext i8 %a to i16
451 store i16 %ext, i16 addrspace(1)* %out
452 ret void
453}
454
455; FUNC-LABEL: {{^}}constant_zextload_v1i8_to_v1i16:
456define void @constant_zextload_v1i8_to_v1i16(<1 x i16> addrspace(1)* %out, <1 x i8> addrspace(2)* %in) #0 {
457 %load = load <1 x i8>, <1 x i8> addrspace(2)* %in
458 %ext = zext <1 x i8> %load to <1 x i16>
459 store <1 x i16> %ext, <1 x i16> addrspace(1)* %out
460 ret void
461}
462
463; FUNC-LABEL: {{^}}constant_sextload_v1i8_to_v1i16:
464define void @constant_sextload_v1i8_to_v1i16(<1 x i16> addrspace(1)* %out, <1 x i8> addrspace(2)* %in) #0 {
465 %load = load <1 x i8>, <1 x i8> addrspace(2)* %in
466 %ext = sext <1 x i8> %load to <1 x i16>
467 store <1 x i16> %ext, <1 x i16> addrspace(1)* %out
468 ret void
469}
470
471; FUNC-LABEL: {{^}}constant_zextload_v2i8_to_v2i16:
472define void @constant_zextload_v2i8_to_v2i16(<2 x i16> addrspace(1)* %out, <2 x i8> addrspace(2)* %in) #0 {
473 %load = load <2 x i8>, <2 x i8> addrspace(2)* %in
474 %ext = zext <2 x i8> %load to <2 x i16>
475 store <2 x i16> %ext, <2 x i16> addrspace(1)* %out
476 ret void
477}
478
479; FUNC-LABEL: {{^}}constant_sextload_v2i8_to_v2i16:
480define void @constant_sextload_v2i8_to_v2i16(<2 x i16> addrspace(1)* %out, <2 x i8> addrspace(2)* %in) #0 {
481 %load = load <2 x i8>, <2 x i8> addrspace(2)* %in
482 %ext = sext <2 x i8> %load to <2 x i16>
483 store <2 x i16> %ext, <2 x i16> addrspace(1)* %out
484 ret void
485}
486
487; FUNC-LABEL: {{^}}constant_zextload_v4i8_to_v4i16:
488define void @constant_zextload_v4i8_to_v4i16(<4 x i16> addrspace(1)* %out, <4 x i8> addrspace(2)* %in) #0 {
489 %load = load <4 x i8>, <4 x i8> addrspace(2)* %in
490 %ext = zext <4 x i8> %load to <4 x i16>
491 store <4 x i16> %ext, <4 x i16> addrspace(1)* %out
492 ret void
493}
494
495; FUNC-LABEL: {{^}}constant_sextload_v4i8_to_v4i16:
496define void @constant_sextload_v4i8_to_v4i16(<4 x i16> addrspace(1)* %out, <4 x i8> addrspace(2)* %in) #0 {
497 %load = load <4 x i8>, <4 x i8> addrspace(2)* %in
498 %ext = sext <4 x i8> %load to <4 x i16>
499 store <4 x i16> %ext, <4 x i16> addrspace(1)* %out
500 ret void
501}
502
503; FUNC-LABEL: {{^}}constant_zextload_v8i8_to_v8i16:
504define void @constant_zextload_v8i8_to_v8i16(<8 x i16> addrspace(1)* %out, <8 x i8> addrspace(2)* %in) #0 {
505 %load = load <8 x i8>, <8 x i8> addrspace(2)* %in
506 %ext = zext <8 x i8> %load to <8 x i16>
507 store <8 x i16> %ext, <8 x i16> addrspace(1)* %out
508 ret void
509}
510
511; FUNC-LABEL: {{^}}constant_sextload_v8i8_to_v8i16:
512define void @constant_sextload_v8i8_to_v8i16(<8 x i16> addrspace(1)* %out, <8 x i8> addrspace(2)* %in) #0 {
513 %load = load <8 x i8>, <8 x i8> addrspace(2)* %in
514 %ext = sext <8 x i8> %load to <8 x i16>
515 store <8 x i16> %ext, <8 x i16> addrspace(1)* %out
516 ret void
517}
518
519; FUNC-LABEL: {{^}}constant_zextload_v16i8_to_v16i16:
520define void @constant_zextload_v16i8_to_v16i16(<16 x i16> addrspace(1)* %out, <16 x i8> addrspace(2)* %in) #0 {
521 %load = load <16 x i8>, <16 x i8> addrspace(2)* %in
522 %ext = zext <16 x i8> %load to <16 x i16>
523 store <16 x i16> %ext, <16 x i16> addrspace(1)* %out
524 ret void
525}
526
527; FUNC-LABEL: {{^}}constant_sextload_v16i8_to_v16i16:
528define void @constant_sextload_v16i8_to_v16i16(<16 x i16> addrspace(1)* %out, <16 x i8> addrspace(2)* %in) #0 {
529 %load = load <16 x i8>, <16 x i8> addrspace(2)* %in
530 %ext = sext <16 x i8> %load to <16 x i16>
531 store <16 x i16> %ext, <16 x i16> addrspace(1)* %out
532 ret void
533}
534
535; FUNC-LABEL: {{^}}constant_zextload_v32i8_to_v32i16:
536define void @constant_zextload_v32i8_to_v32i16(<32 x i16> addrspace(1)* %out, <32 x i8> addrspace(2)* %in) #0 {
537 %load = load <32 x i8>, <32 x i8> addrspace(2)* %in
538 %ext = zext <32 x i8> %load to <32 x i16>
539 store <32 x i16> %ext, <32 x i16> addrspace(1)* %out
540 ret void
541}
542
543; FUNC-LABEL: {{^}}constant_sextload_v32i8_to_v32i16:
544define void @constant_sextload_v32i8_to_v32i16(<32 x i16> addrspace(1)* %out, <32 x i8> addrspace(2)* %in) #0 {
545 %load = load <32 x i8>, <32 x i8> addrspace(2)* %in
546 %ext = sext <32 x i8> %load to <32 x i16>
547 store <32 x i16> %ext, <32 x i16> addrspace(1)* %out
548 ret void
549}
550
551; XFUNC-LABEL: {{^}}constant_zextload_v64i8_to_v64i16:
552; define void @constant_zextload_v64i8_to_v64i16(<64 x i16> addrspace(1)* %out, <64 x i8> addrspace(2)* %in) #0 {
553; %load = load <64 x i8>, <64 x i8> addrspace(2)* %in
554; %ext = zext <64 x i8> %load to <64 x i16>
555; store <64 x i16> %ext, <64 x i16> addrspace(1)* %out
556; ret void
557; }
558
559; XFUNC-LABEL: {{^}}constant_sextload_v64i8_to_v64i16:
560; define void @constant_sextload_v64i8_to_v64i16(<64 x i16> addrspace(1)* %out, <64 x i8> addrspace(2)* %in) #0 {
561; %load = load <64 x i8>, <64 x i8> addrspace(2)* %in
562; %ext = sext <64 x i8> %load to <64 x i16>
563; store <64 x i16> %ext, <64 x i16> addrspace(1)* %out
564; ret void
565; }
566
567attributes #0 = { nounwind }