1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon -verify-machineinstrs < %s | FileCheck %s
5 define <1 x i64> @test_v8i8_to_v1i64(<8 x i8> %in) nounwind {
6 ; CHECK: test_v8i8_to_v1i64:
7 ; CHECK-NEXT: // %bb.0:
10 %val = bitcast <8 x i8> %in to <1 x i64>
14 define <2 x i32> @test_v8i8_to_v2i32(<8 x i8> %in) nounwind {
15 ; CHECK: test_v8i8_to_v2i32:
16 ; CHECK-NEXT: // %bb.0:
19 %val = bitcast <8 x i8> %in to <2 x i32>
23 define <2 x float> @test_v8i8_to_v2f32(<8 x i8> %in) nounwind{
24 ; CHECK: test_v8i8_to_v2f32:
25 ; CHECK-NEXT: // %bb.0:
28 %val = bitcast <8 x i8> %in to <2 x float>
32 define <4 x i16> @test_v8i8_to_v4i16(<8 x i8> %in) nounwind{
33 ; CHECK: test_v8i8_to_v4i16:
34 ; CHECK-NEXT: // %bb.0:
37 %val = bitcast <8 x i8> %in to <4 x i16>
41 define <8 x i8> @test_v8i8_to_v8i8(<8 x i8> %in) nounwind{
42 ; CHECK: test_v8i8_to_v8i8:
43 ; CHECK-NEXT: // %bb.0:
46 %val = bitcast <8 x i8> %in to <8 x i8>
52 define <1 x i64> @test_v4i16_to_v1i64(<4 x i16> %in) nounwind {
53 ; CHECK: test_v4i16_to_v1i64:
54 ; CHECK-NEXT: // %bb.0:
57 %val = bitcast <4 x i16> %in to <1 x i64>
61 define <2 x i32> @test_v4i16_to_v2i32(<4 x i16> %in) nounwind {
62 ; CHECK: test_v4i16_to_v2i32:
63 ; CHECK-NEXT: // %bb.0:
66 %val = bitcast <4 x i16> %in to <2 x i32>
70 define <2 x float> @test_v4i16_to_v2f32(<4 x i16> %in) nounwind{
71 ; CHECK: test_v4i16_to_v2f32:
72 ; CHECK-NEXT: // %bb.0:
75 %val = bitcast <4 x i16> %in to <2 x float>
79 define <4 x i16> @test_v4i16_to_v4i16(<4 x i16> %in) nounwind{
80 ; CHECK: test_v4i16_to_v4i16:
81 ; CHECK-NEXT: // %bb.0:
84 %val = bitcast <4 x i16> %in to <4 x i16>
88 define <8 x i8> @test_v4i16_to_v8i8(<4 x i16> %in) nounwind{
89 ; CHECK: test_v4i16_to_v8i8:
90 ; CHECK-NEXT: // %bb.0:
93 %val = bitcast <4 x i16> %in to <8 x i8>
99 define <1 x i64> @test_v2i32_to_v1i64(<2 x i32> %in) nounwind {
100 ; CHECK: test_v2i32_to_v1i64:
101 ; CHECK-NEXT: // %bb.0:
104 %val = bitcast <2 x i32> %in to <1 x i64>
108 define <2 x i32> @test_v2i32_to_v2i32(<2 x i32> %in) nounwind {
109 ; CHECK: test_v2i32_to_v2i32:
110 ; CHECK-NEXT: // %bb.0:
113 %val = bitcast <2 x i32> %in to <2 x i32>
117 define <2 x float> @test_v2i32_to_v2f32(<2 x i32> %in) nounwind{
118 ; CHECK: test_v2i32_to_v2f32:
119 ; CHECK-NEXT: // %bb.0:
122 %val = bitcast <2 x i32> %in to <2 x float>
126 define <4 x i16> @test_v2i32_to_v4i16(<2 x i32> %in) nounwind{
127 ; CHECK: test_v2i32_to_v4i16:
128 ; CHECK-NEXT: // %bb.0:
131 %val = bitcast <2 x i32> %in to <4 x i16>
135 define <8 x i8> @test_v2i32_to_v8i8(<2 x i32> %in) nounwind{
136 ; CHECK: test_v2i32_to_v8i8:
137 ; CHECK-NEXT: // %bb.0:
140 %val = bitcast <2 x i32> %in to <8 x i8>
146 define <1 x i64> @test_v2f32_to_v1i64(<2 x float> %in) nounwind {
147 ; CHECK: test_v2f32_to_v1i64:
148 ; CHECK-NEXT: // %bb.0:
151 %val = bitcast <2 x float> %in to <1 x i64>
155 define <2 x i32> @test_v2f32_to_v2i32(<2 x float> %in) nounwind {
156 ; CHECK: test_v2f32_to_v2i32:
157 ; CHECK-NEXT: // %bb.0:
160 %val = bitcast <2 x float> %in to <2 x i32>
164 define <2 x float> @test_v2f32_to_v2f32(<2 x float> %in) nounwind{
165 ; CHECK: test_v2f32_to_v2f32:
166 ; CHECK-NEXT: // %bb.0:
169 %val = bitcast <2 x float> %in to <2 x float>
173 define <4 x i16> @test_v2f32_to_v4i16(<2 x float> %in) nounwind{
174 ; CHECK: test_v2f32_to_v4i16:
175 ; CHECK-NEXT: // %bb.0:
178 %val = bitcast <2 x float> %in to <4 x i16>
182 define <8 x i8> @test_v2f32_to_v8i8(<2 x float> %in) nounwind{
183 ; CHECK: test_v2f32_to_v8i8:
184 ; CHECK-NEXT: // %bb.0:
187 %val = bitcast <2 x float> %in to <8 x i8>
193 define <1 x i64> @test_v1i64_to_v1i64(<1 x i64> %in) nounwind {
194 ; CHECK: test_v1i64_to_v1i64:
195 ; CHECK-NEXT: // %bb.0:
198 %val = bitcast <1 x i64> %in to <1 x i64>
202 define <2 x i32> @test_v1i64_to_v2i32(<1 x i64> %in) nounwind {
203 ; CHECK: test_v1i64_to_v2i32:
204 ; CHECK-NEXT: // %bb.0:
207 %val = bitcast <1 x i64> %in to <2 x i32>
211 define <2 x float> @test_v1i64_to_v2f32(<1 x i64> %in) nounwind{
212 ; CHECK: test_v1i64_to_v2f32:
213 ; CHECK-NEXT: // %bb.0:
216 %val = bitcast <1 x i64> %in to <2 x float>
220 define <4 x i16> @test_v1i64_to_v4i16(<1 x i64> %in) nounwind{
221 ; CHECK: test_v1i64_to_v4i16:
222 ; CHECK-NEXT: // %bb.0:
225 %val = bitcast <1 x i64> %in to <4 x i16>
229 define <8 x i8> @test_v1i64_to_v8i8(<1 x i64> %in) nounwind{
230 ; CHECK: test_v1i64_to_v8i8:
231 ; CHECK-NEXT: // %bb.0:
234 %val = bitcast <1 x i64> %in to <8 x i8>
241 define <2 x double> @test_v16i8_to_v2f64(<16 x i8> %in) nounwind {
242 ; CHECK: test_v16i8_to_v2f64:
243 ; CHECK-NEXT: // %bb.0:
246 %val = bitcast <16 x i8> %in to <2 x double>
247 ret <2 x double> %val
250 define <2 x i64> @test_v16i8_to_v2i64(<16 x i8> %in) nounwind {
251 ; CHECK: test_v16i8_to_v2i64:
252 ; CHECK-NEXT: // %bb.0:
255 %val = bitcast <16 x i8> %in to <2 x i64>
259 define <4 x i32> @test_v16i8_to_v4i32(<16 x i8> %in) nounwind {
260 ; CHECK: test_v16i8_to_v4i32:
261 ; CHECK-NEXT: // %bb.0:
264 %val = bitcast <16 x i8> %in to <4 x i32>
268 define <4 x float> @test_v16i8_to_v2f32(<16 x i8> %in) nounwind{
269 ; CHECK: test_v16i8_to_v2f32:
270 ; CHECK-NEXT: // %bb.0:
273 %val = bitcast <16 x i8> %in to <4 x float>
277 define <8 x i16> @test_v16i8_to_v8i16(<16 x i8> %in) nounwind{
278 ; CHECK: test_v16i8_to_v8i16:
279 ; CHECK-NEXT: // %bb.0:
282 %val = bitcast <16 x i8> %in to <8 x i16>
286 define <16 x i8> @test_v16i8_to_v16i8(<16 x i8> %in) nounwind{
287 ; CHECK: test_v16i8_to_v16i8:
288 ; CHECK-NEXT: // %bb.0:
291 %val = bitcast <16 x i8> %in to <16 x i8>
297 define <2 x double> @test_v8i16_to_v2f64(<8 x i16> %in) nounwind {
298 ; CHECK: test_v8i16_to_v2f64:
299 ; CHECK-NEXT: // %bb.0:
302 %val = bitcast <8 x i16> %in to <2 x double>
303 ret <2 x double> %val
306 define <2 x i64> @test_v8i16_to_v2i64(<8 x i16> %in) nounwind {
307 ; CHECK: test_v8i16_to_v2i64:
308 ; CHECK-NEXT: // %bb.0:
311 %val = bitcast <8 x i16> %in to <2 x i64>
315 define <4 x i32> @test_v8i16_to_v4i32(<8 x i16> %in) nounwind {
316 ; CHECK: test_v8i16_to_v4i32:
317 ; CHECK-NEXT: // %bb.0:
320 %val = bitcast <8 x i16> %in to <4 x i32>
324 define <4 x float> @test_v8i16_to_v2f32(<8 x i16> %in) nounwind{
325 ; CHECK: test_v8i16_to_v2f32:
326 ; CHECK-NEXT: // %bb.0:
329 %val = bitcast <8 x i16> %in to <4 x float>
333 define <8 x i16> @test_v8i16_to_v8i16(<8 x i16> %in) nounwind{
334 ; CHECK: test_v8i16_to_v8i16:
335 ; CHECK-NEXT: // %bb.0:
338 %val = bitcast <8 x i16> %in to <8 x i16>
342 define <16 x i8> @test_v8i16_to_v16i8(<8 x i16> %in) nounwind{
343 ; CHECK: test_v8i16_to_v16i8:
344 ; CHECK-NEXT: // %bb.0:
347 %val = bitcast <8 x i16> %in to <16 x i8>
353 define <2 x double> @test_v4i32_to_v2f64(<4 x i32> %in) nounwind {
354 ; CHECK: test_v4i32_to_v2f64:
355 ; CHECK-NEXT: // %bb.0:
358 %val = bitcast <4 x i32> %in to <2 x double>
359 ret <2 x double> %val
362 define <2 x i64> @test_v4i32_to_v2i64(<4 x i32> %in) nounwind {
363 ; CHECK: test_v4i32_to_v2i64:
364 ; CHECK-NEXT: // %bb.0:
367 %val = bitcast <4 x i32> %in to <2 x i64>
371 define <4 x i32> @test_v4i32_to_v4i32(<4 x i32> %in) nounwind {
372 ; CHECK: test_v4i32_to_v4i32:
373 ; CHECK-NEXT: // %bb.0:
376 %val = bitcast <4 x i32> %in to <4 x i32>
380 define <4 x float> @test_v4i32_to_v2f32(<4 x i32> %in) nounwind{
381 ; CHECK: test_v4i32_to_v2f32:
382 ; CHECK-NEXT: // %bb.0:
385 %val = bitcast <4 x i32> %in to <4 x float>
389 define <8 x i16> @test_v4i32_to_v8i16(<4 x i32> %in) nounwind{
390 ; CHECK: test_v4i32_to_v8i16:
391 ; CHECK-NEXT: // %bb.0:
394 %val = bitcast <4 x i32> %in to <8 x i16>
398 define <16 x i8> @test_v4i32_to_v16i8(<4 x i32> %in) nounwind{
399 ; CHECK: test_v4i32_to_v16i8:
400 ; CHECK-NEXT: // %bb.0:
403 %val = bitcast <4 x i32> %in to <16 x i8>
409 define <2 x double> @test_v4f32_to_v2f64(<4 x float> %in) nounwind {
410 ; CHECK: test_v4f32_to_v2f64:
411 ; CHECK-NEXT: // %bb.0:
414 %val = bitcast <4 x float> %in to <2 x double>
415 ret <2 x double> %val
418 define <2 x i64> @test_v4f32_to_v2i64(<4 x float> %in) nounwind {
419 ; CHECK: test_v4f32_to_v2i64:
420 ; CHECK-NEXT: // %bb.0:
423 %val = bitcast <4 x float> %in to <2 x i64>
427 define <4 x i32> @test_v4f32_to_v4i32(<4 x float> %in) nounwind {
428 ; CHECK: test_v4f32_to_v4i32:
429 ; CHECK-NEXT: // %bb.0:
432 %val = bitcast <4 x float> %in to <4 x i32>
436 define <4 x float> @test_v4f32_to_v4f32(<4 x float> %in) nounwind{
437 ; CHECK: test_v4f32_to_v4f32:
438 ; CHECK-NEXT: // %bb.0:
441 %val = bitcast <4 x float> %in to <4 x float>
445 define <8 x i16> @test_v4f32_to_v8i16(<4 x float> %in) nounwind{
446 ; CHECK: test_v4f32_to_v8i16:
447 ; CHECK-NEXT: // %bb.0:
450 %val = bitcast <4 x float> %in to <8 x i16>
454 define <16 x i8> @test_v4f32_to_v16i8(<4 x float> %in) nounwind{
455 ; CHECK: test_v4f32_to_v16i8:
456 ; CHECK-NEXT: // %bb.0:
459 %val = bitcast <4 x float> %in to <16 x i8>
465 define <2 x double> @test_v2i64_to_v2f64(<2 x i64> %in) nounwind {
466 ; CHECK: test_v2i64_to_v2f64:
467 ; CHECK-NEXT: // %bb.0:
470 %val = bitcast <2 x i64> %in to <2 x double>
471 ret <2 x double> %val
474 define <2 x i64> @test_v2i64_to_v2i64(<2 x i64> %in) nounwind {
475 ; CHECK: test_v2i64_to_v2i64:
476 ; CHECK-NEXT: // %bb.0:
479 %val = bitcast <2 x i64> %in to <2 x i64>
483 define <4 x i32> @test_v2i64_to_v4i32(<2 x i64> %in) nounwind {
484 ; CHECK: test_v2i64_to_v4i32:
485 ; CHECK-NEXT: // %bb.0:
488 %val = bitcast <2 x i64> %in to <4 x i32>
492 define <4 x float> @test_v2i64_to_v4f32(<2 x i64> %in) nounwind{
493 ; CHECK: test_v2i64_to_v4f32:
494 ; CHECK-NEXT: // %bb.0:
497 %val = bitcast <2 x i64> %in to <4 x float>
501 define <8 x i16> @test_v2i64_to_v8i16(<2 x i64> %in) nounwind{
502 ; CHECK: test_v2i64_to_v8i16:
503 ; CHECK-NEXT: // %bb.0:
506 %val = bitcast <2 x i64> %in to <8 x i16>
510 define <16 x i8> @test_v2i64_to_v16i8(<2 x i64> %in) nounwind{
511 ; CHECK: test_v2i64_to_v16i8:
512 ; CHECK-NEXT: // %bb.0:
515 %val = bitcast <2 x i64> %in to <16 x i8>
521 define <2 x double> @test_v2f64_to_v2f64(<2 x double> %in) nounwind {
522 ; CHECK: test_v2f64_to_v2f64:
523 ; CHECK-NEXT: // %bb.0:
526 %val = bitcast <2 x double> %in to <2 x double>
527 ret <2 x double> %val
530 define <2 x i64> @test_v2f64_to_v2i64(<2 x double> %in) nounwind {
531 ; CHECK: test_v2f64_to_v2i64:
532 ; CHECK-NEXT: // %bb.0:
535 %val = bitcast <2 x double> %in to <2 x i64>
539 define <4 x i32> @test_v2f64_to_v4i32(<2 x double> %in) nounwind {
540 ; CHECK: test_v2f64_to_v4i32:
541 ; CHECK-NEXT: // %bb.0:
544 %val = bitcast <2 x double> %in to <4 x i32>
548 define <4 x float> @test_v2f64_to_v4f32(<2 x double> %in) nounwind{
549 ; CHECK: test_v2f64_to_v4f32:
550 ; CHECK-NEXT: // %bb.0:
553 %val = bitcast <2 x double> %in to <4 x float>
557 define <8 x i16> @test_v2f64_to_v8i16(<2 x double> %in) nounwind{
558 ; CHECK: test_v2f64_to_v8i16:
559 ; CHECK-NEXT: // %bb.0:
562 %val = bitcast <2 x double> %in to <8 x i16>
566 define <16 x i8> @test_v2f64_to_v16i8(<2 x double> %in) nounwind{
567 ; CHECK: test_v2f64_to_v16i8:
568 ; CHECK-NEXT: // %bb.0:
571 %val = bitcast <2 x double> %in to <16 x i8>