[llvm] r324122 - [InstCombine] simplify logic for swapMayExposeCSEOpportunities; NFCI
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 2 11:08:13 PST 2018
Author: spatel
Date: Fri Feb 2 11:08:12 2018
New Revision: 324122
URL: http://llvm.org/viewvc/llvm-project?rev=324122&view=rev
Log:
[InstCombine] simplify logic for swapMayExposeCSEOpportunities; NFCI
Modified:
llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp?rev=324122&r1=324121&r2=324122&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp Fri Feb 2 11:08:12 2018
@@ -3897,31 +3897,17 @@ static bool swapMayExposeCSEOpportunitie
// FIXME: we may want to go through inttoptrs or bitcasts.
if (Op0->getType()->isPointerTy())
return false;
- // Count all uses of both Op0 and Op1 in a subtract.
- // Each time Op0 is the first operand, count -1: swapping is bad, the
- // subtract has already the same layout as the compare.
- // Each time Op0 is the second operand, count +1: swapping is good, the
- // subtract has a different layout as the compare.
- // At the end, if the benefit is greater than 0, Op0 should come second to
- // expose more CSE opportunities.
- int GlobalSwapBenefits = 0;
+ // If a subtract already has the same operands as a compare, swapping would be
+ // bad. If a subtract has the same operands as a compare but in reverse order,
+ // then swapping is good.
+ int GoodToSwap = 0;
for (const User *U : Op0->users()) {
- const BinaryOperator *BinOp = dyn_cast<BinaryOperator>(U);
- if (!BinOp || BinOp->getOpcode() != Instruction::Sub)
- continue;
- // If Op0 is the first argument, this is not beneficial to swap the
- // arguments.
- int LocalSwapBenefits = -1;
- unsigned Op1Idx = 1;
- if (BinOp->getOperand(Op1Idx) == Op0) {
- Op1Idx = 0;
- LocalSwapBenefits = 1;
- }
- if (BinOp->getOperand(Op1Idx) != Op1)
- continue;
- GlobalSwapBenefits += LocalSwapBenefits;
+ if (match(U, m_Sub(m_Specific(Op1), m_Specific(Op0))))
+ GoodToSwap++;
+ else if (match(U, m_Sub(m_Specific(Op0), m_Specific(Op1))))
+ GoodToSwap--;
}
- return GlobalSwapBenefits > 0;
+ return GoodToSwap > 0;
}
/// \brief Check that one use is in the same block as the definition and all
More information about the llvm-commits
mailing list