Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(163)

Side by Side Diff: tests_lit/llvm2ice_tests/vector-cast.ll

Issue 383303003: Lower casting operations that involve vector types. (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: Fix formatting changes Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 ; This file tests casting / conversion operations that apply to vector types.
2
3 ; RUN: %llvm2ice -O2 --verbose none %s | FileCheck %s
4 ; RUN: %llvm2ice -Om1 --verbose none %s | FileCheck --check-prefix=OPTM1 %s
5 ; RUN: %llvm2ice --verbose none %s | FileCheck --check-prefix=ERRORS %s
6 ; RUN: %llvm2iceinsts %s | %szdiff %s | FileCheck --check-prefix=DUMP %s
7 ; RUN: %llvm2iceinsts --pnacl %s | %szdiff %s \
8 ; RUN: | FileCheck --check-prefix=DUMP %s
9
10 ; bitcast operations
11
12 define <16 x i8> @test_bitcast_v16i8_to_v16i8(<16 x i8> %arg) {
13 entry:
14 %res = bitcast <16 x i8> %arg to <16 x i8>
15 ret <16 x i8> %res
16
17 ; CHECK-LABEL: test_bitcast_v16i8_to_v16i8:
18 ; CHECK: .L{{.*}}entry:
19 ; CHECK-NEXT: ret
jvoung (off chromium) 2014/07/15 00:24:11 Are these the only cases where OPTM1 differs from
wala 2014/07/15 00:41:09 Yes, the test for bitcast is basically checking th
wala 2014/07/15 22:52:22 Done.
20 }
21
22 define <8 x i16> @test_bitcast_v16i8_to_v8i16(<16 x i8> %arg) {
23 entry:
24 %res = bitcast <16 x i8> %arg to <8 x i16>
25 ret <8 x i16> %res
26
27 ; CHECK-LABEL: test_bitcast_v16i8_to_v8i16:
28 ; CHECK: .L{{.*}}entry:
29 ; CHECK-NEXT: ret
30 }
31
32 define <4 x i32> @test_bitcast_v16i8_to_v4i32(<16 x i8> %arg) {
33 entry:
34 %res = bitcast <16 x i8> %arg to <4 x i32>
35 ret <4 x i32> %res
36
37 ; CHECK-LABEL: test_bitcast_v16i8_to_v4i32:
38 ; CHECK: .L{{.*}}entry:
39 ; CHECK-NEXT: ret
40 }
41
42 define <4 x float> @test_bitcast_v16i8_to_v4f32(<16 x i8> %arg) {
43 entry:
44 %res = bitcast <16 x i8> %arg to <4 x float>
45 ret <4 x float> %res
46
47 ; CHECK-LABEL: test_bitcast_v16i8_to_v4f32:
48 ; CHECK: .L{{.*}}entry:
49 ; CHECK-NEXT: ret
50 }
51
52 define <16 x i8> @test_bitcast_v8i16_to_v16i8(<8 x i16> %arg) {
53 entry:
54 %res = bitcast <8 x i16> %arg to <16 x i8>
55 ret <16 x i8> %res
56
57 ; CHECK-LABEL: test_bitcast_v8i16_to_v16i8:
58 ; CHECK: .L{{.*}}entry:
59 ; CHECK-NEXT: ret
60 }
61
62 define <8 x i16> @test_bitcast_v8i16_to_v8i16(<8 x i16> %arg) {
63 entry:
64 %res = bitcast <8 x i16> %arg to <8 x i16>
65 ret <8 x i16> %res
66
67 ; CHECK-LABEL: test_bitcast_v8i16_to_v8i16:
68 ; CHECK: .L{{.*}}entry:
69 ; CHECK-NEXT: ret
70 }
71
72 define <4 x i32> @test_bitcast_v8i16_to_v4i32(<8 x i16> %arg) {
73 entry:
74 %res = bitcast <8 x i16> %arg to <4 x i32>
75 ret <4 x i32> %res
76
77 ; CHECK-LABEL: test_bitcast_v8i16_to_v4i32:
78 ; CHECK: .L{{.*}}entry:
79 ; CHECK-NEXT: ret
80 }
81
82 define <4 x float> @test_bitcast_v8i16_to_v4f32(<8 x i16> %arg) {
83 entry:
84 %res = bitcast <8 x i16> %arg to <4 x float>
85 ret <4 x float> %res
86
87 ; CHECK-LABEL: test_bitcast_v8i16_to_v4f32:
88 ; CHECK: .L{{.*}}entry:
89 ; CHECK-NEXT: ret
90 }
91
92 define <16 x i8> @test_bitcast_v4i32_to_v16i8(<4 x i32> %arg) {
93 entry:
94 %res = bitcast <4 x i32> %arg to <16 x i8>
95 ret <16 x i8> %res
96
97 ; CHECK-LABEL: test_bitcast_v4i32_to_v16i8:
98 ; CHECK: .L{{.*}}entry:
99 ; CHECK-NEXT: ret
100 }
101
102 define <8 x i16> @test_bitcast_v4i32_to_v8i16(<4 x i32> %arg) {
103 entry:
104 %res = bitcast <4 x i32> %arg to <8 x i16>
105 ret <8 x i16> %res
106
107 ; CHECK-LABEL: test_bitcast_v4i32_to_v8i16:
108 ; CHECK: .L{{.*}}entry:
109 ; CHECK-NEXT: ret
110 }
111
112 define <4 x i32> @test_bitcast_v4i32_to_v4i32(<4 x i32> %arg) {
113 entry:
114 %res = bitcast <4 x i32> %arg to <4 x i32>
115 ret <4 x i32> %res
116
117 ; CHECK-LABEL: test_bitcast_v4i32_to_v4i32:
118 ; CHECK: .L{{.*}}entry:
119 ; CHECK-NEXT: ret
120 }
121
122 define <4 x float> @test_bitcast_v4i32_to_v4f32(<4 x i32> %arg) {
123 entry:
124 %res = bitcast <4 x i32> %arg to <4 x float>
125 ret <4 x float> %res
126
127 ; CHECK-LABEL: test_bitcast_v4i32_to_v4f32:
128 ; CHECK: .L{{.*}}entry:
129 ; CHECK-NEXT: ret
130 }
131
132 define <16 x i8> @test_bitcast_v4f32_to_v16i8(<4 x float> %arg) {
133 entry:
134 %res = bitcast <4 x float> %arg to <16 x i8>
135 ret <16 x i8> %res
136
137 ; CHECK-LABEL: test_bitcast_v4f32_to_v16i8:
138 ; CHECK: .L{{.*}}entry:
139 ; CHECK-NEXT: ret
140 }
141
142 define <8 x i16> @test_bitcast_v4f32_to_v8i16(<4 x float> %arg) {
143 entry:
144 %res = bitcast <4 x float> %arg to <8 x i16>
145 ret <8 x i16> %res
146
147 ; CHECK-LABEL: test_bitcast_v4f32_to_v8i16:
148 ; CHECK: .L{{.*}}entry:
149 ; CHECK-NEXT: ret
150 }
151
152 define <4 x i32> @test_bitcast_v4f32_to_v4i32(<4 x float> %arg) {
153 entry:
154 %res = bitcast <4 x float> %arg to <4 x i32>
155 ret <4 x i32> %res
156
157 ; CHECK-LABEL: test_bitcast_v4f32_to_v4i32:
158 ; CHECK: .L{{.*}}entry:
159 ; CHECK-NEXT: ret
160 }
161
162 define <4 x float> @test_bitcast_v4f32_to_v4f32(<4 x float> %arg) {
163 entry:
164 %res = bitcast <4 x float> %arg to <4 x float>
165 ret <4 x float> %res
166
167 ; CHECK-LABEL: test_bitcast_v4f32_to_v4f32:
168 ; CHECK: .L{{.*}}entry:
169 ; CHECK-NEXT: ret
170 }
171
172 define i8 @test_bitcast_v8i1_to_i8(<8 x i1> %arg) {
173 entry:
174 %res = bitcast <8 x i1> %arg to i8
175 ret i8 %res
176
177 ; CHECK-LABEL: test_bitcast_v8i1_to_i8:
178 ; CHECK: call __bitcast_v8i1_to_i8
179
180 ; OPTM1-LABEL: test_bitcast_v8i1_to_i8:
181 ; OPTM1: call __bitcast_v8i1_to_i8
182 }
183
184 define i16 @test_bitcast_v16i1_to_i16(<16 x i1> %arg) {
185 entry:
186 %res = bitcast <16 x i1> %arg to i16
187 ret i16 %res
188
189 ; CHECK-LABEL: test_bitcast_v16i1_to_i16:
190 ; CHECK: call __bitcast_v16i1_to_i16
191
192 ; OPTM1-LABEL: test_bitcast_v16i1_to_i16:
193 ; OPTM1: call __bitcast_v16i1_to_i16
194 }
195
196 define <8 x i1> @test_bitcast_i8_to_v8i1(i8 %arg) {
197 entry:
198 %res = bitcast i8 %arg to <8 x i1>
199 ret <8 x i1> %res
200
201 ; CHECK-LABEL: test_bitcast_i8_to_v8i1:
202 ; CHECK: call __bitcast_i8_to_v8i1
203
204 ; OPTM1-LABEL: test_bitcast_i8_to_v8i1:
205 ; OPTM1: call __bitcast_i8_to_v8i1
206 }
207
208 define <16 x i1> @test_bitcast_i16_to_v16i1(i16 %arg) {
209 entry:
210 %res = bitcast i16 %arg to <16 x i1>
211 ret <16 x i1> %res
212
213 ; CHECK-LABEL: test_bitcast_i16_to_v16i1:
214 ; CHECK: call __bitcast_i16_to_v16i1
215
216 ; OPTM1-LABEL: test_bitcast_i16_to_v16i1:
217 ; OPTM1: call __bitcast_i16_to_v16i1
218 }
219
220 ; sext operations
221
222 define <16 x i8> @test_sext_v16i1_to_v16i8(<16 x i1> %arg) {
223 entry:
224 %res = sext <16 x i1> %arg to <16 x i8>
225 ret <16 x i8> %res
226
227 ; CHECK-LABEL: test_sext_v16i1_to_v16i8:
228 ; CHECK: pxor
229 ; CHECK: pcmpeqb
230 ; CHECK: psubb
231 ; CHECK: pand
232 ; CHECK: pxor
233 ; CHECK: pcmpgtb
234
235 ; OPTM1-LABEL: test_sext_v16i1_to_v16i8:
236 ; OPTM1: pxor
237 ; OPTM1: pcmpeqb
238 ; OPTM1: psubb
239 ; OPTM1: pand
240 ; OPTM1: pxor
241 ; OPTM1: pcmpgtb
242 }
243
244 define <8 x i16> @test_sext_v8i1_to_v8i16(<8 x i1> %arg) {
245 entry:
246 %res = sext <8 x i1> %arg to <8 x i16>
247 ret <8 x i16> %res
248
249 ; CHECK-LABEL: test_sext_v8i1_to_v8i16:
250 ; CHECK: psllw {{.*}}, 15
251 ; CHECK: psraw {{.*}}, 15
252
253 ; OPTM1-LABEL: test_sext_v8i1_to_v8i16:
254 ; OPTM1: psllw {{.*}}, 15
255 ; OPTM1: psraw {{.*}}, 15
256 }
257
258 define <4 x i32> @test_sext_v4i1_to_v4i32(<4 x i1> %arg) {
259 entry:
260 %res = sext <4 x i1> %arg to <4 x i32>
261 ret <4 x i32> %res
262
263 ; CHECK-LABEL: test_sext_v4i1_to_v4i32:
264 ; CHECK: pslld {{.*}}, 31
265 ; CHECK: psrad {{.*}}, 31
266
267 ; OPTM1-LABEL: test_sext_v4i1_to_v4i32:
268 ; OPTM1: pslld {{.*}}, 31
269 ; OPTM1: psrad {{.*}}, 31
270 }
271
272 ; zext operations
273
274 define <16 x i8> @test_zext_v16i1_to_v16i8(<16 x i1> %arg) {
275 entry:
276 %res = zext <16 x i1> %arg to <16 x i8>
277 ret <16 x i8> %res
278
279 ; CHECK-LABEL: test_zext_v16i1_to_v16i8:
280 ; CHECK: pxor
281 ; CHECK: pcmpeqb
282 ; CHECK: psubb
283 ; CHECK: pand
284
285 ; OPTM1-LABEL: test_zext_v16i1_to_v16i8:
286 ; OPTM1: pxor
287 ; OPTM1: pcmpeqb
288 ; OPTM1: psubb
289 ; OPTM1: pand
290 }
291
292 define <8 x i16> @test_zext_v8i1_to_v8i16(<8 x i1> %arg) {
293 entry:
294 %res = zext <8 x i1> %arg to <8 x i16>
295 ret <8 x i16> %res
296
297 ; CHECK-LABEL: test_zext_v8i1_to_v8i16:
298 ; CHECK: pxor
299 ; CHECK: pcmpeqw
300 ; CHECK: psubw
301 ; CHECK: pand
302
303 ; OPTM1-LABEL: test_zext_v8i1_to_v8i16:
304 ; OPTM1: pxor
305 ; OPTM1: pcmpeqw
306 ; OPTM1: psubw
307 ; OPTM1: pand
308 }
309
310 define <4 x i32> @test_zext_v4i1_to_v4i32(<4 x i1> %arg) {
311 entry:
312 %res = zext <4 x i1> %arg to <4 x i32>
313 ret <4 x i32> %res
314
315 ; CHECK-LABEL: test_zext_v4i1_to_v4i32:
316 ; CHECK: pxor
317 ; CHECK: pcmpeqd
318 ; CHECK: psubd
319 ; CHECK: pand
320
321 ; OPTM1-LABEL: test_zext_v4i1_to_v4i32:
322 ; OPTM1: pxor
323 ; OPTM1: pcmpeqd
324 ; OPTM1: psubd
325 ; OPTM1: pand
326 }
327
328 ; trunc operations
329
330 define <16 x i1> @test_trunc_v16i8_to_v16i1(<16 x i8> %arg) {
331 entry:
332 %res = trunc <16 x i8> %arg to <16 x i1>
333 ret <16 x i1> %res
334
335 ; CHECK-LABEL: test_trunc_v16i8_to_v16i1:
336 ; CHECK: pxor
337 ; CHECK: pcmpeqb
338 ; CHECK: psubb
339 ; CHECK: pand
340
341 ; OPTM1-LABEL: test_trunc_v16i8_to_v16i1:
342 ; OPTM1: pxor
343 ; OPTM1: pcmpeqb
344 ; OPTM1: psubb
345 ; OPTM1: pand
346 }
347
348 define <8 x i1> @test_trunc_v8i16_to_v8i1(<8 x i16> %arg) {
349 entry:
350 %res = trunc <8 x i16> %arg to <8 x i1>
351 ret <8 x i1> %res
352
353 ; CHECK-LABEL: test_trunc_v8i16_to_v8i1:
354 ; CHECK: pxor
355 ; CHECK: pcmpeqw
356 ; CHECK: psubw
357 ; CHECK: pand
358
359 ; OPTM1-LABEL: test_trunc_v8i16_to_v8i1:
360 ; OPTM1: pxor
361 ; OPTM1: pcmpeqw
362 ; OPTM1: psubw
363 ; OPTM1: pand
364 }
365
366 define <4 x i1> @test_trunc_v4i32_to_v4i1(<4 x i32> %arg) {
367 entry:
368 %res = trunc <4 x i32> %arg to <4 x i1>
369 ret <4 x i1> %res
370
371 ; CHECK-LABEL: test_trunc_v4i32_to_v4i1:
372 ; CHECK: pxor
373 ; CHECK: pcmpeqd
374 ; CHECK: psubd
375 ; CHECK: pand
376
377 ; OPTM1-LABEL: test_trunc_v4i32_to_v4i1:
378 ; OPTM1: pxor
379 ; OPTM1: pcmpeqd
380 ; OPTM1: psubd
381 ; OPTM1: pand
382 }
383
384 ; fpto[us]i operations
385
386 define <4 x i32> @test_fptosi_v4f32_to_v4i32(<4 x float> %arg) {
387 entry:
388 %res = fptosi <4 x float> %arg to <4 x i32>
389 ret <4 x i32> %res
390
391 ; CHECK-LABEL: test_fptosi_v4f32_to_v4i32:
392 ; CHECK: cvtps2dq
393
394 ; OPTM1-LABEL: test_fptosi_v4f32_to_v4i32:
395 ; OPTM1: cvtps2dq
396 }
397
398 define <4 x i32> @test_fptoui_v4f32_to_v4i32(<4 x float> %arg) {
399 entry:
400 %res = fptoui <4 x float> %arg to <4 x i32>
401 ret <4 x i32> %res
402
403 ; CHECK-LABEL: test_fptoui_v4f32_to_v4i32:
404 ; CHECK: call __fptoui_v4f32
405
406 ; OPTM1-LABEL: test_fptoui_v4f32_to_v4i32:
407 ; OPTM1: call __fptoui_v4f32
408 }
409
410 ; [su]itofp operations
411
412 define <4 x float> @test_sitofp_v4i32_to_v4f32(<4 x i32> %arg) {
413 entry:
414 %res = sitofp <4 x i32> %arg to <4 x float>
415 ret <4 x float> %res
416
417 ; CHECK-LABEL: test_sitofp_v4i32_to_v4f32:
418 ; CHECK: cvtdq2ps
419
420 ; OPTM1-LABEL: test_sitofp_v4i32_to_v4f32:
421 ; OPTM1: cvtdq2ps
422 }
423
424 define <4 x float> @test_uitofp_v4i32_to_v4f32(<4 x i32> %arg) {
425 entry:
426 %res = uitofp <4 x i32> %arg to <4 x float>
427 ret <4 x float> %res
428
429 ; CHECK-LABEL: test_uitofp_v4i32_to_v4f32:
430 ; CHECK: call __uitofp_v4i32
431
432 ; OPTM1-LABEL: test_uitofp_v4i32_to_v4f32:
433 ; OPTM1: call __uitofp_v4i32
434 }
435
436 ; ERRORS-NOT: ICE translation error
437 ; DUMP-NOT: SZ
OLDNEW
« src/IceTargetLoweringX8632.cpp ('K') | « src/IceTargetLoweringX8632.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698