[llvm] [SelectionDAG]: Add more cases for UDIV, SDIV, SRA, and SRL (PR #89522)
Jay Foad via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 10 01:35:39 PDT 2024
================
@@ -5612,12 +5683,32 @@ bool SelectionDAG::isKnownNeverZero(SDValue Op, unsigned Depth) const {
return ne && *ne;
}
- case ISD::MUL:
+ case ISD::MUL: {
if (Op->getFlags().hasNoSignedWrap() || Op->getFlags().hasNoUnsignedWrap())
if (isKnownNeverZero(Op.getOperand(1), Depth + 1) &&
isKnownNeverZero(Op.getOperand(0), Depth + 1))
return true;
+
+ KnownBits XKnown = computeKnownBits(Op.getOperand(0), Depth + 1);
+ if (XKnown.One[0])
+ if (isKnownNeverZero(Op.getOperand(1), Depth + 1))
+ return true;
+
+ KnownBits YKnown = computeKnownBits(Op.getOperand(1), Depth + 1);
+ if (YKnown.One[0])
+ if (XKnown.isNonZero() || isKnownNeverZero(Op.getOperand(0), Depth + 1))
----------------
jayfoad wrote:
Suggest removing `XKnown.isNonZero() || ` here since it will be handled by the general case below (and the general case is not slow).
https://github.com/llvm/llvm-project/pull/89522
More information about the llvm-commits
mailing list