[llvm] [RISCV] computeKnownBits - add support for RISCVISD::VECREDUCE_ADD_VL (PR #210493)
Sabona Abdi via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 18 01:05:46 PDT 2026
https://github.com/sabonaoabdi updated https://github.com/llvm/llvm-project/pull/210493
>From c03f88d62f28e1cdcb700a021917f08f79022ac9 Mon Sep 17 00:00:00 2001
From: sabonaoabdi <sabonaoabdi at gmail.com>
Date: Sat, 18 Jul 2026 01:45:43 -0500
Subject: [PATCH] [RISCV] Add computeKnownBits support for
RISCVISD::VECREDUCE_ADD_VL
---
llvm/lib/Target/RISCV/RISCVISelLowering.cpp | 22 +++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
index 96b6f391863c4..806dc7f1d12b0 100644
--- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
@@ -24108,6 +24108,28 @@ void RISCVTargetLowering::computeKnownBitsForTargetNode(const SDValue Op,
Known.Zero.setBitsFrom(Known2.countMaxActiveBits());
break;
}
+ case RISCVISD::VECREDUCE_ADD_VL: {
+ SDValue Src = Op.getOperand(1);
+ SDValue InitVal = Op.getOperand(2);
+ SDValue VL = Op.getOperand(4);
+ unsigned NumElts;
+
+ if (isa<ConstantSDNode>(VL)) {
+ NumElts = VL->getAsZExtVal();
+ } else {
+ const RISCVSubtarget &SubTarget = DAG.getSubtarget<RISCVSubtarget>();
+ auto [Min, Max] = computeVLMAXBounds(Src.getSimpleValueType(), SubTarget);
+ NumElts = Max;
+ }
+
+ KnownBits KnownAcrossElts =
+ DAG.computeKnownBits(Src, APInt::getAllOnes(1), Depth + 1);
+ KnownBits VecSum = KnownAcrossElts.reduceAdd(NumElts);
+ KnownBits Start = DAG.computeKnownBits(InitVal, Depth + 1);
+
+ Known = KnownBits::add(Start, VecSum);
+ break;
+ }
case RISCVISD::CZERO_EQZ:
case RISCVISD::CZERO_NEZ:
Known = DAG.computeKnownBits(Op.getOperand(0), Depth + 1);
More information about the llvm-commits
mailing list