@@ -683,6 +683,32 @@ define <4 x i8> @unary_interleave_10uu_v4i8(<4 x i8> %x) {
683683 ret <4 x i8 > %a
684684}
685685
686+ define <16 x i16 > @interleave_slp (<8 x i16 > %v0 , <8 x i16 > %v1 ) {
687+ ; V128-LABEL: interleave_slp:
688+ ; V128: # %bb.0: # %entry
689+ ; V128-NEXT: vsetivli zero, 8, e16, m1, ta, ma
690+ ; V128-NEXT: vmv1r.v v10, v9
691+ ; V128-NEXT: vmv1r.v v11, v8
692+ ; V128-NEXT: vwaddu.vv v8, v11, v10
693+ ; V128-NEXT: li a0, -1
694+ ; V128-NEXT: vwmaccu.vx v8, a0, v10
695+ ; V128-NEXT: ret
696+ ;
697+ ; V512-LABEL: interleave_slp:
698+ ; V512: # %bb.0: # %entry
699+ ; V512-NEXT: vsetivli zero, 8, e16, mf4, ta, ma
700+ ; V512-NEXT: vwaddu.vv v10, v8, v9
701+ ; V512-NEXT: li a0, -1
702+ ; V512-NEXT: vwmaccu.vx v10, a0, v9
703+ ; V512-NEXT: vmv1r.v v8, v10
704+ ; V512-NEXT: ret
705+ entry:
706+ %v2 = shufflevector <8 x i16 > %v0 , <8 x i16 > poison, <16 x i32 > <i32 0 , i32 undef , i32 1 , i32 undef , i32 2 , i32 undef , i32 3 , i32 undef , i32 4 , i32 undef , i32 5 , i32 undef , i32 6 , i32 undef , i32 7 , i32 undef >
707+ %v3 = shufflevector <8 x i16 > %v1 , <8 x i16 > poison, <16 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef >
708+ %v4 = shufflevector <16 x i16 > %v2 , <16 x i16 > %v3 , <16 x i32 > <i32 0 , i32 16 , i32 2 , i32 17 , i32 4 , i32 18 , i32 6 , i32 19 , i32 8 , i32 20 , i32 10 , i32 21 , i32 12 , i32 22 , i32 14 , i32 23 >
709+ ret <16 x i16 > %v4
710+ }
711+
686712;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
687713; RV32-V128: {{.*}}
688714; RV64-V128: {{.*}}
0 commit comments