[llvm] r322955 - [InstSimplify] use m_Specific and commutative matcher to reduce code; NFCI
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 19 08:12:55 PST 2018
Author: spatel
Date: Fri Jan 19 08:12:55 2018
New Revision: 322955
URL: http://llvm.org/viewvc/llvm-project?rev=322955&view=rev
Log:
[InstSimplify] use m_Specific and commutative matcher to reduce code; NFCI
Modified:
llvm/trunk/lib/Analysis/InstructionSimplify.cpp
Modified: llvm/trunk/lib/Analysis/InstructionSimplify.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/InstructionSimplify.cpp?rev=322955&r1=322954&r2=322955&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/InstructionSimplify.cpp (original)
+++ llvm/trunk/lib/Analysis/InstructionSimplify.cpp Fri Jan 19 08:12:55 2018
@@ -978,18 +978,17 @@ static Value *simplifyDiv(Instruction::B
bool IsSigned = Opcode == Instruction::SDiv;
// (X * Y) / Y -> X if the multiplication does not overflow.
- Value *X = nullptr, *Y = nullptr;
- if (match(Op0, m_Mul(m_Value(X), m_Value(Y))) && (X == Op1 || Y == Op1)) {
- if (Y != Op1) std::swap(X, Y); // Ensure expression is (X * Y) / Y, Y = Op1
- OverflowingBinaryOperator *Mul = cast<OverflowingBinaryOperator>(Op0);
- // If the Mul knows it does not overflow, then we are good to go.
+ Value *X;
+ if (match(Op0, m_c_Mul(m_Value(X), m_Specific(Op1)))) {
+ auto *Mul = cast<OverflowingBinaryOperator>(Op0);
+ // If the Mul does not overflow, then we are good to go.
if ((IsSigned && Mul->hasNoSignedWrap()) ||
(!IsSigned && Mul->hasNoUnsignedWrap()))
return X;
- // If X has the form X = A / Y then X * Y cannot overflow.
- if (BinaryOperator *Div = dyn_cast<BinaryOperator>(X))
- if (Div->getOpcode() == Opcode && Div->getOperand(1) == Y)
- return X;
+ // If X has the form X = A / Y, then X * Y cannot overflow.
+ if ((IsSigned && match(X, m_SDiv(m_Value(), m_Specific(Op1)))) ||
+ (!IsSigned && match(X, m_UDiv(m_Value(), m_Specific(Op1)))))
+ return X;
}
// (X rem Y) / Y -> 0
More information about the llvm-commits
mailing list