[llvm] [DAG] Improved ISD::SHL handling in isKnownToBeAPowerOfTwo (PR #181882)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 17 11:01:15 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-selectiondag
Author: Aadarsh Keshri (Aadarsh-Keshri)
<details>
<summary>Changes</summary>
Did the code changes as suggested in issue #<!-- -->181650
DAG tests are yet to be added.
---
Full diff: https://github.com/llvm/llvm-project/pull/181882.diff
1 Files Affected:
- (modified) llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (+4-2)
``````````diff
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 581553d41cb6d..707e24120514c 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -4712,10 +4712,12 @@ bool SelectionDAG::isKnownToBeAPowerOfTwo(SDValue Val,
case ISD::SHL: {
// A left-shift of a constant one will have exactly one bit set because
// shifting the bit off the end is undefined.
- auto *C = isConstOrConstSplat(Val.getOperand(0));
+ auto *C = isConstOrConstSplat(Val.getOperand(0), DemandedElts);
if (C && C->getAPIntValue() == 1)
return true;
- return isKnownToBeAPowerOfTwo(Val.getOperand(0), /*OrZero=*/false,
+ if (!(OrZero || isKnownNeverZero(Val, Depth)))
+ return false;
+ return isKnownToBeAPowerOfTwo(Val.getOperand(0), DemandedElts, OrZero,
Depth + 1) &&
isKnownNeverZero(Val, Depth);
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/181882
More information about the llvm-commits
mailing list