f4188dd04866ca1a1344620b0a31e7f42cd48a54
[oota-llvm.git] / test / CodeGen / R600 / global-extload-i8.ll
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
3
4 ; FUNC-LABEL: {{^}}zextload_global_i8_to_i32:
5 ; SI: buffer_load_ubyte
6 ; SI: buffer_store_dword
7 ; SI: s_endpgm
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
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
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
23   ret void
24 }
25
26 ; FUNC-LABEL: {{^}}zextload_global_v1i8_to_v1i32:
27 ; SI: s_endpgm
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
32   ret void
33 }
34
35 ; FUNC-LABEL: {{^}}sextload_global_v1i8_to_v1i32:
36 ; SI: s_endpgm
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
41   ret void
42 }
43
44 ; FUNC-LABEL: {{^}}zextload_global_v2i8_to_v2i32:
45 ; SI: s_endpgm
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
50   ret void
51 }
52
53 ; FUNC-LABEL: {{^}}sextload_global_v2i8_to_v2i32:
54 ; SI: s_endpgm
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
59   ret void
60 }
61
62 ; FUNC-LABEL: {{^}}zextload_global_v4i8_to_v4i32:
63 ; SI: s_endpgm
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
68   ret void
69 }
70
71 ; FUNC-LABEL: {{^}}sextload_global_v4i8_to_v4i32:
72 ; SI: s_endpgm
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
77   ret void
78 }
79
80 ; FUNC-LABEL: {{^}}zextload_global_v8i8_to_v8i32:
81 ; SI: s_endpgm
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
86   ret void
87 }
88
89 ; FUNC-LABEL: {{^}}sextload_global_v8i8_to_v8i32:
90 ; SI: s_endpgm
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
95   ret void
96 }
97
98 ; FUNC-LABEL: {{^}}zextload_global_v16i8_to_v16i32:
99 ; SI: s_endpgm
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
104   ret void
105 }
106
107 ; FUNC-LABEL: {{^}}sextload_global_v16i8_to_v16i32:
108 ; SI: s_endpgm
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
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:
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
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
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
171   ret void
172 }
173
174 ; FUNC-LABEL: {{^}}zextload_global_v1i8_to_v1i64:
175 ; SI: s_endpgm
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
180   ret void
181 }
182
183 ; FUNC-LABEL: {{^}}sextload_global_v1i8_to_v1i64:
184 ; SI: s_endpgm
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
189   ret void
190 }
191
192 ; FUNC-LABEL: {{^}}zextload_global_v2i8_to_v2i64:
193 ; SI: s_endpgm
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
198   ret void
199 }
200
201 ; FUNC-LABEL: {{^}}sextload_global_v2i8_to_v2i64:
202 ; SI: s_endpgm
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
207   ret void
208 }
209
210 ; FUNC-LABEL: {{^}}zextload_global_v4i8_to_v4i64:
211 ; SI: s_endpgm
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
216   ret void
217 }
218
219 ; FUNC-LABEL: {{^}}sextload_global_v4i8_to_v4i64:
220 ; SI: s_endpgm
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
225   ret void
226 }
227
228 ; FUNC-LABEL: {{^}}zextload_global_v8i8_to_v8i64:
229 ; SI: s_endpgm
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
234   ret void
235 }
236
237 ; FUNC-LABEL: {{^}}sextload_global_v8i8_to_v8i64:
238 ; SI: s_endpgm
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
243   ret void
244 }
245
246 ; FUNC-LABEL: {{^}}zextload_global_v16i8_to_v16i64:
247 ; SI: s_endpgm
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
252   ret void
253 }
254
255 ; FUNC-LABEL: {{^}}sextload_global_v16i8_to_v16i64:
256 ; SI: s_endpgm
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
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 ; }