[llvm] [SelectionDAG] Add computeKnownBits support for ISD::VECREDUCE_ADD (PR #207631)

Sabona Abdi via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 9 19:04:40 PDT 2026


================
@@ -38,31 +40,82 @@ entry:
 }
 
 define signext i32 @sad_4x8_as_i32(<4 x i8> %a, <4 x i8> %b) {
-; CHECK-LABEL: sad_4x8_as_i32:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; CHECK-NEXT:    vmv.s.x v10, zero
-; CHECK-NEXT:    vsetvli zero, zero, e8, mf4, 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:    vsetvli zero, zero, e32, m1, ta, ma
-; CHECK-NEXT:    vzext.vf4 v9, v8
-; CHECK-NEXT:    vredsum.vs v8, v9, v10
-; CHECK-NEXT:    vmv.x.s a0, v8
-; CHECK-NEXT:    ret
+; RV32-LABEL: sad_4x8_as_i32:
+; RV32:       # %bb.0: # %entry
+; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; RV32-NEXT:    vmv.s.x v10, zero
+; RV32-NEXT:    vsetvli zero, zero, e8, mf4, 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:    vsetvli zero, zero, e32, m1, ta, ma
+; RV32-NEXT:    vzext.vf4 v9, v8
+; RV32-NEXT:    vredsum.vs v8, v9, v10
+; RV32-NEXT:    vmv.x.s a0, v8
+; RV32-NEXT:    ret
 ;
-; ZVABD-LABEL: sad_4x8_as_i32:
-; ZVABD:       # %bb.0: # %entry
-; ZVABD-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; ZVABD-NEXT:    vmv.s.x v10, zero
-; ZVABD-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
-; ZVABD-NEXT:    vabdu.vv v8, v8, v9
-; ZVABD-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
-; ZVABD-NEXT:    vzext.vf4 v9, v8
-; ZVABD-NEXT:    vredsum.vs v8, v9, v10
-; ZVABD-NEXT:    vmv.x.s a0, v8
-; ZVABD-NEXT:    ret
+; RV64-LABEL: sad_4x8_as_i32:
+; RV64:       # %bb.0: # %entry
+; RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; RV64-NEXT:    vmv.s.x v10, zero
+; RV64-NEXT:    vsetvli zero, zero, e8, mf4, 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:    vsetvli zero, zero, e32, m1, ta, ma
+; RV64-NEXT:    vzext.vf4 v9, v8
+; RV64-NEXT:    vredsum.vs v8, v9, v10
+; RV64-NEXT:    vmv.x.s a0, v8
+; RV64-NEXT:    andi a0, a0, 1023
+; RV64-NEXT:    ret
+;
+; RV32ZVABD-LABEL: sad_4x8_as_i32:
+; RV32ZVABD:       # %bb.0: # %entry
+; RV32ZVABD-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; RV32ZVABD-NEXT:    vmv.s.x v10, zero
+; RV32ZVABD-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
+; RV32ZVABD-NEXT:    vabdu.vv v8, v8, v9
+; RV32ZVABD-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; RV32ZVABD-NEXT:    vzext.vf4 v9, v8
+; RV32ZVABD-NEXT:    vredsum.vs v8, v9, v10
+; RV32ZVABD-NEXT:    vmv.x.s a0, v8
+; RV32ZVABD-NEXT:    ret
+;
+; RV64ZVABD-LABEL: sad_4x8_as_i32:
+; RV64ZVABD:       # %bb.0: # %entry
+; RV64ZVABD-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; RV64ZVABD-NEXT:    vmv.s.x v10, zero
+; RV64ZVABD-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
+; RV64ZVABD-NEXT:    vabdu.vv v8, v8, v9
+; RV64ZVABD-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; RV64ZVABD-NEXT:    vzext.vf4 v9, v8
+; RV64ZVABD-NEXT:    vredsum.vs v8, v9, v10
+; RV64ZVABD-NEXT:    vmv.x.s a0, v8
+; RV64ZVABD-NEXT:    andi a0, a0, 1023
+; RV64ZVABD-NEXT:    ret
+; ZVABD32-LABEL: sad_4x8_as_i32:
----------------
sabonaoabdi wrote:

removed the ZVABD32 and ZVABD64 lines, thanks

https://github.com/llvm/llvm-project/pull/207631


More information about the llvm-commits mailing list