@@ -683,6 +683,32 @@ define <4 x i8> @unary_interleave_10uu_v4i8(<4 x i8> %x) {
683
683
ret <4 x i8 > %a
684
684
}
685
685
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
+
686
712
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
687
713
; RV32-V128: {{.*}}
688
714
; RV64-V128: {{.*}}
0 commit comments