1 ; 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
4 ; FUNC-LABEL: {{^}}zextload_global_i8_to_i32:
5 ; SI: buffer_load_ubyte
6 ; SI: buffer_store_dword
8 define 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
15 ; FUNC-LABEL: {{^}}sextload_global_i8_to_i32:
16 ; SI: buffer_load_sbyte
17 ; SI: buffer_store_dword
19 define 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
26 ; FUNC-LABEL: {{^}}zextload_global_v1i8_to_v1i32:
28 define 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
35 ; FUNC-LABEL: {{^}}sextload_global_v1i8_to_v1i32:
37 define 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
44 ; FUNC-LABEL: {{^}}zextload_global_v2i8_to_v2i32:
46 define 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
53 ; FUNC-LABEL: {{^}}sextload_global_v2i8_to_v2i32:
55 define 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
62 ; FUNC-LABEL: {{^}}zextload_global_v4i8_to_v4i32:
64 define 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
71 ; FUNC-LABEL: {{^}}sextload_global_v4i8_to_v4i32:
73 define 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
80 ; FUNC-LABEL: {{^}}zextload_global_v8i8_to_v8i32:
82 define 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
89 ; FUNC-LABEL: {{^}}sextload_global_v8i8_to_v8i32:
91 define 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
98 ; FUNC-LABEL: {{^}}zextload_global_v16i8_to_v16i32:
100 define 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
107 ; FUNC-LABEL: {{^}}sextload_global_v16i8_to_v16i32:
109 define 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
116 ; XFUNC-LABEL: {{^}}zextload_global_v32i8_to_v32i32:
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
125 ; XFUNC-LABEL: {{^}}sextload_global_v32i8_to_v32i32:
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
134 ; XFUNC-LABEL: {{^}}zextload_global_v64i8_to_v64i32:
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
143 ; XFUNC-LABEL: {{^}}sextload_global_v64i8_to_v64i32:
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
152 ; FUNC-LABEL: {{^}}zextload_global_i8_to_i64:
153 ; SI: buffer_load_ubyte [[LOAD:v[0-9]+]],
154 ; SI: v_mov_b32_e32 {{v[0-9]+}}, 0{{$}}
155 ; SI: buffer_store_dwordx2
156 define 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
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
167 define 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
174 ; FUNC-LABEL: {{^}}zextload_global_v1i8_to_v1i64:
176 define 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
183 ; FUNC-LABEL: {{^}}sextload_global_v1i8_to_v1i64:
185 define 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
192 ; FUNC-LABEL: {{^}}zextload_global_v2i8_to_v2i64:
194 define 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
201 ; FUNC-LABEL: {{^}}sextload_global_v2i8_to_v2i64:
203 define 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
210 ; FUNC-LABEL: {{^}}zextload_global_v4i8_to_v4i64:
212 define 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
219 ; FUNC-LABEL: {{^}}sextload_global_v4i8_to_v4i64:
221 define 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
228 ; FUNC-LABEL: {{^}}zextload_global_v8i8_to_v8i64:
230 define 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
237 ; FUNC-LABEL: {{^}}sextload_global_v8i8_to_v8i64:
239 define 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
246 ; FUNC-LABEL: {{^}}zextload_global_v16i8_to_v16i64:
248 define 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
255 ; FUNC-LABEL: {{^}}sextload_global_v16i8_to_v16i64:
257 define 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
264 ; XFUNC-LABEL: {{^}}zextload_global_v32i8_to_v32i64:
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
273 ; XFUNC-LABEL: {{^}}sextload_global_v32i8_to_v32i64:
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
282 ; XFUNC-LABEL: {{^}}zextload_global_v64i8_to_v64i64:
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
291 ; XFUNC-LABEL: {{^}}sextload_global_v64i8_to_v64i64:
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