[llvm] [SelectionDAG] Add computeKnownBits support for ISD::VECREDUCE_ADD (PR #207631)
Sabona Abdi via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 13 00:11:42 PDT 2026
================
@@ -73,29 +103,61 @@ entry:
}
define signext i16 @sad_16x8_as_i16(<16 x i8> %a, <16 x i8> %b) {
-; CHECK-LABEL: sad_16x8_as_i16:
-; CHECK: # %bb.0: # %entry
-; CHECK-NEXT: vsetivli zero, 16, e16, m1, ta, ma
-; CHECK-NEXT: vmv.s.x v10, zero
-; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
-; CHECK-NEXT: vminu.vv v11, v8, v9
-; CHECK-NEXT: vmaxu.vv v8, v8, v9
-; CHECK-NEXT: vsub.vv v8, v8, v11
-; CHECK-NEXT: vwredsumu.vs v8, v8, v10
-; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
-; CHECK-NEXT: vmv.x.s a0, v8
-; CHECK-NEXT: ret
+; RV32-LABEL: sad_16x8_as_i16:
+; RV32: # %bb.0: # %entry
+; RV32-NEXT: vsetivli zero, 16, e16, m1, ta, ma
+; RV32-NEXT: vmv.s.x v10, zero
+; RV32-NEXT: vsetivli zero, 16, e8, m1, ta, ma
+; RV32-NEXT: vminu.vv v11, v8, v9
+; RV32-NEXT: vmaxu.vv v8, v8, v9
+; RV32-NEXT: vsub.vv v8, v8, v11
+; RV32-NEXT: vwredsumu.vs v8, v8, v10
+; RV32-NEXT: vsetvli zero, zero, e16, m2, ta, ma
+; RV32-NEXT: vmv.x.s a0, v8
+; RV32-NEXT: slli a0, a0, 20
+; RV32-NEXT: srli a0, a0, 20
+; RV32-NEXT: ret
;
-; ZVABD-LABEL: sad_16x8_as_i16:
-; ZVABD: # %bb.0: # %entry
-; ZVABD-NEXT: vsetivli zero, 16, e16, m1, ta, ma
-; ZVABD-NEXT: vmv.s.x v10, zero
-; ZVABD-NEXT: vsetivli zero, 16, e8, m1, ta, ma
-; ZVABD-NEXT: vabdu.vv v8, v8, v9
-; ZVABD-NEXT: vwredsumu.vs v8, v8, v10
-; ZVABD-NEXT: vsetvli zero, zero, e16, m2, ta, ma
-; ZVABD-NEXT: vmv.x.s a0, v8
-; ZVABD-NEXT: ret
+; RV64-LABEL: sad_16x8_as_i16:
+; RV64: # %bb.0: # %entry
+; RV64-NEXT: vsetivli zero, 16, e16, m1, ta, ma
+; RV64-NEXT: vmv.s.x v10, zero
+; RV64-NEXT: vsetivli zero, 16, e8, m1, ta, ma
+; RV64-NEXT: vminu.vv v11, v8, v9
+; RV64-NEXT: vmaxu.vv v8, v8, v9
+; RV64-NEXT: vsub.vv v8, v8, v11
+; RV64-NEXT: vwredsumu.vs v8, v8, v10
+; RV64-NEXT: vsetvli zero, zero, e16, m2, ta, ma
+; RV64-NEXT: vmv.x.s a0, v8
+; RV64-NEXT: slli a0, a0, 52
+; RV64-NEXT: srli a0, a0, 52
+; RV64-NEXT: ret
+;
+; RV32ZVABD-LABEL: sad_16x8_as_i16:
+; RV32ZVABD: # %bb.0: # %entry
+; RV32ZVABD-NEXT: vsetivli zero, 16, e16, m1, ta, ma
+; RV32ZVABD-NEXT: vmv.s.x v10, zero
+; RV32ZVABD-NEXT: vsetivli zero, 16, e8, m1, ta, ma
+; RV32ZVABD-NEXT: vabdu.vv v8, v8, v9
+; RV32ZVABD-NEXT: vwredsumu.vs v8, v8, v10
+; RV32ZVABD-NEXT: vsetvli zero, zero, e16, m2, ta, ma
+; RV32ZVABD-NEXT: vmv.x.s a0, v8
+; RV32ZVABD-NEXT: slli a0, a0, 20
+; RV32ZVABD-NEXT: srli a0, a0, 20
+; RV32ZVABD-NEXT: ret
+;
+; RV64ZVABD-LABEL: sad_16x8_as_i16:
+; RV64ZVABD: # %bb.0: # %entry
+; RV64ZVABD-NEXT: vsetivli zero, 16, e16, m1, ta, ma
+; RV64ZVABD-NEXT: vmv.s.x v10, zero
+; RV64ZVABD-NEXT: vsetivli zero, 16, e8, m1, ta, ma
+; RV64ZVABD-NEXT: vabdu.vv v8, v8, v9
+; RV64ZVABD-NEXT: vwredsumu.vs v8, v8, v10
+; RV64ZVABD-NEXT: vsetvli zero, zero, e16, m2, ta, ma
+; RV64ZVABD-NEXT: vmv.x.s a0, v8
+; RV64ZVABD-NEXT: slli a0, a0, 52
+; RV64ZVABD-NEXT: srli a0, a0, 52
----------------
sabonaoabdi wrote:
I'll open an issue to track known-bits support for RISCVISD::VECREDUCE_ADD_VL.
@RKSimon since you requested reviews, good to merge this and handle the RISC-V slli/srli in the follow-up, or hold until that's fixed?
https://github.com/llvm/llvm-project/pull/207631
More information about the llvm-commits
mailing list