@@ -387,6 +387,36 @@ define <4 x i64> @shufflevector_v4i64(<4 x i64> %a, <4 x i64> %b) {
387387 ret <4 x i64 > %c
388388}
389389
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+
390420define <4 x ptr > @shufflevector_v4p0 (<4 x ptr > %a , <4 x ptr > %b ) {
391421; CHECK-SD-LABEL: shufflevector_v4p0:
392422; CHECK-SD: // %bb.0:
@@ -550,13 +580,13 @@ define <3 x i8> @shufflevector_v3i8(<3 x i8> %a, <3 x i8> %b) {
550580; CHECK-GI: // %bb.0:
551581; CHECK-GI-NEXT: fmov s0, w0
552582; CHECK-GI-NEXT: fmov s1, w3
553- ; CHECK-GI-NEXT: adrp x8, .LCPI34_0
583+ ; CHECK-GI-NEXT: adrp x8, .LCPI35_0
554584; CHECK-GI-NEXT: mov v0.b[1], w1
555585; CHECK-GI-NEXT: mov v1.b[1], w4
556586; CHECK-GI-NEXT: mov v0.b[2], w2
557587; CHECK-GI-NEXT: mov v1.b[2], w5
558588; 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 ]
560590; CHECK-GI-NEXT: tbl v0.16b, { v0.16b }, v1.16b
561591; CHECK-GI-NEXT: umov w0, v0.b[0]
562592; 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) {
571601; CHECK-SD: // %bb.0:
572602; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
573603; 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
575605; 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 ]
577607; CHECK-SD-NEXT: tbl v0.8b, { v0.16b }, v1.8b
578608; CHECK-SD-NEXT: ret
579609;
580610; CHECK-GI-LABEL: shufflevector_v7i8:
581611; CHECK-GI: // %bb.0:
582612; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
583613; 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
585615; 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 ]
587617; CHECK-GI-NEXT: tbl v0.16b, { v0.16b }, v1.16b
588618; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
589619; CHECK-GI-NEXT: ret
@@ -602,9 +632,9 @@ define <3 x i16> @shufflevector_v3i16(<3 x i16> %a, <3 x i16> %b) {
602632; CHECK-GI: // %bb.0:
603633; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
604634; 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
606636; 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 ]
608638; CHECK-GI-NEXT: tbl v0.16b, { v0.16b }, v1.16b
609639; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
610640; CHECK-GI-NEXT: ret
@@ -615,18 +645,18 @@ define <3 x i16> @shufflevector_v3i16(<3 x i16> %a, <3 x i16> %b) {
615645define <7 x i16 > @shufflevector_v7i16 (<7 x i16 > %a , <7 x i16 > %b ) {
616646; CHECK-SD-LABEL: shufflevector_v7i16:
617647; CHECK-SD: // %bb.0:
618- ; CHECK-SD-NEXT: adrp x8, .LCPI37_0
648+ ; CHECK-SD-NEXT: adrp x8, .LCPI38_0
619649; 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 ]
621651; CHECK-SD-NEXT: // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
622652; CHECK-SD-NEXT: tbl v0.16b, { v0.16b, v1.16b }, v2.16b
623653; CHECK-SD-NEXT: ret
624654;
625655; CHECK-GI-LABEL: shufflevector_v7i16:
626656; CHECK-GI: // %bb.0:
627- ; CHECK-GI-NEXT: adrp x8, .LCPI37_0
657+ ; CHECK-GI-NEXT: adrp x8, .LCPI38_0
628658; 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 ]
630660; CHECK-GI-NEXT: // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
631661; CHECK-GI-NEXT: tbl v0.16b, { v0.16b, v1.16b }, v2.16b
632662; CHECK-GI-NEXT: ret
@@ -643,9 +673,9 @@ define <3 x i32> @shufflevector_v3i32(<3 x i32> %a, <3 x i32> %b) {
643673;
644674; CHECK-GI-LABEL: shufflevector_v3i32:
645675; CHECK-GI: // %bb.0:
646- ; CHECK-GI-NEXT: adrp x8, .LCPI38_0
676+ ; CHECK-GI-NEXT: adrp x8, .LCPI39_0
647677; 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 ]
649679; CHECK-GI-NEXT: // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
650680; CHECK-GI-NEXT: tbl v0.16b, { v0.16b, v1.16b }, v2.16b
651681; CHECK-GI-NEXT: ret
0 commit comments