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; 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 }
580