R600: Try to use lower types for 64bit division if possible
[oota-llvm.git] / test / CodeGen / R600 / global-extload-i1.ll
1 ; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs< %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
2 ; XUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
3 ; FIXME: Evergreen broken
4
5 ; FUNC-LABEL: {{^}}zextload_global_i1_to_i32:
6 ; SI: buffer_load_ubyte
7 ; SI: buffer_store_dword
8 ; SI: s_endpgm
9 define void @zextload_global_i1_to_i32(i32 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
10   %a = load i1 addrspace(1)* %in
11   %ext = zext i1 %a to i32
12   store i32 %ext, i32 addrspace(1)* %out
13   ret void
14 }
15
16 ; FUNC-LABEL: {{^}}sextload_global_i1_to_i32:
17 ; SI: buffer_load_ubyte
18 ; SI: v_bfe_i32 {{v[0-9]+}}, {{v[0-9]+}}, 0, 1{{$}}
19 ; SI: buffer_store_dword
20 ; SI: s_endpgm
21 define void @sextload_global_i1_to_i32(i32 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
22   %a = load i1 addrspace(1)* %in
23   %ext = sext i1 %a to i32
24   store i32 %ext, i32 addrspace(1)* %out
25   ret void
26 }
27
28 ; FUNC-LABEL: {{^}}zextload_global_v1i1_to_v1i32:
29 ; SI: s_endpgm
30 define void @zextload_global_v1i1_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i1> addrspace(1)* nocapture %in) nounwind {
31   %load = load <1 x i1> addrspace(1)* %in
32   %ext = zext <1 x i1> %load to <1 x i32>
33   store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
34   ret void
35 }
36
37 ; FUNC-LABEL: {{^}}sextload_global_v1i1_to_v1i32:
38 ; SI: s_endpgm
39 define void @sextload_global_v1i1_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i1> addrspace(1)* nocapture %in) nounwind {
40   %load = load <1 x i1> addrspace(1)* %in
41   %ext = sext <1 x i1> %load to <1 x i32>
42   store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
43   ret void
44 }
45
46 ; FUNC-LABEL: {{^}}zextload_global_v2i1_to_v2i32:
47 ; SI: s_endpgm
48 define void @zextload_global_v2i1_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i1> addrspace(1)* nocapture %in) nounwind {
49   %load = load <2 x i1> addrspace(1)* %in
50   %ext = zext <2 x i1> %load to <2 x i32>
51   store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
52   ret void
53 }
54
55 ; FUNC-LABEL: {{^}}sextload_global_v2i1_to_v2i32:
56 ; SI: s_endpgm
57 define void @sextload_global_v2i1_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i1> addrspace(1)* nocapture %in) nounwind {
58   %load = load <2 x i1> addrspace(1)* %in
59   %ext = sext <2 x i1> %load to <2 x i32>
60   store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
61   ret void
62 }
63
64 ; FUNC-LABEL: {{^}}zextload_global_v4i1_to_v4i32:
65 ; SI: s_endpgm
66 define void @zextload_global_v4i1_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i1> addrspace(1)* nocapture %in) nounwind {
67   %load = load <4 x i1> addrspace(1)* %in
68   %ext = zext <4 x i1> %load to <4 x i32>
69   store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
70   ret void
71 }
72
73 ; FUNC-LABEL: {{^}}sextload_global_v4i1_to_v4i32:
74 ; SI: s_endpgm
75 define void @sextload_global_v4i1_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i1> addrspace(1)* nocapture %in) nounwind {
76   %load = load <4 x i1> addrspace(1)* %in
77   %ext = sext <4 x i1> %load to <4 x i32>
78   store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
79   ret void
80 }
81
82 ; FUNC-LABEL: {{^}}zextload_global_v8i1_to_v8i32:
83 ; SI: s_endpgm
84 define void @zextload_global_v8i1_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i1> addrspace(1)* nocapture %in) nounwind {
85   %load = load <8 x i1> addrspace(1)* %in
86   %ext = zext <8 x i1> %load to <8 x i32>
87   store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
88   ret void
89 }
90
91 ; FUNC-LABEL: {{^}}sextload_global_v8i1_to_v8i32:
92 ; SI: s_endpgm
93 define void @sextload_global_v8i1_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i1> addrspace(1)* nocapture %in) nounwind {
94   %load = load <8 x i1> addrspace(1)* %in
95   %ext = sext <8 x i1> %load to <8 x i32>
96   store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
97   ret void
98 }
99
100 ; FUNC-LABEL: {{^}}zextload_global_v16i1_to_v16i32:
101 ; SI: s_endpgm
102 define void @zextload_global_v16i1_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i1> addrspace(1)* nocapture %in) nounwind {
103   %load = load <16 x i1> addrspace(1)* %in
104   %ext = zext <16 x i1> %load to <16 x i32>
105   store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
106   ret void
107 }
108
109 ; FUNC-LABEL: {{^}}sextload_global_v16i1_to_v16i32:
110 ; SI: s_endpgm
111 define void @sextload_global_v16i1_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i1> addrspace(1)* nocapture %in) nounwind {
112   %load = load <16 x i1> addrspace(1)* %in
113   %ext = sext <16 x i1> %load to <16 x i32>
114   store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
115   ret void
116 }
117
118 ; XFUNC-LABEL: {{^}}zextload_global_v32i1_to_v32i32:
119 ; XSI: s_endpgm
120 ; define void @zextload_global_v32i1_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i1> addrspace(1)* nocapture %in) nounwind {
121 ;   %load = load <32 x i1> addrspace(1)* %in
122 ;   %ext = zext <32 x i1> %load to <32 x i32>
123 ;   store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
124 ;   ret void
125 ; }
126
127 ; XFUNC-LABEL: {{^}}sextload_global_v32i1_to_v32i32:
128 ; XSI: s_endpgm
129 ; define void @sextload_global_v32i1_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i1> addrspace(1)* nocapture %in) nounwind {
130 ;   %load = load <32 x i1> addrspace(1)* %in
131 ;   %ext = sext <32 x i1> %load to <32 x i32>
132 ;   store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
133 ;   ret void
134 ; }
135
136 ; XFUNC-LABEL: {{^}}zextload_global_v64i1_to_v64i32:
137 ; XSI: s_endpgm
138 ; define void @zextload_global_v64i1_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i1> addrspace(1)* nocapture %in) nounwind {
139 ;   %load = load <64 x i1> addrspace(1)* %in
140 ;   %ext = zext <64 x i1> %load to <64 x i32>
141 ;   store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
142 ;   ret void
143 ; }
144
145 ; XFUNC-LABEL: {{^}}sextload_global_v64i1_to_v64i32:
146 ; XSI: s_endpgm
147 ; define void @sextload_global_v64i1_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i1> addrspace(1)* nocapture %in) nounwind {
148 ;   %load = load <64 x i1> addrspace(1)* %in
149 ;   %ext = sext <64 x i1> %load to <64 x i32>
150 ;   store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
151 ;   ret void
152 ; }
153
154 ; FUNC-LABEL: {{^}}zextload_global_i1_to_i64:
155 ; SI: buffer_load_ubyte [[LOAD:v[0-9]+]],
156 ; SI: v_mov_b32_e32 {{v[0-9]+}}, 0{{$}}
157 ; SI: buffer_store_dwordx2
158 define void @zextload_global_i1_to_i64(i64 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
159   %a = load i1 addrspace(1)* %in
160   %ext = zext i1 %a to i64
161   store i64 %ext, i64 addrspace(1)* %out
162   ret void
163 }
164
165 ; FUNC-LABEL: {{^}}sextload_global_i1_to_i64:
166 ; SI: buffer_load_ubyte [[LOAD:v[0-9]+]],
167 ; SI: v_bfe_i32 [[BFE:v[0-9]+]], {{v[0-9]+}}, 0, 1{{$}}
168 ; SI: v_ashrrev_i32_e32 v{{[0-9]+}}, 31, [[BFE]]
169 ; SI: buffer_store_dwordx2
170 define void @sextload_global_i1_to_i64(i64 addrspace(1)* %out, i1 addrspace(1)* %in) nounwind {
171   %a = load i1 addrspace(1)* %in
172   %ext = sext i1 %a to i64
173   store i64 %ext, i64 addrspace(1)* %out
174   ret void
175 }
176
177 ; FUNC-LABEL: {{^}}zextload_global_v1i1_to_v1i64:
178 ; SI: s_endpgm
179 define void @zextload_global_v1i1_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i1> addrspace(1)* nocapture %in) nounwind {
180   %load = load <1 x i1> addrspace(1)* %in
181   %ext = zext <1 x i1> %load to <1 x i64>
182   store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
183   ret void
184 }
185
186 ; FUNC-LABEL: {{^}}sextload_global_v1i1_to_v1i64:
187 ; SI: s_endpgm
188 define void @sextload_global_v1i1_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i1> addrspace(1)* nocapture %in) nounwind {
189   %load = load <1 x i1> addrspace(1)* %in
190   %ext = sext <1 x i1> %load to <1 x i64>
191   store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
192   ret void
193 }
194
195 ; FUNC-LABEL: {{^}}zextload_global_v2i1_to_v2i64:
196 ; SI: s_endpgm
197 define void @zextload_global_v2i1_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i1> addrspace(1)* nocapture %in) nounwind {
198   %load = load <2 x i1> addrspace(1)* %in
199   %ext = zext <2 x i1> %load to <2 x i64>
200   store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
201   ret void
202 }
203
204 ; FUNC-LABEL: {{^}}sextload_global_v2i1_to_v2i64:
205 ; SI: s_endpgm
206 define void @sextload_global_v2i1_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i1> addrspace(1)* nocapture %in) nounwind {
207   %load = load <2 x i1> addrspace(1)* %in
208   %ext = sext <2 x i1> %load to <2 x i64>
209   store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
210   ret void
211 }
212
213 ; FUNC-LABEL: {{^}}zextload_global_v4i1_to_v4i64:
214 ; SI: s_endpgm
215 define void @zextload_global_v4i1_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i1> addrspace(1)* nocapture %in) nounwind {
216   %load = load <4 x i1> addrspace(1)* %in
217   %ext = zext <4 x i1> %load to <4 x i64>
218   store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
219   ret void
220 }
221
222 ; FUNC-LABEL: {{^}}sextload_global_v4i1_to_v4i64:
223 ; SI: s_endpgm
224 define void @sextload_global_v4i1_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i1> addrspace(1)* nocapture %in) nounwind {
225   %load = load <4 x i1> addrspace(1)* %in
226   %ext = sext <4 x i1> %load to <4 x i64>
227   store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
228   ret void
229 }
230
231 ; FUNC-LABEL: {{^}}zextload_global_v8i1_to_v8i64:
232 ; SI: s_endpgm
233 define void @zextload_global_v8i1_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i1> addrspace(1)* nocapture %in) nounwind {
234   %load = load <8 x i1> addrspace(1)* %in
235   %ext = zext <8 x i1> %load to <8 x i64>
236   store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
237   ret void
238 }
239
240 ; FUNC-LABEL: {{^}}sextload_global_v8i1_to_v8i64:
241 ; SI: s_endpgm
242 define void @sextload_global_v8i1_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i1> addrspace(1)* nocapture %in) nounwind {
243   %load = load <8 x i1> addrspace(1)* %in
244   %ext = sext <8 x i1> %load to <8 x i64>
245   store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
246   ret void
247 }
248
249 ; FUNC-LABEL: {{^}}zextload_global_v16i1_to_v16i64:
250 ; SI: s_endpgm
251 define void @zextload_global_v16i1_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i1> addrspace(1)* nocapture %in) nounwind {
252   %load = load <16 x i1> addrspace(1)* %in
253   %ext = zext <16 x i1> %load to <16 x i64>
254   store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
255   ret void
256 }
257
258 ; FUNC-LABEL: {{^}}sextload_global_v16i1_to_v16i64:
259 ; SI: s_endpgm
260 define void @sextload_global_v16i1_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i1> addrspace(1)* nocapture %in) nounwind {
261   %load = load <16 x i1> addrspace(1)* %in
262   %ext = sext <16 x i1> %load to <16 x i64>
263   store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
264   ret void
265 }
266
267 ; XFUNC-LABEL: {{^}}zextload_global_v32i1_to_v32i64:
268 ; XSI: s_endpgm
269 ; define void @zextload_global_v32i1_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i1> addrspace(1)* nocapture %in) nounwind {
270 ;   %load = load <32 x i1> addrspace(1)* %in
271 ;   %ext = zext <32 x i1> %load to <32 x i64>
272 ;   store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
273 ;   ret void
274 ; }
275
276 ; XFUNC-LABEL: {{^}}sextload_global_v32i1_to_v32i64:
277 ; XSI: s_endpgm
278 ; define void @sextload_global_v32i1_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i1> addrspace(1)* nocapture %in) nounwind {
279 ;   %load = load <32 x i1> addrspace(1)* %in
280 ;   %ext = sext <32 x i1> %load to <32 x i64>
281 ;   store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
282 ;   ret void
283 ; }
284
285 ; XFUNC-LABEL: {{^}}zextload_global_v64i1_to_v64i64:
286 ; XSI: s_endpgm
287 ; define void @zextload_global_v64i1_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i1> addrspace(1)* nocapture %in) nounwind {
288 ;   %load = load <64 x i1> addrspace(1)* %in
289 ;   %ext = zext <64 x i1> %load to <64 x i64>
290 ;   store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
291 ;   ret void
292 ; }
293
294 ; XFUNC-LABEL: {{^}}sextload_global_v64i1_to_v64i64:
295 ; XSI: s_endpgm
296 ; define void @sextload_global_v64i1_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i1> addrspace(1)* nocapture %in) nounwind {
297 ;   %load = load <64 x i1> addrspace(1)* %in
298 ;   %ext = sext <64 x i1> %load to <64 x i64>
299 ;   store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
300 ;   ret void
301 ; }