[llvm] [SelectionDAG] Add more cases for UDIV and SDIV (PR #86452)
Jay Foad via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 25 03:56:12 PDT 2024
================
@@ -5392,14 +5392,39 @@ bool SelectionDAG::isKnownNeverZero(SDValue Op, unsigned Depth) const {
return true;
break;
}
- case ISD::UDIV:
- case ISD::SDIV:
+ case ISD::UDIV: {
// div exact can only produce a zero if the dividend is zero.
- // TODO: For udiv this is also true if Op1 u<= Op0
if (Op->getFlags().hasExact())
return isKnownNeverZero(Op.getOperand(0), Depth + 1);
+
+ // If Op1 <= Op0, then Op0 is at least 1, and therefore not 0.
+ KnownBits Op0 = computeKnownBits(Op.getOperand(0), Depth + 1);
+ KnownBits Op1 = computeKnownBits(Op.getOperand(1), Depth + 1);
+ std::optional<bool> uge = KnownBits::uge(Op0, Op1);
----------------
jayfoad wrote:
CamelCase for variables, here and elsewhere.
https://github.com/llvm/llvm-project/pull/86452
More information about the llvm-commits
mailing list