@@ -387,6 +387,36 @@ define <4 x i64> @shufflevector_v4i64(<4 x i64> %a, <4 x i64> %b) {
387
387
ret <4 x i64 > %c
388
388
}
389
389
390
+ define <3 x ptr > @shufflevector_v3p0 (<3 x ptr > %a , <3 x ptr > %b ) {
391
+ ; CHECK-SD-LABEL: shufflevector_v3p0:
392
+ ; CHECK-SD: // %bb.0:
393
+ ; CHECK-SD-NEXT: fmov d2, d5
394
+ ; CHECK-SD-NEXT: fmov d0, d1
395
+ ; CHECK-SD-NEXT: fmov d1, d3
396
+ ; CHECK-SD-NEXT: ret
397
+ ;
398
+ ; CHECK-GI-LABEL: shufflevector_v3p0:
399
+ ; CHECK-GI: // %bb.0:
400
+ ; CHECK-GI-NEXT: fmov x8, d0
401
+ ; CHECK-GI-NEXT: fmov x9, d3
402
+ ; CHECK-GI-NEXT: mov v0.d[0], x8
403
+ ; CHECK-GI-NEXT: mov v2.d[0], x9
404
+ ; CHECK-GI-NEXT: fmov x8, d1
405
+ ; CHECK-GI-NEXT: fmov x9, d4
406
+ ; CHECK-GI-NEXT: mov v0.d[1], x8
407
+ ; CHECK-GI-NEXT: mov v2.d[1], x9
408
+ ; CHECK-GI-NEXT: fmov x8, d5
409
+ ; CHECK-GI-NEXT: mov v1.d[0], x8
410
+ ; CHECK-GI-NEXT: ext v0.16b, v0.16b, v2.16b, #8
411
+ ; CHECK-GI-NEXT: fmov x10, d1
412
+ ; CHECK-GI-NEXT: mov d2, v0.d[1]
413
+ ; CHECK-GI-NEXT: fmov d1, d2
414
+ ; CHECK-GI-NEXT: fmov d2, x10
415
+ ; CHECK-GI-NEXT: ret
416
+ %c = shufflevector <3 x ptr > %a , <3 x ptr > %b , <3 x i32 > <i32 1 , i32 3 , i32 5 >
417
+ ret <3 x ptr > %c
418
+ }
419
+
390
420
define <4 x ptr > @shufflevector_v4p0 (<4 x ptr > %a , <4 x ptr > %b ) {
391
421
; CHECK-SD-LABEL: shufflevector_v4p0:
392
422
; CHECK-SD: // %bb.0:
@@ -550,13 +580,13 @@ define <3 x i8> @shufflevector_v3i8(<3 x i8> %a, <3 x i8> %b) {
550
580
; CHECK-GI: // %bb.0:
551
581
; CHECK-GI-NEXT: fmov s0, w0
552
582
; CHECK-GI-NEXT: fmov s1, w3
553
- ; CHECK-GI-NEXT: adrp x8, .LCPI34_0
583
+ ; CHECK-GI-NEXT: adrp x8, .LCPI35_0
554
584
; CHECK-GI-NEXT: mov v0.b[1], w1
555
585
; CHECK-GI-NEXT: mov v1.b[1], w4
556
586
; CHECK-GI-NEXT: mov v0.b[2], w2
557
587
; CHECK-GI-NEXT: mov v1.b[2], w5
558
588
; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
559
- ; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI34_0 ]
589
+ ; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI35_0 ]
560
590
; CHECK-GI-NEXT: tbl v0.16b, { v0.16b }, v1.16b
561
591
; CHECK-GI-NEXT: umov w0, v0.b[0]
562
592
; CHECK-GI-NEXT: umov w1, v0.b[1]
@@ -571,19 +601,19 @@ define <7 x i8> @shufflevector_v7i8(<7 x i8> %a, <7 x i8> %b) {
571
601
; CHECK-SD: // %bb.0:
572
602
; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
573
603
; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q1
574
- ; CHECK-SD-NEXT: adrp x8, .LCPI35_0
604
+ ; CHECK-SD-NEXT: adrp x8, .LCPI36_0
575
605
; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]
576
- ; CHECK-SD-NEXT: ldr d1, [x8, :lo12:.LCPI35_0 ]
606
+ ; CHECK-SD-NEXT: ldr d1, [x8, :lo12:.LCPI36_0 ]
577
607
; CHECK-SD-NEXT: tbl v0.8b, { v0.16b }, v1.8b
578
608
; CHECK-SD-NEXT: ret
579
609
;
580
610
; CHECK-GI-LABEL: shufflevector_v7i8:
581
611
; CHECK-GI: // %bb.0:
582
612
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
583
613
; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1
584
- ; CHECK-GI-NEXT: adrp x8, .LCPI35_0
614
+ ; CHECK-GI-NEXT: adrp x8, .LCPI36_0
585
615
; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
586
- ; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI35_0 ]
616
+ ; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI36_0 ]
587
617
; CHECK-GI-NEXT: tbl v0.16b, { v0.16b }, v1.16b
588
618
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
589
619
; CHECK-GI-NEXT: ret
@@ -602,9 +632,9 @@ define <3 x i16> @shufflevector_v3i16(<3 x i16> %a, <3 x i16> %b) {
602
632
; CHECK-GI: // %bb.0:
603
633
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
604
634
; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1
605
- ; CHECK-GI-NEXT: adrp x8, .LCPI36_0
635
+ ; CHECK-GI-NEXT: adrp x8, .LCPI37_0
606
636
; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
607
- ; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI36_0 ]
637
+ ; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI37_0 ]
608
638
; CHECK-GI-NEXT: tbl v0.16b, { v0.16b }, v1.16b
609
639
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
610
640
; CHECK-GI-NEXT: ret
@@ -615,18 +645,18 @@ define <3 x i16> @shufflevector_v3i16(<3 x i16> %a, <3 x i16> %b) {
615
645
define <7 x i16 > @shufflevector_v7i16 (<7 x i16 > %a , <7 x i16 > %b ) {
616
646
; CHECK-SD-LABEL: shufflevector_v7i16:
617
647
; CHECK-SD: // %bb.0:
618
- ; CHECK-SD-NEXT: adrp x8, .LCPI37_0
648
+ ; CHECK-SD-NEXT: adrp x8, .LCPI38_0
619
649
; CHECK-SD-NEXT: // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
620
- ; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI37_0 ]
650
+ ; CHECK-SD-NEXT: ldr q2, [x8, :lo12:.LCPI38_0 ]
621
651
; CHECK-SD-NEXT: // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
622
652
; CHECK-SD-NEXT: tbl v0.16b, { v0.16b, v1.16b }, v2.16b
623
653
; CHECK-SD-NEXT: ret
624
654
;
625
655
; CHECK-GI-LABEL: shufflevector_v7i16:
626
656
; CHECK-GI: // %bb.0:
627
- ; CHECK-GI-NEXT: adrp x8, .LCPI37_0
657
+ ; CHECK-GI-NEXT: adrp x8, .LCPI38_0
628
658
; CHECK-GI-NEXT: // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
629
- ; CHECK-GI-NEXT: ldr q2, [x8, :lo12:.LCPI37_0 ]
659
+ ; CHECK-GI-NEXT: ldr q2, [x8, :lo12:.LCPI38_0 ]
630
660
; CHECK-GI-NEXT: // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
631
661
; CHECK-GI-NEXT: tbl v0.16b, { v0.16b, v1.16b }, v2.16b
632
662
; CHECK-GI-NEXT: ret
@@ -643,9 +673,9 @@ define <3 x i32> @shufflevector_v3i32(<3 x i32> %a, <3 x i32> %b) {
643
673
;
644
674
; CHECK-GI-LABEL: shufflevector_v3i32:
645
675
; CHECK-GI: // %bb.0:
646
- ; CHECK-GI-NEXT: adrp x8, .LCPI38_0
676
+ ; CHECK-GI-NEXT: adrp x8, .LCPI39_0
647
677
; CHECK-GI-NEXT: // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
648
- ; CHECK-GI-NEXT: ldr q2, [x8, :lo12:.LCPI38_0 ]
678
+ ; CHECK-GI-NEXT: ldr q2, [x8, :lo12:.LCPI39_0 ]
649
679
; CHECK-GI-NEXT: // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
650
680
; CHECK-GI-NEXT: tbl v0.16b, { v0.16b, v1.16b }, v2.16b
651
681
; CHECK-GI-NEXT: ret
0 commit comments