From cedfd7a2e536d2ff6da44e89a024baa402dc3e58 Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Wed, 8 Jun 2022 14:06:45 +0100 Subject: [PATCH] Recommit "[VPlan] Remove uneeded needsVectorIV check." This reverts commit 266ea446ab747671eb6c736569c3c9c5f3c53d11. The reasons for the revert have been addressed by cleaning up condition handling in VPlan and properly marking VPBranchOnMaskRecipe as using scalars. The test case for the revert from D123720 has been added in 3d663308a5d. --- llvm/lib/Transforms/Vectorize/VPlan.h | 7 +++++++ llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp | 11 ++--------- 2 files changed, 9 insertions(+), 9 deletions(-) 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))