1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon -verify-machineinstrs < %s | FileCheck %s
2 ; RUN: llc -mtriple=arm64-none-linux-gnu -mattr=+neon -verify-machineinstrs < %s | FileCheck %s
6 define <1 x i64> @test_v8i8_to_v1i64(<8 x i8> %in) nounwind {
7 ; CHECK: test_v8i8_to_v1i64:
11 %val = bitcast <8 x i8> %in to <1 x i64>
15 define <2 x i32> @test_v8i8_to_v2i32(<8 x i8> %in) nounwind {
16 ; CHECK: test_v8i8_to_v2i32:
17 ; CHECK-NEXT: // BB#0:
20 %val = bitcast <8 x i8> %in to <2 x i32>
24 define <2 x float> @test_v8i8_to_v2f32(<8 x i8> %in) nounwind{
25 ; CHECK: test_v8i8_to_v2f32:
26 ; CHECK-NEXT: // BB#0:
29 %val = bitcast <8 x i8> %in to <2 x float>
33 define <4 x i16> @test_v8i8_to_v4i16(<8 x i8> %in) nounwind{
34 ; CHECK: test_v8i8_to_v4i16:
35 ; CHECK-NEXT: // BB#0:
38 %val = bitcast <8 x i8> %in to <4 x i16>
42 define <8 x i8> @test_v8i8_to_v8i8(<8 x i8> %in) nounwind{
43 ; CHECK: test_v8i8_to_v8i8:
44 ; CHECK-NEXT: // BB#0:
47 %val = bitcast <8 x i8> %in to <8 x i8>
53 define <1 x i64> @test_v4i16_to_v1i64(<4 x i16> %in) nounwind {
54 ; CHECK: test_v4i16_to_v1i64:
55 ; CHECK-NEXT: // BB#0:
58 %val = bitcast <4 x i16> %in to <1 x i64>
62 define <2 x i32> @test_v4i16_to_v2i32(<4 x i16> %in) nounwind {
63 ; CHECK: test_v4i16_to_v2i32:
64 ; CHECK-NEXT: // BB#0:
67 %val = bitcast <4 x i16> %in to <2 x i32>
71 define <2 x float> @test_v4i16_to_v2f32(<4 x i16> %in) nounwind{
72 ; CHECK: test_v4i16_to_v2f32:
73 ; CHECK-NEXT: // BB#0:
76 %val = bitcast <4 x i16> %in to <2 x float>
80 define <4 x i16> @test_v4i16_to_v4i16(<4 x i16> %in) nounwind{
81 ; CHECK: test_v4i16_to_v4i16:
82 ; CHECK-NEXT: // BB#0:
85 %val = bitcast <4 x i16> %in to <4 x i16>
89 define <8 x i8> @test_v4i16_to_v8i8(<4 x i16> %in) nounwind{
90 ; CHECK: test_v4i16_to_v8i8:
91 ; CHECK-NEXT: // BB#0:
94 %val = bitcast <4 x i16> %in to <8 x i8>
100 define <1 x i64> @test_v2i32_to_v1i64(<2 x i32> %in) nounwind {
101 ; CHECK: test_v2i32_to_v1i64:
102 ; CHECK-NEXT: // BB#0:
105 %val = bitcast <2 x i32> %in to <1 x i64>
109 define <2 x i32> @test_v2i32_to_v2i32(<2 x i32> %in) nounwind {
110 ; CHECK: test_v2i32_to_v2i32:
111 ; CHECK-NEXT: // BB#0:
114 %val = bitcast <2 x i32> %in to <2 x i32>
118 define <2 x float> @test_v2i32_to_v2f32(<2 x i32> %in) nounwind{
119 ; CHECK: test_v2i32_to_v2f32:
120 ; CHECK-NEXT: // BB#0:
123 %val = bitcast <2 x i32> %in to <2 x float>
127 define <4 x i16> @test_v2i32_to_v4i16(<2 x i32> %in) nounwind{
128 ; CHECK: test_v2i32_to_v4i16:
129 ; CHECK-NEXT: // BB#0:
132 %val = bitcast <2 x i32> %in to <4 x i16>
136 define <8 x i8> @test_v2i32_to_v8i8(<2 x i32> %in) nounwind{
137 ; CHECK: test_v2i32_to_v8i8:
138 ; CHECK-NEXT: // BB#0:
141 %val = bitcast <2 x i32> %in to <8 x i8>
147 define <1 x i64> @test_v2f32_to_v1i64(<2 x float> %in) nounwind {
148 ; CHECK: test_v2f32_to_v1i64:
149 ; CHECK-NEXT: // BB#0:
152 %val = bitcast <2 x float> %in to <1 x i64>
156 define <2 x i32> @test_v2f32_to_v2i32(<2 x float> %in) nounwind {
157 ; CHECK: test_v2f32_to_v2i32:
158 ; CHECK-NEXT: // BB#0:
161 %val = bitcast <2 x float> %in to <2 x i32>
165 define <2 x float> @test_v2f32_to_v2f32(<2 x float> %in) nounwind{
166 ; CHECK: test_v2f32_to_v2f32:
167 ; CHECK-NEXT: // BB#0:
170 %val = bitcast <2 x float> %in to <2 x float>
174 define <4 x i16> @test_v2f32_to_v4i16(<2 x float> %in) nounwind{
175 ; CHECK: test_v2f32_to_v4i16:
176 ; CHECK-NEXT: // BB#0:
179 %val = bitcast <2 x float> %in to <4 x i16>
183 define <8 x i8> @test_v2f32_to_v8i8(<2 x float> %in) nounwind{
184 ; CHECK: test_v2f32_to_v8i8:
185 ; CHECK-NEXT: // BB#0:
188 %val = bitcast <2 x float> %in to <8 x i8>
194 define <1 x i64> @test_v1i64_to_v1i64(<1 x i64> %in) nounwind {
195 ; CHECK: test_v1i64_to_v1i64:
196 ; CHECK-NEXT: // BB#0:
199 %val = bitcast <1 x i64> %in to <1 x i64>
203 define <2 x i32> @test_v1i64_to_v2i32(<1 x i64> %in) nounwind {
204 ; CHECK: test_v1i64_to_v2i32:
205 ; CHECK-NEXT: // BB#0:
208 %val = bitcast <1 x i64> %in to <2 x i32>
212 define <2 x float> @test_v1i64_to_v2f32(<1 x i64> %in) nounwind{
213 ; CHECK: test_v1i64_to_v2f32:
214 ; CHECK-NEXT: // BB#0:
217 %val = bitcast <1 x i64> %in to <2 x float>
221 define <4 x i16> @test_v1i64_to_v4i16(<1 x i64> %in) nounwind{
222 ; CHECK: test_v1i64_to_v4i16:
223 ; CHECK-NEXT: // BB#0:
226 %val = bitcast <1 x i64> %in to <4 x i16>
230 define <8 x i8> @test_v1i64_to_v8i8(<1 x i64> %in) nounwind{
231 ; CHECK: test_v1i64_to_v8i8:
232 ; CHECK-NEXT: // BB#0:
235 %val = bitcast <1 x i64> %in to <8 x i8>
242 define <2 x double> @test_v16i8_to_v2f64(<16 x i8> %in) nounwind {
243 ; CHECK: test_v16i8_to_v2f64:
244 ; CHECK-NEXT: // BB#0:
247 %val = bitcast <16 x i8> %in to <2 x double>
248 ret <2 x double> %val
251 define <2 x i64> @test_v16i8_to_v2i64(<16 x i8> %in) nounwind {
252 ; CHECK: test_v16i8_to_v2i64:
253 ; CHECK-NEXT: // BB#0:
256 %val = bitcast <16 x i8> %in to <2 x i64>
260 define <4 x i32> @test_v16i8_to_v4i32(<16 x i8> %in) nounwind {
261 ; CHECK: test_v16i8_to_v4i32:
262 ; CHECK-NEXT: // BB#0:
265 %val = bitcast <16 x i8> %in to <4 x i32>
269 define <4 x float> @test_v16i8_to_v2f32(<16 x i8> %in) nounwind{
270 ; CHECK: test_v16i8_to_v2f32:
271 ; CHECK-NEXT: // BB#0:
274 %val = bitcast <16 x i8> %in to <4 x float>
278 define <8 x i16> @test_v16i8_to_v8i16(<16 x i8> %in) nounwind{
279 ; CHECK: test_v16i8_to_v8i16:
280 ; CHECK-NEXT: // BB#0:
283 %val = bitcast <16 x i8> %in to <8 x i16>
287 define <16 x i8> @test_v16i8_to_v16i8(<16 x i8> %in) nounwind{
288 ; CHECK: test_v16i8_to_v16i8:
289 ; CHECK-NEXT: // BB#0:
292 %val = bitcast <16 x i8> %in to <16 x i8>
298 define <2 x double> @test_v8i16_to_v2f64(<8 x i16> %in) nounwind {
299 ; CHECK: test_v8i16_to_v2f64:
300 ; CHECK-NEXT: // BB#0:
303 %val = bitcast <8 x i16> %in to <2 x double>
304 ret <2 x double> %val
307 define <2 x i64> @test_v8i16_to_v2i64(<8 x i16> %in) nounwind {
308 ; CHECK: test_v8i16_to_v2i64:
309 ; CHECK-NEXT: // BB#0:
312 %val = bitcast <8 x i16> %in to <2 x i64>
316 define <4 x i32> @test_v8i16_to_v4i32(<8 x i16> %in) nounwind {
317 ; CHECK: test_v8i16_to_v4i32:
318 ; CHECK-NEXT: // BB#0:
321 %val = bitcast <8 x i16> %in to <4 x i32>
325 define <4 x float> @test_v8i16_to_v2f32(<8 x i16> %in) nounwind{
326 ; CHECK: test_v8i16_to_v2f32:
327 ; CHECK-NEXT: // BB#0:
330 %val = bitcast <8 x i16> %in to <4 x float>
334 define <8 x i16> @test_v8i16_to_v8i16(<8 x i16> %in) nounwind{
335 ; CHECK: test_v8i16_to_v8i16:
336 ; CHECK-NEXT: // BB#0:
339 %val = bitcast <8 x i16> %in to <8 x i16>
343 define <16 x i8> @test_v8i16_to_v16i8(<8 x i16> %in) nounwind{
344 ; CHECK: test_v8i16_to_v16i8:
345 ; CHECK-NEXT: // BB#0:
348 %val = bitcast <8 x i16> %in to <16 x i8>
354 define <2 x double> @test_v4i32_to_v2f64(<4 x i32> %in) nounwind {
355 ; CHECK: test_v4i32_to_v2f64:
356 ; CHECK-NEXT: // BB#0:
359 %val = bitcast <4 x i32> %in to <2 x double>
360 ret <2 x double> %val
363 define <2 x i64> @test_v4i32_to_v2i64(<4 x i32> %in) nounwind {
364 ; CHECK: test_v4i32_to_v2i64:
365 ; CHECK-NEXT: // BB#0:
368 %val = bitcast <4 x i32> %in to <2 x i64>
372 define <4 x i32> @test_v4i32_to_v4i32(<4 x i32> %in) nounwind {
373 ; CHECK: test_v4i32_to_v4i32:
374 ; CHECK-NEXT: // BB#0:
377 %val = bitcast <4 x i32> %in to <4 x i32>
381 define <4 x float> @test_v4i32_to_v2f32(<4 x i32> %in) nounwind{
382 ; CHECK: test_v4i32_to_v2f32:
383 ; CHECK-NEXT: // BB#0:
386 %val = bitcast <4 x i32> %in to <4 x float>
390 define <8 x i16> @test_v4i32_to_v8i16(<4 x i32> %in) nounwind{
391 ; CHECK: test_v4i32_to_v8i16:
392 ; CHECK-NEXT: // BB#0:
395 %val = bitcast <4 x i32> %in to <8 x i16>
399 define <16 x i8> @test_v4i32_to_v16i8(<4 x i32> %in) nounwind{
400 ; CHECK: test_v4i32_to_v16i8:
401 ; CHECK-NEXT: // BB#0:
404 %val = bitcast <4 x i32> %in to <16 x i8>
410 define <2 x double> @test_v4f32_to_v2f64(<4 x float> %in) nounwind {
411 ; CHECK: test_v4f32_to_v2f64:
412 ; CHECK-NEXT: // BB#0:
415 %val = bitcast <4 x float> %in to <2 x double>
416 ret <2 x double> %val
419 define <2 x i64> @test_v4f32_to_v2i64(<4 x float> %in) nounwind {
420 ; CHECK: test_v4f32_to_v2i64:
421 ; CHECK-NEXT: // BB#0:
424 %val = bitcast <4 x float> %in to <2 x i64>
428 define <4 x i32> @test_v4f32_to_v4i32(<4 x float> %in) nounwind {
429 ; CHECK: test_v4f32_to_v4i32:
430 ; CHECK-NEXT: // BB#0:
433 %val = bitcast <4 x float> %in to <4 x i32>
437 define <4 x float> @test_v4f32_to_v4f32(<4 x float> %in) nounwind{
438 ; CHECK: test_v4f32_to_v4f32:
439 ; CHECK-NEXT: // BB#0:
442 %val = bitcast <4 x float> %in to <4 x float>
446 define <8 x i16> @test_v4f32_to_v8i16(<4 x float> %in) nounwind{
447 ; CHECK: test_v4f32_to_v8i16:
448 ; CHECK-NEXT: // BB#0:
451 %val = bitcast <4 x float> %in to <8 x i16>
455 define <16 x i8> @test_v4f32_to_v16i8(<4 x float> %in) nounwind{
456 ; CHECK: test_v4f32_to_v16i8:
457 ; CHECK-NEXT: // BB#0:
460 %val = bitcast <4 x float> %in to <16 x i8>
466 define <2 x double> @test_v2i64_to_v2f64(<2 x i64> %in) nounwind {
467 ; CHECK: test_v2i64_to_v2f64:
468 ; CHECK-NEXT: // BB#0:
471 %val = bitcast <2 x i64> %in to <2 x double>
472 ret <2 x double> %val
475 define <2 x i64> @test_v2i64_to_v2i64(<2 x i64> %in) nounwind {
476 ; CHECK: test_v2i64_to_v2i64:
477 ; CHECK-NEXT: // BB#0:
480 %val = bitcast <2 x i64> %in to <2 x i64>
484 define <4 x i32> @test_v2i64_to_v4i32(<2 x i64> %in) nounwind {
485 ; CHECK: test_v2i64_to_v4i32:
486 ; CHECK-NEXT: // BB#0:
489 %val = bitcast <2 x i64> %in to <4 x i32>
493 define <4 x float> @test_v2i64_to_v4f32(<2 x i64> %in) nounwind{
494 ; CHECK: test_v2i64_to_v4f32:
495 ; CHECK-NEXT: // BB#0:
498 %val = bitcast <2 x i64> %in to <4 x float>
502 define <8 x i16> @test_v2i64_to_v8i16(<2 x i64> %in) nounwind{
503 ; CHECK: test_v2i64_to_v8i16:
504 ; CHECK-NEXT: // BB#0:
507 %val = bitcast <2 x i64> %in to <8 x i16>
511 define <16 x i8> @test_v2i64_to_v16i8(<2 x i64> %in) nounwind{
512 ; CHECK: test_v2i64_to_v16i8:
513 ; CHECK-NEXT: // BB#0:
516 %val = bitcast <2 x i64> %in to <16 x i8>
522 define <2 x double> @test_v2f64_to_v2f64(<2 x double> %in) nounwind {
523 ; CHECK: test_v2f64_to_v2f64:
524 ; CHECK-NEXT: // BB#0:
527 %val = bitcast <2 x double> %in to <2 x double>
528 ret <2 x double> %val
531 define <2 x i64> @test_v2f64_to_v2i64(<2 x double> %in) nounwind {
532 ; CHECK: test_v2f64_to_v2i64:
533 ; CHECK-NEXT: // BB#0:
536 %val = bitcast <2 x double> %in to <2 x i64>
540 define <4 x i32> @test_v2f64_to_v4i32(<2 x double> %in) nounwind {
541 ; CHECK: test_v2f64_to_v4i32:
542 ; CHECK-NEXT: // BB#0:
545 %val = bitcast <2 x double> %in to <4 x i32>
549 define <4 x float> @test_v2f64_to_v4f32(<2 x double> %in) nounwind{
550 ; CHECK: test_v2f64_to_v4f32:
551 ; CHECK-NEXT: // BB#0:
554 %val = bitcast <2 x double> %in to <4 x float>
558 define <8 x i16> @test_v2f64_to_v8i16(<2 x double> %in) nounwind{
559 ; CHECK: test_v2f64_to_v8i16:
560 ; CHECK-NEXT: // BB#0:
563 %val = bitcast <2 x double> %in to <8 x i16>
567 define <16 x i8> @test_v2f64_to_v16i8(<2 x double> %in) nounwind{
568 ; CHECK: test_v2f64_to_v16i8:
569 ; CHECK-NEXT: // BB#0:
572 %val = bitcast <2 x double> %in to <16 x i8>