[llvm] [InstCombine] Fold -X / -Y -> X / Y (PR #88422)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 11 11:41:54 PDT 2024
================
@@ -1581,12 +1581,30 @@ Instruction *InstCombinerImpl::visitSDiv(BinaryOperator &I) {
}
}
- // -X / Y --> -(X / Y)
Value *Y;
+ // -X / -Y --> (X / Y)
+ if (match(&I, m_SDiv(m_NSWSub(m_Zero(), m_Value(X)),
+ m_NSWSub(m_Zero(), m_Value(Y))))) {
+ auto *NewDiv = BinaryOperator::CreateSDiv(X, Y);
+ NewDiv->setIsExact(I.isExact());
+ return NewDiv;
+ }
+
+ // -X / Y --> -(X / Y)
if (match(&I, m_SDiv(m_OneUse(m_NSWSub(m_Zero(), m_Value(X))), m_Value(Y))))
return BinaryOperator::CreateNSWNeg(
Builder.CreateSDiv(X, Y, I.getName(), I.isExact()));
+ // X / -Y --> -(X / Y), if X is known to not be INT_MIN
+ KnownBits KnownDividend = computeKnownBits(Op0, 0, &I);
+ if (!KnownDividend.getMinValue().isMinSignedValue() &&
----------------
goldsteinn wrote:
getSignedMinValue()
https://github.com/llvm/llvm-project/pull/88422
More information about the llvm-commits
mailing list