diff --git a/llvm/lib/Transforms/Vectorize/VPlan.h b/llvm/lib/Transforms/Vectorize/VPlan.h index 2f808e0f9017..5b029cb4f718 100644 --- a/llvm/lib/Transforms/Vectorize/VPlan.h +++ b/llvm/lib/Transforms/Vectorize/VPlan.h @@ -1614,6 +1614,13 @@ public: // Mask is optional. return getNumOperands() == 1 ? getOperand(0) : nullptr; } + + /// Returns true if the recipe uses scalars of operand \p Op. + bool usesScalars(const VPValue *Op) const override { + assert(is_contained(operands(), Op) && + "Op must be an operand of the recipe"); + return true; + } }; /// VPPredInstPHIRecipe is a recipe for generating the phi nodes needed when diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp index a90ea9d4e11c..47ecc3b12a24 100644 --- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp +++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp @@ -392,15 +392,8 @@ void VPlanTransforms::optimizeInductions(VPlan &Plan, ScalarEvolution &SE) { IV->getStartValue(), Step, TruncI ? TruncI->getType() : nullptr); HeaderVPBB->insert(Steps, HeaderVPBB->getFirstNonPhi()); - // If there are no vector users of IV, simply update all users to use Step - // instead. - if (!IV->needsVectorIV()) { - IV->replaceAllUsesWith(Steps); - continue; - } - - // Otherwise only update scalar users of IV to use Step instead. Use - // SetVector to ensure the list of users doesn't contain duplicates. + // Update scalar users of IV to use Step instead. Use SetVector to ensure + // the list of users doesn't contain duplicates. SetVector Users(IV->user_begin(), IV->user_end()); for (VPUser *U : Users) { if (!U->usesScalars(IV))