@@ -994,6 +994,31 @@ entry:
994994 %res = call <vscale x 4 x i32 > @llvm.vector.partial.reduce.add (<vscale x 4 x i32 > zeroinitializer , <vscale x 16 x i32 > %a.ext )
995995 ret <vscale x 4 x i32 > %res
996996}
997+
998+ define <vscale x 2 x i32 > @partial_reduce_select (<vscale x 8 x i8 > %a , <vscale x 8 x i8 > %b , <vscale x 8 x i1 > %m ) {
999+ ; CHECK-LABEL: partial_reduce_select:
1000+ ; CHECK: # %bb.0: # %entry
1001+ ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1002+ ; CHECK-NEXT: vsext.vf2 v12, v8
1003+ ; CHECK-NEXT: vsext.vf2 v14, v9
1004+ ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1005+ ; CHECK-NEXT: vmv.v.i v8, 0
1006+ ; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu
1007+ ; CHECK-NEXT: vwmul.vv v8, v12, v14, v0.t
1008+ ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
1009+ ; CHECK-NEXT: vadd.vv v8, v11, v8
1010+ ; CHECK-NEXT: vadd.vv v9, v9, v10
1011+ ; CHECK-NEXT: vadd.vv v8, v9, v8
1012+ ; CHECK-NEXT: ret
1013+ entry:
1014+ %a.sext = sext <vscale x 8 x i8 > %a to <vscale x 8 x i32 >
1015+ %b.sext = sext <vscale x 8 x i8 > %b to <vscale x 8 x i32 >
1016+ %mul = mul <vscale x 8 x i32 > %a.sext , %b.sext
1017+ %sel = select <vscale x 8 x i1 > %m , <vscale x 8 x i32 > %mul , <vscale x 8 x i32 > zeroinitializer
1018+ %res = call <vscale x 2 x i32 > @llvm.vector.partial.reduce.add (<vscale x 2 x i32 > zeroinitializer , <vscale x 8 x i32 > %sel )
1019+ ret <vscale x 2 x i32 > %res
1020+ }
1021+
9971022;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
9981023; DOT32: {{.*}}
9991024; DOT64: {{.*}}
0 commit comments