blob: 4c37f3f411443acfc372d8ae18170ee224744323 [file] [log] [blame]
Tom Stellard40ce8af2015-01-28 16:04:26 +00001; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
2; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
Matt Arsenaultbd223422015-01-14 01:35:17 +00003; RUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
4
5; FUNC-LABEL: {{^}}zextload_global_i8_to_i32:
6; SI: buffer_load_ubyte
7; SI: buffer_store_dword
8; SI: s_endpgm
9define void @zextload_global_i8_to_i32(i32 addrspace(1)* %out, i8 addrspace(1)* %in) nounwind {
10 %a = load i8 addrspace(1)* %in
11 %ext = zext i8 %a to i32
12 store i32 %ext, i32 addrspace(1)* %out
13 ret void
14}
15
16; FUNC-LABEL: {{^}}sextload_global_i8_to_i32:
17; SI: buffer_load_sbyte
18; SI: buffer_store_dword
19; SI: s_endpgm
20define void @sextload_global_i8_to_i32(i32 addrspace(1)* %out, i8 addrspace(1)* %in) nounwind {
21 %a = load i8 addrspace(1)* %in
22 %ext = sext i8 %a to i32
23 store i32 %ext, i32 addrspace(1)* %out
24 ret void
25}
26
27; FUNC-LABEL: {{^}}zextload_global_v1i8_to_v1i32:
28; SI: s_endpgm
29define void @zextload_global_v1i8_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i8> addrspace(1)* nocapture %in) nounwind {
30 %load = load <1 x i8> addrspace(1)* %in
31 %ext = zext <1 x i8> %load to <1 x i32>
32 store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
33 ret void
34}
35
36; FUNC-LABEL: {{^}}sextload_global_v1i8_to_v1i32:
37; SI: s_endpgm
38define void @sextload_global_v1i8_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i8> addrspace(1)* nocapture %in) nounwind {
39 %load = load <1 x i8> addrspace(1)* %in
40 %ext = sext <1 x i8> %load to <1 x i32>
41 store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
42 ret void
43}
44
45; FUNC-LABEL: {{^}}zextload_global_v2i8_to_v2i32:
46; SI: s_endpgm
47define void @zextload_global_v2i8_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i8> addrspace(1)* nocapture %in) nounwind {
48 %load = load <2 x i8> addrspace(1)* %in
49 %ext = zext <2 x i8> %load to <2 x i32>
50 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
51 ret void
52}
53
54; FUNC-LABEL: {{^}}sextload_global_v2i8_to_v2i32:
55; SI: s_endpgm
56define void @sextload_global_v2i8_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i8> addrspace(1)* nocapture %in) nounwind {
57 %load = load <2 x i8> addrspace(1)* %in
58 %ext = sext <2 x i8> %load to <2 x i32>
59 store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
60 ret void
61}
62
63; FUNC-LABEL: {{^}}zextload_global_v4i8_to_v4i32:
64; SI: s_endpgm
65define void @zextload_global_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(1)* nocapture %in) nounwind {
66 %load = load <4 x i8> addrspace(1)* %in
67 %ext = zext <4 x i8> %load to <4 x i32>
68 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
69 ret void
70}
71
72; FUNC-LABEL: {{^}}sextload_global_v4i8_to_v4i32:
73; SI: s_endpgm
74define void @sextload_global_v4i8_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i8> addrspace(1)* nocapture %in) nounwind {
75 %load = load <4 x i8> addrspace(1)* %in
76 %ext = sext <4 x i8> %load to <4 x i32>
77 store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
78 ret void
79}
80
81; FUNC-LABEL: {{^}}zextload_global_v8i8_to_v8i32:
82; SI: s_endpgm
83define void @zextload_global_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(1)* nocapture %in) nounwind {
84 %load = load <8 x i8> addrspace(1)* %in
85 %ext = zext <8 x i8> %load to <8 x i32>
86 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
87 ret void
88}
89
90; FUNC-LABEL: {{^}}sextload_global_v8i8_to_v8i32:
91; SI: s_endpgm
92define void @sextload_global_v8i8_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i8> addrspace(1)* nocapture %in) nounwind {
93 %load = load <8 x i8> addrspace(1)* %in
94 %ext = sext <8 x i8> %load to <8 x i32>
95 store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
96 ret void
97}
98
99; FUNC-LABEL: {{^}}zextload_global_v16i8_to_v16i32:
100; SI: s_endpgm
101define void @zextload_global_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(1)* nocapture %in) nounwind {
102 %load = load <16 x i8> addrspace(1)* %in
103 %ext = zext <16 x i8> %load to <16 x i32>
104 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
105 ret void
106}
107
108; FUNC-LABEL: {{^}}sextload_global_v16i8_to_v16i32:
109; SI: s_endpgm
110define void @sextload_global_v16i8_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i8> addrspace(1)* nocapture %in) nounwind {
111 %load = load <16 x i8> addrspace(1)* %in
112 %ext = sext <16 x i8> %load to <16 x i32>
113 store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
114 ret void
115}
116
117; XFUNC-LABEL: {{^}}zextload_global_v32i8_to_v32i32:
118; XSI: s_endpgm
119; define void @zextload_global_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(1)* nocapture %in) nounwind {
120; %load = load <32 x i8> addrspace(1)* %in
121; %ext = zext <32 x i8> %load to <32 x i32>
122; store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
123; ret void
124; }
125
126; XFUNC-LABEL: {{^}}sextload_global_v32i8_to_v32i32:
127; XSI: s_endpgm
128; define void @sextload_global_v32i8_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i8> addrspace(1)* nocapture %in) nounwind {
129; %load = load <32 x i8> addrspace(1)* %in
130; %ext = sext <32 x i8> %load to <32 x i32>
131; store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
132; ret void
133; }
134
135; XFUNC-LABEL: {{^}}zextload_global_v64i8_to_v64i32:
136; XSI: s_endpgm
137; define void @zextload_global_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(1)* nocapture %in) nounwind {
138; %load = load <64 x i8> addrspace(1)* %in
139; %ext = zext <64 x i8> %load to <64 x i32>
140; store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
141; ret void
142; }
143
144; XFUNC-LABEL: {{^}}sextload_global_v64i8_to_v64i32:
145; XSI: s_endpgm
146; define void @sextload_global_v64i8_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i8> addrspace(1)* nocapture %in) nounwind {
147; %load = load <64 x i8> addrspace(1)* %in
148; %ext = sext <64 x i8> %load to <64 x i32>
149; store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
150; ret void
151; }
152
153; FUNC-LABEL: {{^}}zextload_global_i8_to_i64:
Matt Arsenaultedb6f032015-01-14 01:35:26 +0000154; SI: buffer_load_ubyte v[[LO:[0-9]+]],
155; SI: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
156; SI: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]]
Matt Arsenaultbd223422015-01-14 01:35:17 +0000157define void @zextload_global_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(1)* %in) nounwind {
158 %a = load i8 addrspace(1)* %in
159 %ext = zext i8 %a to i64
160 store i64 %ext, i64 addrspace(1)* %out
161 ret void
162}
163
164; FUNC-LABEL: {{^}}sextload_global_i8_to_i64:
165; SI: buffer_load_sbyte [[LOAD:v[0-9]+]],
166; SI: v_ashrrev_i32_e32 v{{[0-9]+}}, 31, [[LOAD]]
167; SI: buffer_store_dwordx2
168define void @sextload_global_i8_to_i64(i64 addrspace(1)* %out, i8 addrspace(1)* %in) nounwind {
169 %a = load i8 addrspace(1)* %in
170 %ext = sext i8 %a to i64
171 store i64 %ext, i64 addrspace(1)* %out
172 ret void
173}
174
175; FUNC-LABEL: {{^}}zextload_global_v1i8_to_v1i64:
176; SI: s_endpgm
177define void @zextload_global_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(1)* nocapture %in) nounwind {
178 %load = load <1 x i8> addrspace(1)* %in
179 %ext = zext <1 x i8> %load to <1 x i64>
180 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
181 ret void
182}
183
184; FUNC-LABEL: {{^}}sextload_global_v1i8_to_v1i64:
185; SI: s_endpgm
186define void @sextload_global_v1i8_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i8> addrspace(1)* nocapture %in) nounwind {
187 %load = load <1 x i8> addrspace(1)* %in
188 %ext = sext <1 x i8> %load to <1 x i64>
189 store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
190 ret void
191}
192
193; FUNC-LABEL: {{^}}zextload_global_v2i8_to_v2i64:
194; SI: s_endpgm
195define void @zextload_global_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(1)* nocapture %in) nounwind {
196 %load = load <2 x i8> addrspace(1)* %in
197 %ext = zext <2 x i8> %load to <2 x i64>
198 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
199 ret void
200}
201
202; FUNC-LABEL: {{^}}sextload_global_v2i8_to_v2i64:
203; SI: s_endpgm
204define void @sextload_global_v2i8_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i8> addrspace(1)* nocapture %in) nounwind {
205 %load = load <2 x i8> addrspace(1)* %in
206 %ext = sext <2 x i8> %load to <2 x i64>
207 store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
208 ret void
209}
210
211; FUNC-LABEL: {{^}}zextload_global_v4i8_to_v4i64:
212; SI: s_endpgm
213define void @zextload_global_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(1)* nocapture %in) nounwind {
214 %load = load <4 x i8> addrspace(1)* %in
215 %ext = zext <4 x i8> %load to <4 x i64>
216 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
217 ret void
218}
219
220; FUNC-LABEL: {{^}}sextload_global_v4i8_to_v4i64:
221; SI: s_endpgm
222define void @sextload_global_v4i8_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i8> addrspace(1)* nocapture %in) nounwind {
223 %load = load <4 x i8> addrspace(1)* %in
224 %ext = sext <4 x i8> %load to <4 x i64>
225 store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
226 ret void
227}
228
229; FUNC-LABEL: {{^}}zextload_global_v8i8_to_v8i64:
230; SI: s_endpgm
231define void @zextload_global_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(1)* nocapture %in) nounwind {
232 %load = load <8 x i8> addrspace(1)* %in
233 %ext = zext <8 x i8> %load to <8 x i64>
234 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
235 ret void
236}
237
238; FUNC-LABEL: {{^}}sextload_global_v8i8_to_v8i64:
239; SI: s_endpgm
240define void @sextload_global_v8i8_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i8> addrspace(1)* nocapture %in) nounwind {
241 %load = load <8 x i8> addrspace(1)* %in
242 %ext = sext <8 x i8> %load to <8 x i64>
243 store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
244 ret void
245}
246
247; FUNC-LABEL: {{^}}zextload_global_v16i8_to_v16i64:
248; SI: s_endpgm
249define void @zextload_global_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(1)* nocapture %in) nounwind {
250 %load = load <16 x i8> addrspace(1)* %in
251 %ext = zext <16 x i8> %load to <16 x i64>
252 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
253 ret void
254}
255
256; FUNC-LABEL: {{^}}sextload_global_v16i8_to_v16i64:
257; SI: s_endpgm
258define void @sextload_global_v16i8_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i8> addrspace(1)* nocapture %in) nounwind {
259 %load = load <16 x i8> addrspace(1)* %in
260 %ext = sext <16 x i8> %load to <16 x i64>
261 store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
262 ret void
263}
264
265; XFUNC-LABEL: {{^}}zextload_global_v32i8_to_v32i64:
266; XSI: s_endpgm
267; define void @zextload_global_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(1)* nocapture %in) nounwind {
268; %load = load <32 x i8> addrspace(1)* %in
269; %ext = zext <32 x i8> %load to <32 x i64>
270; store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
271; ret void
272; }
273
274; XFUNC-LABEL: {{^}}sextload_global_v32i8_to_v32i64:
275; XSI: s_endpgm
276; define void @sextload_global_v32i8_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i8> addrspace(1)* nocapture %in) nounwind {
277; %load = load <32 x i8> addrspace(1)* %in
278; %ext = sext <32 x i8> %load to <32 x i64>
279; store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
280; ret void
281; }
282
283; XFUNC-LABEL: {{^}}zextload_global_v64i8_to_v64i64:
284; XSI: s_endpgm
285; define void @zextload_global_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(1)* nocapture %in) nounwind {
286; %load = load <64 x i8> addrspace(1)* %in
287; %ext = zext <64 x i8> %load to <64 x i64>
288; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
289; ret void
290; }
291
292; XFUNC-LABEL: {{^}}sextload_global_v64i8_to_v64i64:
293; XSI: s_endpgm
294; define void @sextload_global_v64i8_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i8> addrspace(1)* nocapture %in) nounwind {
295; %load = load <64 x i8> addrspace(1)* %in
296; %ext = sext <64 x i8> %load to <64 x i64>
297; store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
298; ret void
299; }