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:
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>