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