OLD | NEW |
---|---|
(Empty) | |
1 ; Tests if we can read cast operations. | |
2 | |
3 ; RUN: llvm-as < %s | pnacl-freeze \ | |
4 ; RUN: | %llvm2ice -notranslate -verbose=inst -build-on-read \ | |
5 ; RUN: -allow-pnacl-reader-error-recovery \ | |
6 ; RUN: | FileCheck %s | |
7 | |
8 ; TODO(kschimpf) Find way to test pointer conversions (since they in general | |
9 ; get removed by pnacl-freeze). | |
10 | |
11 define i32 @TruncI64(i64 %v) { | |
12 %v1 = trunc i64 %v to i1 | |
13 %v8 = trunc i64 %v to i8 | |
14 %v16 = trunc i64 %v to i16 | |
15 %v32 = trunc i64 %v to i32 | |
16 ret i32 %v32 | |
17 } | |
18 | |
19 ; CHECK: define i32 @TruncI64(i64 %__0) { | |
20 ; CHECK-NEXT: __0: | |
21 ; CHECK-NEXT: %__1 = trunc i64 %__0 to i1 | |
22 ; CHECK-NEXT: %__2 = trunc i64 %__0 to i8 | |
23 ; CHECK-NEXT: %__3 = trunc i64 %__0 to i16 | |
24 ; CHECK-NEXT: %__4 = trunc i64 %__0 to i32 | |
25 ; CHECK-NEXT: ret i32 %__4 | |
26 ; CHECK-NEXT: } | |
27 | |
28 define void @TruncI32(i32 %v) { | |
29 %v1 = trunc i32 %v to i1 | |
30 %v8 = trunc i32 %v to i8 | |
31 %v16 = trunc i32 %v to i16 | |
32 ret void | |
33 } | |
34 | |
35 ; CHECK-NEXT: define void @TruncI32(i32 %__0) { | |
36 ; CHECK-NEXT: __0: | |
37 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i1 | |
38 ; CHECK-NEXT: %__2 = trunc i32 %__0 to i8 | |
39 ; CHECK-NEXT: %__3 = trunc i32 %__0 to i16 | |
40 ; CHECK-NEXT: ret void | |
41 ; CHECK-NEXT: } | |
42 | |
43 define void @TruncI16(i32 %p) { | |
44 %v = trunc i32 %p to i16 | |
45 %v1 = trunc i16 %v to i1 | |
46 %v8 = trunc i16 %v to i8 | |
47 ret void | |
48 } | |
49 | |
50 ; CHECK-NEXT: define void @TruncI16(i32 %__0) { | |
51 ; CHECK-NEXT: __0: | |
52 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i16 | |
53 ; CHECK-NEXT: %__2 = trunc i16 %__1 to i1 | |
54 ; CHECK-NEXT: %__3 = trunc i16 %__1 to i8 | |
55 ; CHECK-NEXT: ret void | |
56 ; CHECK-NEXT: } | |
57 | |
58 define void @TruncI8(i32 %p) { | |
59 %v = trunc i32 %p to i8 | |
60 %v1 = trunc i8 %v to i1 | |
61 ret void | |
62 } | |
63 | |
64 ; CHECK-NEXT: define void @TruncI8(i32 %__0) { | |
65 ; CHECK-NEXT: __0: | |
66 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i8 | |
67 ; CHECK-NEXT: %__2 = trunc i8 %__1 to i1 | |
68 ; CHECK-NEXT: ret void | |
69 ; CHECK-NEXT: } | |
70 | |
71 define i64 @ZextI1(i32 %p) { | |
72 %v = trunc i32 %p to i1 | |
73 %v8 = zext i1 %v to i8 | |
74 %v16 = zext i1 %v to i16 | |
75 %v32 = zext i1 %v to i32 | |
76 %v64 = zext i1 %v to i64 | |
77 ret i64 %v64 | |
78 } | |
79 | |
80 ; CHECK-NEXT: define i64 @ZextI1(i32 %__0) { | |
81 ; CHECK-NEXT: __0: | |
82 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i1 | |
83 ; CHECK-NEXT: %__2 = zext i1 %__1 to i8 | |
84 ; CHECK-NEXT: %__3 = zext i1 %__1 to i16 | |
85 ; CHECK-NEXT: %__4 = zext i1 %__1 to i32 | |
86 ; CHECK-NEXT: %__5 = zext i1 %__1 to i64 | |
87 ; CHECK-NEXT: ret i64 %__5 | |
88 ; CHECK-NEXT: } | |
89 | |
90 define i32 @ZextI8(i32 %p) { | |
91 %v = trunc i32 %p to i8 | |
92 %v16 = zext i8 %v to i16 | |
93 %v32 = zext i8 %v to i32 | |
94 %v64 = zext i8 %v to i64 | |
95 ret i32 %v32 | |
96 } | |
97 | |
98 ; CHECK-NEXT: define i32 @ZextI8(i32 %__0) { | |
99 ; CHECK-NEXT: __0: | |
100 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i8 | |
101 ; CHECK-NEXT: %__2 = zext i8 %__1 to i16 | |
102 ; CHECK-NEXT: %__3 = zext i8 %__1 to i32 | |
103 ; CHECK-NEXT: %__4 = zext i8 %__1 to i64 | |
104 ; CHECK-NEXT: ret i32 %__3 | |
105 ; CHECK-NEXT: } | |
106 | |
107 define i64 @ZextI16(i32 %p) { | |
108 %v = trunc i32 %p to i16 | |
109 %v32 = zext i16 %v to i32 | |
110 %v64 = zext i16 %v to i64 | |
111 ret i64 %v64 | |
112 } | |
113 | |
114 ; CHECK-NEXT: define i64 @ZextI16(i32 %__0) { | |
115 ; CHECK-NEXT: __0: | |
116 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i16 | |
117 ; CHECK-NEXT: %__2 = zext i16 %__1 to i32 | |
118 ; CHECK-NEXT: %__3 = zext i16 %__1 to i64 | |
119 ; CHECK-NEXT: ret i64 %__3 | |
120 ; CHECK-NEXT: } | |
121 | |
122 define i64 @Zexti32(i32 %v) { | |
123 %v64 = zext i32 %v to i64 | |
124 ret i64 %v64 | |
125 } | |
126 | |
127 ; CHECK-NEXT: define i64 @Zexti32(i32 %__0) { | |
128 ; CHECK-NEXT: __0: | |
129 ; CHECK-NEXT: %__1 = zext i32 %__0 to i64 | |
130 ; CHECK-NEXT: ret i64 %__1 | |
131 ; CHECK-NEXT: } | |
132 | |
133 define i32 @SextI1(i32 %p) { | |
134 %v = trunc i32 %p to i1 | |
135 %v8 = sext i1 %v to i8 | |
136 %v16 = sext i1 %v to i16 | |
137 %v32 = sext i1 %v to i32 | |
138 %v64 = sext i1 %v to i64 | |
139 ret i32 %v32 | |
140 } | |
141 | |
142 ; CHECK-NEXT: define i32 @SextI1(i32 %__0) { | |
143 ; CHECK-NEXT: __0: | |
144 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i1 | |
145 ; CHECK-NEXT: %__2 = sext i1 %__1 to i8 | |
146 ; CHECK-NEXT: %__3 = sext i1 %__1 to i16 | |
147 ; CHECK-NEXT: %__4 = sext i1 %__1 to i32 | |
148 ; CHECK-NEXT: %__5 = sext i1 %__1 to i64 | |
149 ; CHECK-NEXT: ret i32 %__4 | |
150 ; CHECK-NEXT: } | |
151 | |
152 define i64 @SextI8(i32 %p) { | |
153 %v = trunc i32 %p to i8 | |
154 %v16 = sext i8 %v to i16 | |
155 %v32 = sext i8 %v to i32 | |
156 %v64 = sext i8 %v to i64 | |
157 ret i64 %v64 | |
158 } | |
159 | |
160 ; CHECK-NEXT: define i64 @SextI8(i32 %__0) { | |
161 ; CHECK-NEXT: __0: | |
162 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i8 | |
163 ; CHECK-NEXT: %__2 = sext i8 %__1 to i16 | |
164 ; CHECK-NEXT: %__3 = sext i8 %__1 to i32 | |
165 ; CHECK-NEXT: %__4 = sext i8 %__1 to i64 | |
166 ; CHECK-NEXT: ret i64 %__4 | |
167 ; CHECK-NEXT: } | |
168 | |
169 define i32 @SextI16(i32 %p) { | |
170 %v = trunc i32 %p to i16 | |
171 %v32 = sext i16 %v to i32 | |
172 %v64 = sext i16 %v to i64 | |
173 ret i32 %v32 | |
174 } | |
175 | |
176 ; CHECK-NEXT: define i32 @SextI16(i32 %__0) { | |
177 ; CHECK-NEXT: __0: | |
178 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i16 | |
179 ; CHECK-NEXT: %__2 = sext i16 %__1 to i32 | |
180 ; CHECK-NEXT: %__3 = sext i16 %__1 to i64 | |
181 ; CHECK-NEXT: ret i32 %__2 | |
182 ; CHECK-NEXT: } | |
183 | |
184 define i64 @Sexti32(i32 %v) { | |
185 %v64 = sext i32 %v to i64 | |
186 ret i64 %v64 | |
187 } | |
188 | |
189 ; CHECK-NEXT: define i64 @Sexti32(i32 %__0) { | |
190 ; CHECK-NEXT: __0: | |
191 ; CHECK-NEXT: %__1 = sext i32 %__0 to i64 | |
192 ; CHECK-NEXT: ret i64 %__1 | |
193 ; CHECK-NEXT: } | |
194 | |
195 define float @Fptrunc(double %v) { | |
196 %vfloat = fptrunc double %v to float | |
197 ret float %vfloat | |
198 } | |
199 | |
200 ; CHECK-NEXT: define float @Fptrunc(double %__0) { | |
201 ; CHECK-NEXT: __0: | |
202 ; CHECK-NEXT: %__1 = fptrunc double %__0 to float | |
203 ; CHECK-NEXT: ret float %__1 | |
204 ; CHECK-NEXT: } | |
205 | |
206 define double @Fpext(float %v) { | |
207 %vdouble = fpext float %v to double | |
208 ret double %vdouble | |
209 } | |
210 | |
211 ; CHECK-NEXT: define double @Fpext(float %__0) { | |
212 ; CHECK-NEXT: __0: | |
213 ; CHECK-NEXT: %__1 = fpext float %__0 to double | |
214 ; CHECK-NEXT: ret double %__1 | |
215 ; CHECK-NEXT: } | |
216 | |
217 define i32 @FptouiFloat(float %v) { | |
218 %v1 = fptoui float %v to i1 | |
219 %v8 = fptoui float %v to i8 | |
220 %v16 = fptoui float %v to i16 | |
221 %v32 = fptoui float %v to i32 | |
222 %v64 = fptoui float %v to i64 | |
223 ret i32 %v32 | |
224 } | |
225 | |
226 ; CHECK-NEXT: define i32 @FptouiFloat(float %__0) { | |
227 ; CHECK-NEXT: __0: | |
228 ; CHECK-NEXT: %__1 = fptoui float %__0 to i1 | |
229 ; CHECK-NEXT: %__2 = fptoui float %__0 to i8 | |
230 ; CHECK-NEXT: %__3 = fptoui float %__0 to i16 | |
231 ; CHECK-NEXT: %__4 = fptoui float %__0 to i32 | |
232 ; CHECK-NEXT: %__5 = fptoui float %__0 to i64 | |
233 ; CHECK-NEXT: ret i32 %__4 | |
234 ; CHECK-NEXT: } | |
235 | |
236 define i32 @FptouiDouble(double %v) { | |
237 %v1 = fptoui double %v to i1 | |
238 %v8 = fptoui double %v to i8 | |
239 %v16 = fptoui double %v to i16 | |
240 %v32 = fptoui double %v to i32 | |
241 %v64 = fptoui double %v to i64 | |
242 ret i32 %v32 | |
243 } | |
244 | |
245 ; CHECK-NEXT: define i32 @FptouiDouble(double %__0) { | |
246 ; CHECK-NEXT: __0: | |
247 ; CHECK-NEXT: %__1 = fptoui double %__0 to i1 | |
248 ; CHECK-NEXT: %__2 = fptoui double %__0 to i8 | |
249 ; CHECK-NEXT: %__3 = fptoui double %__0 to i16 | |
250 ; CHECK-NEXT: %__4 = fptoui double %__0 to i32 | |
251 ; CHECK-NEXT: %__5 = fptoui double %__0 to i64 | |
252 ; CHECK-NEXT: ret i32 %__4 | |
253 ; CHECK-NEXT: } | |
254 | |
255 define i32 @FptosiFloat(float %v) { | |
256 %v1 = fptosi float %v to i1 | |
257 %v8 = fptosi float %v to i8 | |
258 %v16 = fptosi float %v to i16 | |
259 %v32 = fptosi float %v to i32 | |
260 %v64 = fptosi float %v to i64 | |
261 ret i32 %v32 | |
262 } | |
263 | |
264 ; CHECK-NEXT: define i32 @FptosiFloat(float %__0) { | |
265 ; CHECK-NEXT: __0: | |
266 ; CHECK-NEXT: %__1 = fptosi float %__0 to i1 | |
267 ; CHECK-NEXT: %__2 = fptosi float %__0 to i8 | |
268 ; CHECK-NEXT: %__3 = fptosi float %__0 to i16 | |
269 ; CHECK-NEXT: %__4 = fptosi float %__0 to i32 | |
270 ; CHECK-NEXT: %__5 = fptosi float %__0 to i64 | |
271 ; CHECK-NEXT: ret i32 %__4 | |
272 ; CHECK-NEXT: } | |
273 | |
274 define i32 @FptosiDouble(double %v) { | |
275 %v1 = fptosi double %v to i1 | |
276 %v8 = fptosi double %v to i8 | |
277 %v16 = fptosi double %v to i16 | |
278 %v32 = fptosi double %v to i32 | |
279 %v64 = fptosi double %v to i64 | |
280 ret i32 %v32 | |
281 } | |
282 | |
283 ; CHECK-NEXT: define i32 @FptosiDouble(double %__0) { | |
284 ; CHECK-NEXT: __0: | |
285 ; CHECK-NEXT: %__1 = fptosi double %__0 to i1 | |
286 ; CHECK-NEXT: %__2 = fptosi double %__0 to i8 | |
287 ; CHECK-NEXT: %__3 = fptosi double %__0 to i16 | |
288 ; CHECK-NEXT: %__4 = fptosi double %__0 to i32 | |
289 ; CHECK-NEXT: %__5 = fptosi double %__0 to i64 | |
290 ; CHECK-NEXT: ret i32 %__4 | |
291 ; CHECK-NEXT: } | |
292 | |
293 define float @UitofpI1(i32 %p) { | |
294 %v = trunc i32 %p to i1 | |
295 %vfloat = uitofp i1 %v to float | |
296 %vdouble = uitofp i1 %v to double | |
297 ret float %vfloat | |
298 } | |
299 | |
300 ; CHECK-NEXT: define float @UitofpI1(i32 %__0) { | |
301 ; CHECK-NEXT: __0: | |
302 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i1 | |
303 ; CHECK-NEXT: %__2 = uitofp i1 %__1 to float | |
304 ; CHECK-NEXT: %__3 = uitofp i1 %__1 to double | |
305 ; CHECK-NEXT: ret float %__2 | |
306 ; CHECK-NEXT: } | |
307 | |
308 define float @UitofpI8(i32 %p) { | |
309 %v = trunc i32 %p to i8 | |
310 %vfloat = uitofp i8 %v to float | |
311 %vdouble = uitofp i8 %v to double | |
312 ret float %vfloat | |
313 } | |
314 | |
315 ; CHECK-NEXT: define float @UitofpI8(i32 %__0) { | |
316 ; CHECK-NEXT: __0: | |
317 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i8 | |
318 ; CHECK-NEXT: %__2 = uitofp i8 %__1 to float | |
319 ; CHECK-NEXT: %__3 = uitofp i8 %__1 to double | |
320 ; CHECK-NEXT: ret float %__2 | |
321 ; CHECK-NEXT: } | |
322 | |
323 define float @UitofpI16(i32 %p) { | |
324 %v = trunc i32 %p to i16 | |
325 %vfloat = uitofp i16 %v to float | |
326 %vdouble = uitofp i16 %v to double | |
327 ret float %vfloat | |
328 } | |
329 | |
330 ; CHECK-NEXT: define float @UitofpI16(i32 %__0) { | |
331 ; CHECK-NEXT: __0: | |
332 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i16 | |
333 ; CHECK-NEXT: %__2 = uitofp i16 %__1 to float | |
334 ; CHECK-NEXT: %__3 = uitofp i16 %__1 to double | |
335 ; CHECK-NEXT: ret float %__2 | |
336 ; CHECK-NEXT: } | |
337 | |
338 define float @UitofpI32(i32 %v) { | |
339 %vfloat = uitofp i32 %v to float | |
340 %vdouble = uitofp i32 %v to double | |
341 ret float %vfloat | |
342 } | |
343 | |
344 ; CHECK-NEXT: define float @UitofpI32(i32 %__0) { | |
345 ; CHECK-NEXT: __0: | |
346 ; CHECK-NEXT: %__1 = uitofp i32 %__0 to float | |
347 ; CHECK-NEXT: %__2 = uitofp i32 %__0 to double | |
348 ; CHECK-NEXT: ret float %__1 | |
349 ; CHECK-NEXT: } | |
350 | |
351 define float @UitofpI64(i64 %v) { | |
352 %vfloat = uitofp i64 %v to float | |
353 %vdouble = uitofp i64 %v to double | |
354 ret float %vfloat | |
355 } | |
356 | |
357 ; CHECK-NEXT: define float @UitofpI64(i64 %__0) { | |
358 ; CHECK-NEXT: __0: | |
359 ; CHECK-NEXT: %__1 = uitofp i64 %__0 to float | |
360 ; CHECK-NEXT: %__2 = uitofp i64 %__0 to double | |
361 ; CHECK-NEXT: ret float %__1 | |
362 ; CHECK-NEXT: } | |
363 | |
364 define float @SitofpI1(i32 %p) { | |
365 %v = trunc i32 %p to i1 | |
366 %vfloat = sitofp i1 %v to float | |
367 %vdouble = sitofp i1 %v to double | |
368 ret float %vfloat | |
369 } | |
370 | |
371 ; CHECK-NEXT: define float @SitofpI1(i32 %__0) { | |
372 ; CHECK-NEXT: __0: | |
373 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i1 | |
374 ; CHECK-NEXT: %__2 = sitofp i1 %__1 to float | |
375 ; CHECK-NEXT: %__3 = sitofp i1 %__1 to double | |
376 ; CHECK-NEXT: ret float %__2 | |
377 ; CHECK-NEXT: } | |
378 | |
379 define float @SitofpI8(i32 %p) { | |
380 %v = trunc i32 %p to i8 | |
381 %vfloat = sitofp i8 %v to float | |
382 %vdouble = sitofp i8 %v to double | |
383 ret float %vfloat | |
384 } | |
385 | |
386 ; CHECK-NEXT: define float @SitofpI8(i32 %__0) { | |
387 ; CHECK-NEXT: __0: | |
388 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i8 | |
389 ; CHECK-NEXT: %__2 = sitofp i8 %__1 to float | |
390 ; CHECK-NEXT: %__3 = sitofp i8 %__1 to double | |
391 ; CHECK-NEXT: ret float %__2 | |
392 ; CHECK-NEXT: } | |
393 | |
394 define float @SitofpI16(i32 %p) { | |
395 %v = trunc i32 %p to i16 | |
396 %vfloat = sitofp i16 %v to float | |
397 %vdouble = sitofp i16 %v to double | |
398 ret float %vfloat | |
399 } | |
400 | |
401 ; CHECK-NEXT: define float @SitofpI16(i32 %__0) { | |
402 ; CHECK-NEXT: __0: | |
403 ; CHECK-NEXT: %__1 = trunc i32 %__0 to i16 | |
404 ; CHECK-NEXT: %__2 = sitofp i16 %__1 to float | |
405 ; CHECK-NEXT: %__3 = sitofp i16 %__1 to double | |
406 ; CHECK-NEXT: ret float %__2 | |
407 ; CHECK-NEXT: } | |
408 | |
409 define float @SitofpI32(i32 %v) { | |
410 %vfloat = sitofp i32 %v to float | |
411 %vdouble = sitofp i32 %v to double | |
412 ret float %vfloat | |
413 } | |
414 | |
415 ; CHECK-NEXT: define float @SitofpI32(i32 %__0) { | |
416 ; CHECK-NEXT: __0: | |
417 ; CHECK-NEXT: %__1 = sitofp i32 %__0 to float | |
418 ; CHECK-NEXT: %__2 = sitofp i32 %__0 to double | |
419 ; CHECK-NEXT: ret float %__1 | |
420 ; CHECK-NEXT: } | |
421 | |
422 define float @SitofpI64(i64 %v) { | |
423 %vfloat = sitofp i64 %v to float | |
424 %vdouble = sitofp i64 %v to double | |
425 ret float %vfloat | |
426 } | |
427 | |
428 ; CHECK-NEXT: define float @SitofpI64(i64 %__0) { | |
429 ; CHECK-NEXT: __0: | |
430 ; CHECK-NEXT: %__1 = sitofp i64 %__0 to float | |
431 ; CHECK-NEXT: %__2 = sitofp i64 %__0 to double | |
432 ; CHECK-NEXT: ret float %__1 | |
433 ; CHECK-NEXT: } | |
434 | |
435 define float @BitcastI32(i32 %v) { | |
436 %vfloat = bitcast i32 %v to float | |
437 ret float %vfloat | |
438 } | |
439 | |
440 ; CHECK-NEXT: define float @BitcastI32(i32 %__0) { | |
441 ; CHECK-NEXT: __0: | |
442 ; CHECK-NEXT: %__1 = bitcast i32 %__0 to float | |
443 ; CHECK-NEXT: ret float %__1 | |
444 ; CHECK-NEXT: } | |
445 | |
446 define double @BitcastI64(i64 %v) { | |
447 %vdouble = bitcast i64 %v to double | |
448 ret double %vdouble | |
449 } | |
450 | |
451 ; CHECK-NEXT: define double @BitcastI64(i64 %__0) { | |
452 ; CHECK-NEXT: __0: | |
453 ; CHECK-NEXT: %__1 = bitcast i64 %__0 to double | |
454 ; CHECK-NEXT: ret double %__1 | |
455 ; CHECK-NEXT: } | |
456 | |
457 define i32 @BitcastFloat(float %v) { | |
458 %vi32 = bitcast float %v to i32 | |
459 ret i32 %vi32 | |
460 } | |
461 | |
462 ; CHECK-NEXT: define i32 @BitcastFloat(float %__0) { | |
463 ; CHECK-NEXT: __0: | |
464 ; CHECK-NEXT: %__1 = bitcast float %__0 to i32 | |
465 ; CHECK-NEXT: ret i32 %__1 | |
466 ; CHECK-NEXT: } | |
467 | |
468 define i64 @BitcastDouble(double %v) { | |
469 %vi64 = bitcast double %v to i64 | |
470 ret i64 %vi64 | |
471 } | |
472 | |
473 ; CHECK-NEXT: define i64 @BitcastDouble(double %__0) { | |
474 ; CHECK-NEXT: __0: | |
475 ; CHECK-NEXT: %__1 = bitcast double %__0 to i64 | |
476 ; CHECK-NEXT: ret i64 %__1 | |
477 ; CHECK-NEXT: } | |
478 | |
479 define void @BitcastV4xFloat(<4 x float> %v) { | |
480 %v4xi32 = bitcast <4 x float> %v to <4 x i32> | |
481 %v8xi16 = bitcast <4 x float> %v to <8 x i16> | |
482 %v16xi8 = bitcast <4 x float> %v to <16 x i8> | |
483 ret void | |
484 } | |
485 | |
486 ; CHECK-NEXT: define void @BitcastV4xFloat(<4 x float> %__0) { | |
487 ; CHECK-NEXT: __0: | |
488 ; CHECK-NEXT: %__1 = bitcast <4 x float> %__0 to <4 x i32> | |
489 ; CHECK-NEXT: %__2 = bitcast <4 x float> %__0 to <8 x i16> | |
490 ; CHECK-NEXT: %__3 = bitcast <4 x float> %__0 to <16 x i8> | |
491 ; CHECK-NEXT: ret void | |
492 ; CHECK-NEXT: } | |
493 | |
494 define void @BitcastV4xi32(<4 x i32> %v) { | |
495 %v4xfloat = bitcast <4 x i32> %v to <4 x float> | |
496 %v8xi16 = bitcast <4 x i32> %v to <8 x i16> | |
497 %v16xi8 = bitcast <4 x i32> %v to <16 x i8> | |
498 ret void | |
499 } | |
500 | |
501 ; CHECK-NEXT: define void @BitcastV4xi32(<4 x i32> %__0) { | |
502 ; CHECK-NEXT: __0: | |
503 ; CHECK-NEXT: %__1 = bitcast <4 x i32> %__0 to <4 x float> | |
504 ; CHECK-NEXT: %__2 = bitcast <4 x i32> %__0 to <8 x i16> | |
505 ; CHECK-NEXT: %__3 = bitcast <4 x i32> %__0 to <16 x i8> | |
506 ; CHECK-NEXT: ret void | |
507 ; CHECK-NEXT: } | |
508 | |
509 define void @BitcastV4xi16(<8 x i16> %v) { | |
510 %v4xfloat = bitcast <8 x i16> %v to <4 x float> | |
511 %v4xi32 = bitcast <8 x i16> %v to <4 x i32> | |
512 %v16xi8 = bitcast <8 x i16> %v to <16 x i8> | |
513 ret void | |
514 } | |
515 | |
516 ; CHECK-NEXT: define void @BitcastV4xi16(<8 x i16> %__0) { | |
jvoung (off chromium)
2014/08/29 17:26:34
Function name should be V8xi16 ?
Karl
2014/09/02 17:47:57
Done.
| |
517 ; CHECK-NEXT: __0: | |
518 ; CHECK-NEXT: %__1 = bitcast <8 x i16> %__0 to <4 x float> | |
519 ; CHECK-NEXT: %__2 = bitcast <8 x i16> %__0 to <4 x i32> | |
520 ; CHECK-NEXT: %__3 = bitcast <8 x i16> %__0 to <16 x i8> | |
521 ; CHECK-NEXT: ret void | |
522 ; CHECK-NEXT: } | |
523 | |
524 define void @BitcastV16xi8(<16 x i8> %v) { | |
525 %v4xfloat = bitcast <16 x i8> %v to <4 x float> | |
526 %v4xi32 = bitcast <16 x i8> %v to <4 x i32> | |
527 %v8xi16 = bitcast <16 x i8> %v to <8 x i16> | |
528 ret void | |
529 } | |
530 | |
531 ; CHECK-NEXT: define void @BitcastV16xi8(<16 x i8> %__0) { | |
532 ; CHECK-NEXT: __0: | |
533 ; CHECK-NEXT: %__1 = bitcast <16 x i8> %__0 to <4 x float> | |
534 ; CHECK-NEXT: %__2 = bitcast <16 x i8> %__0 to <4 x i32> | |
535 ; CHECK-NEXT: %__3 = bitcast <16 x i8> %__0 to <8 x i16> | |
536 ; CHECK-NEXT: ret void | |
537 ; CHECK-NEXT: } | |
OLD | NEW |