@@ -730,6 +730,111 @@ entry:
730730 ret void
731731}
732732
733+ define void @store_factor8 (ptr %ptr , <4 x i32 > %a0 , <4 x i32 > %a1 , <4 x i32 > %a2 , <4 x i32 > %a3 ,
734+ <4 x i32 > %a4 , <4 x i32 > %a5 , <4 x i32 > %a6 , <4 x i32 > %a7 ) {
735+ ; CHECK-LABEL: store_factor8:
736+ ; CHECK: .Lfunc_begin17:
737+ ; CHECK-NEXT: .cfi_startproc
738+ ; CHECK-NEXT: // %bb.0:
739+ ; CHECK: zip1 [[V1:.*s]], [[I1:.*s]], [[I5:.*s]]
740+ ; CHECK-NEXT: zip2 [[V5:.*s]], [[I1]], [[I5]]
741+ ; CHECK-NEXT: zip1 [[V2:.*s]], [[I2:.*s]], [[I6:.*s]]
742+ ; CHECK-NEXT: zip2 [[V6:.*s]], [[I2]], [[I6]]
743+ ; CHECK-NEXT: zip1 [[V3:.*s]], [[I3:.*s]], [[I7:.*s]]
744+ ; CHECK-NEXT: zip2 [[V7:.*s]], [[I3]], [[I7]]
745+ ; CHECK-NEXT: zip1 [[V4:.*s]], [[I4:.*s]], [[I8:.*s]]
746+ ; CHECK-NEXT: zip2 [[V8:.*s]], [[I4]], [[I8]]
747+ ; CHECK-NEXT: st4 { [[V1]], [[V2]], [[V3]], [[V4]] }, [x0], #64
748+ ; CHECK-NEXT: st4 { [[V5]], [[V6]], [[V7]], [[V8]] }, [x0]
749+ ; CHECK-NEXT: ret
750+
751+ %v0 = shufflevector <4 x i32 > %a0 , <4 x i32 > %a1 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
752+ %v1 = shufflevector <4 x i32 > %a2 , <4 x i32 > %a3 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
753+ %v2 = shufflevector <4 x i32 > %a4 , <4 x i32 > %a5 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
754+ %v3 = shufflevector <4 x i32 > %a6 , <4 x i32 > %a7 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
755+
756+ %s0 = shufflevector <8 x i32 > %v0 , <8 x i32 > %v1 , <16 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
757+ %s1 = shufflevector <8 x i32 > %v2 , <8 x i32 > %v3 , <16 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
758+
759+ %interleaved.vec = shufflevector <16 x i32 > %s0 , <16 x i32 > %s1 , <32 x i32 > <i32 0 , i32 4 , i32 8 , i32 12 , i32 16 , i32 20 , i32 24 , i32 28 , i32 1 , i32 5 , i32 9 , i32 13 , i32 17 , i32 21 , i32 25 , i32 29 , i32 2 , i32 6 , i32 10 , i32 14 , i32 18 , i32 22 , i32 26 , i32 30 , i32 3 , i32 7 , i32 11 , i32 15 , i32 19 , i32 23 , i32 27 , i32 31 >
760+ store <32 x i32 > %interleaved.vec , ptr %ptr , align 4
761+ ret void
762+ }
763+
764+ define void @store_factor16 (ptr %ptr , <4 x i32 > %a0 , <4 x i32 > %a1 , <4 x i32 > %a2 , <4 x i32 > %a3 ,
765+ <4 x i32 > %a4 , <4 x i32 > %a5 , <4 x i32 > %a6 , <4 x i32 > %a7 ,
766+ <4 x i32 > %a8 , <4 x i32 > %a9 , <4 x i32 > %a10 , <4 x i32 > %a11 ,
767+ <4 x i32 > %a12 , <4 x i32 > %a13 , <4 x i32 > %a14 , <4 x i32 > %a15 ) {
768+ ; CHECK-LABEL: store_factor16:
769+ ; CHECK: .Lfunc_begin18:
770+ ; CHECK-NEXT: .cfi_startproc
771+ ; CHECK-NEXT: // %bb.0:
772+ ; CHECK: zip1 [[V05:.*s]], [[I05:.*s]], [[I13:.*s]]
773+ ; CHECK-NEXT: zip1 [[V01:.*s]], [[I01:.*s]], [[I09:.*s]]
774+ ; CHECK-NEXT: zip1 [[V02:.*s]], [[I02:.*s]], [[I10:.*s]]
775+ ; CHECK-NEXT: zip1 [[V06:.*s]], [[I06:.*s]], [[I14:.*s]]
776+ ; CHECK-NEXT: zip1 [[V07:.*s]], [[I07:.*s]], [[I15:.*s]]
777+ ; CHECK-NEXT: zip2 [[V09:.*s]], [[I01]], [[I09]]
778+ ; CHECK-NEXT: zip2 [[V13:.*s]], [[I05]], [[I13]]
779+ ; CHECK-NEXT: zip1 [[V03:.*s]], [[I03:.*s]], [[I11:.*s]]
780+ ; CHECK-NEXT: zip1 [[V04:.*s]], [[I04:.*s]], [[I12:.*s]]
781+ ; CHECK-NEXT: zip1 [[V08:.*s]], [[I08:.*s]], [[I16:.*s]]
782+ ; CHECK-NEXT: zip2 [[V10:.*s]], [[I02]], [[I10]]
783+ ; CHECK-NEXT: zip2 [[V14:.*s]], [[I06]], [[I14]]
784+ ; CHECK-NEXT: zip2 [[V11:.*s]], [[I03]], [[I11]]
785+ ; CHECK-NEXT: zip1 [[V17:.*s]], [[V01]], [[V05]]
786+ ; CHECK-NEXT: zip2 [[V15:.*s]], [[I07]], [[I15]]
787+ ; CHECK-NEXT: zip2 [[V21:.*s]], [[V01]], [[V05]]
788+ ; CHECK-NEXT: zip1 [[V18:.*s]], [[V02]], [[V06]]
789+ ; CHECK-NEXT: zip2 [[V12:.*s]], [[I04]], [[I12]]
790+ ; CHECK-NEXT: zip2 [[V16:.*s]], [[I08]], [[I16]]
791+ ; CHECK-NEXT: zip1 [[V19:.*s]], [[V03]], [[V07]]
792+ ; CHECK-NEXT: zip2 [[V22:.*s]], [[V02]], [[V06]]
793+ ; CHECK-NEXT: zip1 [[V25:.*s]], [[V09]], [[V13]]
794+ ; CHECK-NEXT: zip1 [[V20:.*s]], [[V04]], [[V08]]
795+ ; CHECK-NEXT: zip2 [[V23:.*s]], [[V03]], [[V07]]
796+ ; CHECK-NEXT: zip1 [[V26:.*s]], [[V10]], [[V14]]
797+ ; CHECK-NEXT: zip2 [[V29:.*s]], [[V09]], [[V13]]
798+ ; CHECK-NEXT: zip2 [[V24:.*s]], [[V04]], [[V08]]
799+ ; CHECK-NEXT: zip1 [[V27:.*s]], [[V11]], [[V15]]
800+ ; CHECK-NEXT: zip2 [[V30:.*s]], [[V10]], [[V14]]
801+ ; CHECK-NEXT: zip1 [[V28:.*s]], [[V12]], [[V16]]
802+ ; CHECK-NEXT: zip2 [[V31:.*s]], [[V11]], [[V15]]
803+ ; CHECK-NEXT: zip2 [[V32:.*s]], [[V12]], [[V16]]
804+ ; CHECK-NEXT: st4 { [[V17]], [[V18]], [[V19]], [[V20]] }, [x8], #64
805+ ; CHECK-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload
806+ ; CHECK-NEXT: ldp d11, d10, [sp, #32] // 16-byte Folded Reload
807+ ; CHECK-NEXT: st4 { [[V21]], [[V22]], [[V23]], [[V24]] }, [x8]
808+ ; CHECK-NEXT: add x8, x0, #128
809+ ; CHECK-NEXT: ldp d13, d12, [sp, #16] // 16-byte Folded Reload
810+ ; CHECK-NEXT: st4 { [[V25]], [[V26]], [[V27]], [[V28]] }, [x8]
811+ ; CHECK-NEXT: add x8, x0, #192
812+ ; CHECK-NEXT: st4 { [[V29]], [[V30]], [[V31]], [[V32]] }, [x8]
813+ ; CHECK-NEXT: ldp d15, d14, [sp], #64 // 16-byte Folded Reload
814+ ; CHECK-NEXT: ret
815+
816+ %v0 = shufflevector <4 x i32 > %a0 , <4 x i32 > %a1 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
817+ %v1 = shufflevector <4 x i32 > %a2 , <4 x i32 > %a3 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
818+ %v2 = shufflevector <4 x i32 > %a4 , <4 x i32 > %a5 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
819+ %v3 = shufflevector <4 x i32 > %a6 , <4 x i32 > %a7 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
820+ %v4 = shufflevector <4 x i32 > %a8 , <4 x i32 > %a9 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
821+ %v5 = shufflevector <4 x i32 > %a10 , <4 x i32 > %a11 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
822+ %v6 = shufflevector <4 x i32 > %a12 , <4 x i32 > %a13 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
823+ %v7 = shufflevector <4 x i32 > %a14 , <4 x i32 > %a15 , <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 >
824+
825+ %s0 = shufflevector <8 x i32 > %v0 , <8 x i32 > %v1 , <16 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
826+ %s1 = shufflevector <8 x i32 > %v2 , <8 x i32 > %v3 , <16 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
827+ %s2 = shufflevector <8 x i32 > %v4 , <8 x i32 > %v5 , <16 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
828+ %s3 = shufflevector <8 x i32 > %v6 , <8 x i32 > %v7 , <16 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
829+
830+ %d0 = shufflevector <16 x i32 > %s0 , <16 x i32 > %s1 , <32 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 , i32 16 , i32 17 , i32 18 , i32 19 , i32 20 , i32 21 , i32 22 , i32 23 , i32 24 , i32 25 , i32 26 , i32 27 , i32 28 , i32 29 , i32 30 , i32 31 >
831+ %d1 = shufflevector <16 x i32 > %s2 , <16 x i32 > %s3 , <32 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 , i32 16 , i32 17 , i32 18 , i32 19 , i32 20 , i32 21 , i32 22 , i32 23 , i32 24 , i32 25 , i32 26 , i32 27 , i32 28 , i32 29 , i32 30 , i32 31 >
832+
833+ %interleaved.vec = shufflevector <32 x i32 > %d0 , <32 x i32 > %d1 , <64 x i32 > <i32 0 , i32 4 , i32 8 , i32 12 , i32 16 , i32 20 , i32 24 , i32 28 , i32 32 , i32 36 , i32 40 , i32 44 , i32 48 , i32 52 , i32 56 , i32 60 , i32 1 , i32 5 , i32 9 , i32 13 , i32 17 , i32 21 , i32 25 , i32 29 , i32 33 , i32 37 , i32 41 , i32 45 , i32 49 , i32 53 , i32 57 , i32 61 , i32 2 , i32 6 , i32 10 , i32 14 , i32 18 , i32 22 , i32 26 , i32 30 , i32 34 , i32 38 , i32 42 , i32 46 , i32 50 , i32 54 , i32 58 , i32 62 , i32 3 , i32 7 , i32 11 , i32 15 , i32 19 , i32 23 , i32 27 , i32 31 , i32 35 , i32 39 , i32 43 , i32 47 , i32 51 , i32 55 , i32 59 , i32 63 >
834+ store <64 x i32 > %interleaved.vec , ptr %ptr , align 4
835+ ret void
836+ }
837+
733838declare void @llvm.dbg.value (metadata , metadata , metadata )
734839
735840!llvm.dbg.cu = !{!0 }
0 commit comments