diff options
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Scalar/StraightLineStrengthReduce.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/Scalar/StraightLineStrengthReduce.cpp b/llvm/lib/Transforms/Scalar/StraightLineStrengthReduce.cpp index 2061db13639..b5089b006bd 100644 --- a/llvm/lib/Transforms/Scalar/StraightLineStrengthReduce.cpp +++ b/llvm/lib/Transforms/Scalar/StraightLineStrengthReduce.cpp @@ -640,12 +640,12 @@ void StraightLineStrengthReduce::rewriteCandidateWithBasis( Value *Reduced = nullptr; // equivalent to but weaker than C.Ins switch (C.CandidateKind) { case Candidate::Add: - case Candidate::Mul: + case Candidate::Mul: { // C = Basis + Bump - if (BinaryOperator::isNeg(Bump)) { + Value *NegBump; + if (match(Bump, m_Neg(m_Value(NegBump)))) { // If Bump is a neg instruction, emit C = Basis - (-Bump). - Reduced = - Builder.CreateSub(Basis.Ins, BinaryOperator::getNegArgument(Bump)); + Reduced = Builder.CreateSub(Basis.Ins, NegBump); // We only use the negative argument of Bump, and Bump itself may be // trivially dead. RecursivelyDeleteTriviallyDeadInstructions(Bump); @@ -662,6 +662,7 @@ void StraightLineStrengthReduce::rewriteCandidateWithBasis( Reduced = Builder.CreateAdd(Basis.Ins, Bump); } break; + } case Candidate::GEP: { Type *IntPtrTy = DL->getIntPtrType(C.Ins->getType()); |