blob: c58c3bfa73a5eb23fd2b59e4e2925b96b60a9f75 [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; RUN: llc -march=r600 -mcpu=cayman < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
6
7
8; FUNC-LABEL: {{^}}global_load_i8:
9; GCN-NOHSA: buffer_load_ubyte v{{[0-9]+}}
10; GCN-HSA: flat_load_ubyte
11
12; EG: VTX_READ_8 T{{[0-9]+}}.X, T{{[0-9]+}}.X, 0
13define void @global_load_i8(i8 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
14entry:
15 %ld = load i8, i8 addrspace(1)* %in
16 store i8 %ld, i8 addrspace(1)* %out
17 ret void
18}
19
20; FUNC-LABEL: {{^}}global_load_v2i8:
21; GCN-NOHSA: buffer_load_ushort v
22; GCN-HSA: flat_load_ushort v
23
24; EG: VTX_READ_16
25define void @global_load_v2i8(<2 x i8> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
26entry:
27 %ld = load <2 x i8>, <2 x i8> addrspace(1)* %in
28 store <2 x i8> %ld, <2 x i8> addrspace(1)* %out
29 ret void
30}
31
32; FUNC-LABEL: {{^}}global_load_v3i8:
33; GCN-NOHSA: buffer_load_dword v
34; GCN-HSA: flat_load_dword v
35
36; EG-DAG: VTX_READ_32
37define void @global_load_v3i8(<3 x i8> addrspace(1)* %out, <3 x i8> addrspace(1)* %in) #0 {
38entry:
39 %ld = load <3 x i8>, <3 x i8> addrspace(1)* %in
40 store <3 x i8> %ld, <3 x i8> addrspace(1)* %out
41 ret void
42}
43
44; FUNC-LABEL: {{^}}global_load_v4i8:
45; GCN-NOHSA: buffer_load_dword v
46; GCN-HSA: flat_load_dword v
47
48; EG: VTX_READ_32
49define void @global_load_v4i8(<4 x i8> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
50entry:
51 %ld = load <4 x i8>, <4 x i8> addrspace(1)* %in
52 store <4 x i8> %ld, <4 x i8> addrspace(1)* %out
53 ret void
54}
55
56; FUNC-LABEL: {{^}}global_load_v8i8:
57; GCN-NOHSA: buffer_load_dwordx2
58; GCN-HSA: flat_load_dwordx2
59
60; EG: VTX_READ_64
61define void @global_load_v8i8(<8 x i8> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
62entry:
63 %ld = load <8 x i8>, <8 x i8> addrspace(1)* %in
64 store <8 x i8> %ld, <8 x i8> addrspace(1)* %out
65 ret void
66}
67
68; FUNC-LABEL: {{^}}global_load_v16i8:
69; GCN-NOHSA: buffer_load_dwordx4
70
71; GCN-HSA: flat_load_dwordx4
72
73; EG: VTX_READ_128
74define void @global_load_v16i8(<16 x i8> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
75entry:
76 %ld = load <16 x i8>, <16 x i8> addrspace(1)* %in
77 store <16 x i8> %ld, <16 x i8> addrspace(1)* %out
78 ret void
79}
80
81; FUNC-LABEL: {{^}}global_zextload_i8_to_i32:
82; GCN-NOHSA: buffer_load_ubyte v{{[0-9]+}},
83; GCN-HSA: flat_load_ubyte
84
85; EG: VTX_READ_8 T{{[0-9]+\.X, T[0-9]+\.X}}
86define void @global_zextload_i8_to_i32(i32 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
87 %a = load i8, i8 addrspace(1)* %in
88 %ext = zext i8 %a to i32
89 store i32 %ext, i32 addrspace(1)* %out
90 ret void
91}
92
93; FUNC-LABEL: {{^}}global_sextload_i8_to_i32:
94; GCN-NOHSA: buffer_load_sbyte
95; GCN-HSA: flat_load_sbyte
96
97; EG: VTX_READ_8 [[DST:T[0-9]\.[XYZW]]], [[DST]]
98; EG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST]], 0.0, literal
99; EG: 8
100define void @global_sextload_i8_to_i32(i32 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
101 %ld = load i8, i8 addrspace(1)* %in
102 %ext = sext i8 %ld to i32
103 store i32 %ext, i32 addrspace(1)* %out
104 ret void
105}
106
107; FUNC-LABEL: {{^}}global_zextload_v1i8_to_v1i32:
108define void @global_zextload_v1i8_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 {
109 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
110 %ext = zext <1 x i8> %load to <1 x i32>
111 store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
112 ret void
113}
114
115; FUNC-LABEL: {{^}}global_sextload_v1i8_to_v1i32:
116define void @global_sextload_v1i8_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 {
117 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
118 %ext = sext <1 x i8> %load to <1 x i32>
119 store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
120 ret void
121}
122
123; FUNC-LABEL: {{^}}global_zextload_v2i8_to_v2i32:
124; GCN-NOHSA: buffer_load_ubyte
125; GCN-NOHSA: buffer_load_ubyte
126; GCN-HSA: flat_load_ubyte
127; GCN-HSA: flat_load_ubyte
128; EG: VTX_READ_8
129; EG: VTX_READ_8
130define void @global_zextload_v2i8_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
131 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
132 %ext = zext <2 x i8> %load to <2 x i32>
133 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
134 ret void
135}
136
137; FUNC-LABEL: {{^}}global_sextload_v2i8_to_v2i32:
138; GCN-NOHSA: buffer_load_sbyte
139; GCN-NOHSA: buffer_load_sbyte
140; GCN-HSA: flat_load_sbyte
141; GCN-HSA: flat_load_sbyte
142
143; EG-DAG: VTX_READ_8 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]]
144; EG-DAG: VTX_READ_8 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]]
145; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal
146; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal
147; EG-DAG: 8
148; EG-DAG: 8
149define void @global_sextload_v2i8_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
150 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
151 %ext = sext <2 x i8> %load to <2 x i32>
152 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
153 ret void
154}
155
156; FUNC-LABEL: {{^}}global_zextload_v3i8_to_v3i32:
157; GCN-NOHSA: buffer_load_dword v
158; GCN-HSA: flat_load_dword v
159
160; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8
161; GCN-DAG: v_bfe_u32 v{{[0-9]+}}, v{{[0-9]+}}, 16, 8
162; GCN-DAG: v_and_b32_e32 v{{[0-9]+}}, 0xff,
163define void @global_zextload_v3i8_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i8> addrspace(1)* %in) #0 {
164entry:
165 %ld = load <3 x i8>, <3 x i8> addrspace(1)* %in
166 %ext = zext <3 x i8> %ld to <3 x i32>
167 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out
168 ret void
169}
170
171; FUNC-LABEL: {{^}}global_sextload_v3i8_to_v3i32:
172; GCN-NOHSA: buffer_load_dword v
173; GCN-HSA: flat_load_dword v
174
175; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 8, 8
176; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 8
177; GCN-DAG: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 16, 8
178define void @global_sextload_v3i8_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i8> addrspace(1)* %in) #0 {
179entry:
180 %ld = load <3 x i8>, <3 x i8> addrspace(1)* %in
181 %ext = sext <3 x i8> %ld to <3 x i32>
182 store <3 x i32> %ext, <3 x i32> addrspace(1)* %out
183 ret void
184}
185
186; FUNC-LABEL: {{^}}global_zextload_v4i8_to_v4i32:
187; GCN-NOHSA: buffer_load_ubyte
188; GCN-NOHSA: buffer_load_ubyte
189; GCN-NOHSA: buffer_load_ubyte
190; GCN-NOHSA: buffer_load_ubyte
191; GCN-HSA: flat_load_ubyte
192; GCN-HSA: flat_load_ubyte
193; GCN-HSA: flat_load_ubyte
194; GCN-HSA: flat_load_ubyte
195
196; EG: VTX_READ_8
197; EG: VTX_READ_8
198; EG: VTX_READ_8
199; EG: VTX_READ_8
200define void @global_zextload_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
201 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
202 %ext = zext <4 x i8> %load to <4 x i32>
203 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
204 ret void
205}
206
207; FUNC-LABEL: {{^}}global_sextload_v4i8_to_v4i32:
208; GCN-NOHSA: buffer_load_sbyte
209; GCN-NOHSA: buffer_load_sbyte
210; GCN-NOHSA: buffer_load_sbyte
211; GCN-NOHSA: buffer_load_sbyte
212; GCN-HSA: flat_load_sbyte
213; GCN-HSA: flat_load_sbyte
214; GCN-HSA: flat_load_sbyte
215; GCN-HSA: flat_load_sbyte
216
217; EG-DAG: VTX_READ_8 [[DST_X:T[0-9]\.[XYZW]]], [[DST_X]]
218; EG-DAG: VTX_READ_8 [[DST_Y:T[0-9]\.[XYZW]]], [[DST_Y]]
219; EG-DAG: VTX_READ_8 [[DST_Z:T[0-9]\.[XYZW]]], [[DST_Z]]
220; EG-DAG: VTX_READ_8 [[DST_W:T[0-9]\.[XYZW]]], [[DST_W]]
221; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_X]], 0.0, literal
222; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Y]], 0.0, literal
223; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_Z]], 0.0, literal
224; EG-DAG: BFE_INT {{[* ]*}}T{{[0-9].[XYZW]}}, [[DST_W]], 0.0, literal
225; EG-DAG: 8
226; EG-DAG: 8
227; EG-DAG: 8
228; EG-DAG: 8
229define void @global_sextload_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
230 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
231 %ext = sext <4 x i8> %load to <4 x i32>
232 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
233 ret void
234}
235
236; FUNC-LABEL: {{^}}global_zextload_v8i8_to_v8i32:
237define void @global_zextload_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
238 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
239 %ext = zext <8 x i8> %load to <8 x i32>
240 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
241 ret void
242}
243
244; FUNC-LABEL: {{^}}global_sextload_v8i8_to_v8i32:
245define void @global_sextload_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
246 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
247 %ext = sext <8 x i8> %load to <8 x i32>
248 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
249 ret void
250}
251
252; FUNC-LABEL: {{^}}global_zextload_v16i8_to_v16i32:
253define void @global_zextload_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
254 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
255 %ext = zext <16 x i8> %load to <16 x i32>
256 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
257 ret void
258}
259
260; FUNC-LABEL: {{^}}global_sextload_v16i8_to_v16i32:
261define void @global_sextload_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
262 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
263 %ext = sext <16 x i8> %load to <16 x i32>
264 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
265 ret void
266}
267
268; FUNC-LABEL: {{^}}global_zextload_v32i8_to_v32i32:
269define void @global_zextload_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 {
270 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
271 %ext = zext <32 x i8> %load to <32 x i32>
272 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
273 ret void
274}
275
276; FUNC-LABEL: {{^}}global_sextload_v32i8_to_v32i32:
277define void @global_sextload_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 {
278 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
279 %ext = sext <32 x i8> %load to <32 x i32>
280 store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
281 ret void
282}
283
284; FUNC-LABEL: {{^}}global_zextload_v64i8_to_v64i32:
285define void @global_zextload_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 {
286 %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
287 %ext = zext <64 x i8> %load to <64 x i32>
288 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
289 ret void
290}
291
292; FUNC-LABEL: {{^}}global_sextload_v64i8_to_v64i32:
293define void @global_sextload_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 {
294 %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
295 %ext = sext <64 x i8> %load to <64 x i32>
296 store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
297 ret void
298}
299
300; FUNC-LABEL: {{^}}global_zextload_i8_to_i64:
301; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
302
303; GCN-NOHSA-DAG: buffer_load_ubyte v[[LO:[0-9]+]],
304; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]]
305
306; GCN-HSA-DAG: flat_load_ubyte v[[LO:[0-9]+]],
307; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]]
308define void @global_zextload_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
309 %a = load i8, i8 addrspace(1)* %in
310 %ext = zext i8 %a to i64
311 store i64 %ext, i64 addrspace(1)* %out
312 ret void
313}
314
315; FUNC-LABEL: {{^}}global_sextload_i8_to_i64:
316; GCN-NOHSA: buffer_load_sbyte v[[LO:[0-9]+]],
317; GCN-HSA: flat_load_sbyte v[[LO:[0-9]+]],
318; GCN: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]]
319
320; GCN-NOHSA: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
321; GCN-HSA: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO]]:[[HI]]{{\]}}
322define void @global_sextload_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
323 %a = load i8, i8 addrspace(1)* %in
324 %ext = sext i8 %a to i64
325 store i64 %ext, i64 addrspace(1)* %out
326 ret void
327}
328
329; FUNC-LABEL: {{^}}global_zextload_v1i8_to_v1i64:
330define void @global_zextload_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 {
331 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
332 %ext = zext <1 x i8> %load to <1 x i64>
333 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
334 ret void
335}
336
337; FUNC-LABEL: {{^}}global_sextload_v1i8_to_v1i64:
338define void @global_sextload_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 {
339 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
340 %ext = sext <1 x i8> %load to <1 x i64>
341 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
342 ret void
343}
344
345; FUNC-LABEL: {{^}}global_zextload_v2i8_to_v2i64:
346define void @global_zextload_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
347 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
348 %ext = zext <2 x i8> %load to <2 x i64>
349 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
350 ret void
351}
352
353; FUNC-LABEL: {{^}}global_sextload_v2i8_to_v2i64:
354define void @global_sextload_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
355 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
356 %ext = sext <2 x i8> %load to <2 x i64>
357 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
358 ret void
359}
360
361; FUNC-LABEL: {{^}}global_zextload_v4i8_to_v4i64:
362define void @global_zextload_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
363 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
364 %ext = zext <4 x i8> %load to <4 x i64>
365 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
366 ret void
367}
368
369; FUNC-LABEL: {{^}}global_sextload_v4i8_to_v4i64:
370define void @global_sextload_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
371 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
372 %ext = sext <4 x i8> %load to <4 x i64>
373 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
374 ret void
375}
376
377; FUNC-LABEL: {{^}}global_zextload_v8i8_to_v8i64:
378define void @global_zextload_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
379 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
380 %ext = zext <8 x i8> %load to <8 x i64>
381 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
382 ret void
383}
384
385; FUNC-LABEL: {{^}}global_sextload_v8i8_to_v8i64:
386define void @global_sextload_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
387 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
388 %ext = sext <8 x i8> %load to <8 x i64>
389 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
390 ret void
391}
392
393; FUNC-LABEL: {{^}}global_zextload_v16i8_to_v16i64:
394define void @global_zextload_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
395 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
396 %ext = zext <16 x i8> %load to <16 x i64>
397 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
398 ret void
399}
400
401; FUNC-LABEL: {{^}}global_sextload_v16i8_to_v16i64:
402define void @global_sextload_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
403 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
404 %ext = sext <16 x i8> %load to <16 x i64>
405 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
406 ret void
407}
408
409; FUNC-LABEL: {{^}}global_zextload_v32i8_to_v32i64:
410define void @global_zextload_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 {
411 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
412 %ext = zext <32 x i8> %load to <32 x i64>
413 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
414 ret void
415}
416
417; FUNC-LABEL: {{^}}global_sextload_v32i8_to_v32i64:
418define void @global_sextload_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 {
419 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
420 %ext = sext <32 x i8> %load to <32 x i64>
421 store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
422 ret void
423}
424
425; XFUNC-LABEL: {{^}}global_zextload_v64i8_to_v64i64:
426; define void @global_zextload_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 {
427; %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
428; %ext = zext <64 x i8> %load to <64 x i64>
429; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
430; ret void
431; }
432
433; XFUNC-LABEL: {{^}}global_sextload_v64i8_to_v64i64:
434; define void @global_sextload_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 {
435; %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
436; %ext = sext <64 x i8> %load to <64 x i64>
437; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
438; ret void
439; }
440
441; FUNC-LABEL: {{^}}global_zextload_i8_to_i16:
442; GCN-NOHSA: buffer_load_ubyte v[[VAL:[0-9]+]],
443; GCN-NOHSA: buffer_store_short v[[VAL]]
444
445; GCN-HSA: flat_load_ubyte v[[VAL:[0-9]+]],
446; GCN-HSA: flat_store_short v{{\[[0-9]+:[0-9]+\]}}, v[[VAL]]
447define void @global_zextload_i8_to_i16(i16 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
448 %a = load i8, i8 addrspace(1)* %in
449 %ext = zext i8 %a to i16
450 store i16 %ext, i16 addrspace(1)* %out
451 ret void
452}
453
454; FUNC-LABEL: {{^}}global_sextload_i8_to_i16:
455; GCN-NOHSA: buffer_load_sbyte v[[VAL:[0-9]+]],
456; GCN-HSA: flat_load_sbyte v[[VAL:[0-9]+]],
457
458; GCN-NOHSA: buffer_store_short v[[VAL]]
459; GCN-HSA: flat_store_short v{{\[[0-9]+:[0-9]+\]}}, v[[VAL]]
460define void @global_sextload_i8_to_i16(i16 addrspace(1)* %out, i8 addrspace(1)* %in) #0 {
461 %a = load i8, i8 addrspace(1)* %in
462 %ext = sext i8 %a to i16
463 store i16 %ext, i16 addrspace(1)* %out
464 ret void
465}
466
467; FUNC-LABEL: {{^}}global_zextload_v1i8_to_v1i16:
468define void @global_zextload_v1i8_to_v1i16(<1 x i16> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 {
469 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
470 %ext = zext <1 x i8> %load to <1 x i16>
471 store <1 x i16> %ext, <1 x i16> addrspace(1)* %out
472 ret void
473}
474
475; FUNC-LABEL: {{^}}global_sextload_v1i8_to_v1i16:
476define void @global_sextload_v1i8_to_v1i16(<1 x i16> addrspace(1)* %out, <1 x i8> addrspace(1)* %in) #0 {
477 %load = load <1 x i8>, <1 x i8> addrspace(1)* %in
478 %ext = sext <1 x i8> %load to <1 x i16>
479 store <1 x i16> %ext, <1 x i16> addrspace(1)* %out
480 ret void
481}
482
483; FUNC-LABEL: {{^}}global_zextload_v2i8_to_v2i16:
484define void @global_zextload_v2i8_to_v2i16(<2 x i16> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
485 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
486 %ext = zext <2 x i8> %load to <2 x i16>
487 store <2 x i16> %ext, <2 x i16> addrspace(1)* %out
488 ret void
489}
490
491; FUNC-LABEL: {{^}}global_sextload_v2i8_to_v2i16:
492define void @global_sextload_v2i8_to_v2i16(<2 x i16> addrspace(1)* %out, <2 x i8> addrspace(1)* %in) #0 {
493 %load = load <2 x i8>, <2 x i8> addrspace(1)* %in
494 %ext = sext <2 x i8> %load to <2 x i16>
495 store <2 x i16> %ext, <2 x i16> addrspace(1)* %out
496 ret void
497}
498
499; FUNC-LABEL: {{^}}global_zextload_v4i8_to_v4i16:
500define void @global_zextload_v4i8_to_v4i16(<4 x i16> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
501 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
502 %ext = zext <4 x i8> %load to <4 x i16>
503 store <4 x i16> %ext, <4 x i16> addrspace(1)* %out
504 ret void
505}
506
507; FUNC-LABEL: {{^}}global_sextload_v4i8_to_v4i16:
508define void @global_sextload_v4i8_to_v4i16(<4 x i16> addrspace(1)* %out, <4 x i8> addrspace(1)* %in) #0 {
509 %load = load <4 x i8>, <4 x i8> addrspace(1)* %in
510 %ext = sext <4 x i8> %load to <4 x i16>
511 store <4 x i16> %ext, <4 x i16> addrspace(1)* %out
512 ret void
513}
514
515; FUNC-LABEL: {{^}}global_zextload_v8i8_to_v8i16:
516define void @global_zextload_v8i8_to_v8i16(<8 x i16> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
517 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
518 %ext = zext <8 x i8> %load to <8 x i16>
519 store <8 x i16> %ext, <8 x i16> addrspace(1)* %out
520 ret void
521}
522
523; FUNC-LABEL: {{^}}global_sextload_v8i8_to_v8i16:
524define void @global_sextload_v8i8_to_v8i16(<8 x i16> addrspace(1)* %out, <8 x i8> addrspace(1)* %in) #0 {
525 %load = load <8 x i8>, <8 x i8> addrspace(1)* %in
526 %ext = sext <8 x i8> %load to <8 x i16>
527 store <8 x i16> %ext, <8 x i16> addrspace(1)* %out
528 ret void
529}
530
531; FUNC-LABEL: {{^}}global_zextload_v16i8_to_v16i16:
532define void @global_zextload_v16i8_to_v16i16(<16 x i16> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
533 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
534 %ext = zext <16 x i8> %load to <16 x i16>
535 store <16 x i16> %ext, <16 x i16> addrspace(1)* %out
536 ret void
537}
538
539; FUNC-LABEL: {{^}}global_sextload_v16i8_to_v16i16:
540define void @global_sextload_v16i8_to_v16i16(<16 x i16> addrspace(1)* %out, <16 x i8> addrspace(1)* %in) #0 {
541 %load = load <16 x i8>, <16 x i8> addrspace(1)* %in
542 %ext = sext <16 x i8> %load to <16 x i16>
543 store <16 x i16> %ext, <16 x i16> addrspace(1)* %out
544 ret void
545}
546
547; FUNC-LABEL: {{^}}global_zextload_v32i8_to_v32i16:
548define void @global_zextload_v32i8_to_v32i16(<32 x i16> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 {
549 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
550 %ext = zext <32 x i8> %load to <32 x i16>
551 store <32 x i16> %ext, <32 x i16> addrspace(1)* %out
552 ret void
553}
554
555; FUNC-LABEL: {{^}}global_sextload_v32i8_to_v32i16:
556define void @global_sextload_v32i8_to_v32i16(<32 x i16> addrspace(1)* %out, <32 x i8> addrspace(1)* %in) #0 {
557 %load = load <32 x i8>, <32 x i8> addrspace(1)* %in
558 %ext = sext <32 x i8> %load to <32 x i16>
559 store <32 x i16> %ext, <32 x i16> addrspace(1)* %out
560 ret void
561}
562
563; XFUNC-LABEL: {{^}}global_zextload_v64i8_to_v64i16:
564; define void @global_zextload_v64i8_to_v64i16(<64 x i16> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 {
565; %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
566; %ext = zext <64 x i8> %load to <64 x i16>
567; store <64 x i16> %ext, <64 x i16> addrspace(1)* %out
568; ret void
569; }
570
571; XFUNC-LABEL: {{^}}global_sextload_v64i8_to_v64i16:
572; define void @global_sextload_v64i8_to_v64i16(<64 x i16> addrspace(1)* %out, <64 x i8> addrspace(1)* %in) #0 {
573; %load = load <64 x i8>, <64 x i8> addrspace(1)* %in
574; %ext = sext <64 x i8> %load to <64 x i16>
575; store <64 x i16> %ext, <64 x i16> addrspace(1)* %out
576; ret void
577; }
578
579attributes #0 = { nounwind }