[llvm] 8c83355 - [VPlan] Handle VPIRPhi in VPRecipeBase::isPhi (NFC).
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 21 13:07:07 PDT 2025
Author: Florian Hahn
Date: 2025-04-21T21:04:20+01:00
New Revision: 8c83355d5baa6ecbb5884240df195826380ed952
URL: https://github.com/llvm/llvm-project/commit/8c83355d5baa6ecbb5884240df195826380ed952
DIFF: https://github.com/llvm/llvm-project/commit/8c83355d5baa6ecbb5884240df195826380ed952.diff
LOG: [VPlan] Handle VPIRPhi in VPRecipeBase::isPhi (NFC).
Also handle VPIRPhi in VPRecipeBase::isPhi, to simplify existing code
dealing with VPIRPhis.
Suggested as part of https://github.com/llvm/llvm-project/pull/136455.
Added:
Modified:
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
index 36e14bb27a029..32c3435ccb38d 100644
--- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -9324,10 +9324,8 @@ static void addScalarResumePhis(VPRecipeBuilder &Builder, VPlan &Plan,
VPBuilder ScalarPHBuilder(ScalarPH);
VPValue *OneVPV = Plan.getOrAddLiveIn(
ConstantInt::get(Plan.getCanonicalIV()->getScalarType(), 1));
- for (VPRecipeBase &ScalarPhiR : *Plan.getScalarHeader()) {
- auto *ScalarPhiIRI = dyn_cast<VPIRPhi>(&ScalarPhiR);
- if (!ScalarPhiIRI)
- break;
+ for (VPRecipeBase &ScalarPhiR : Plan.getScalarHeader()->phis()) {
+ auto *ScalarPhiIRI = cast<VPIRPhi>(&ScalarPhiR);
// TODO: Extract final value from induction recipe initially, optimize to
// pre-computed end value together in optimizeInductionExitUsers.
@@ -9381,10 +9379,8 @@ collectUsersInExitBlocks(Loop *OrigLoop, VPRecipeBuilder &Builder,
if (ExitVPBB->getNumPredecessors() == 0)
continue;
- for (VPRecipeBase &R : *ExitVPBB) {
- auto *ExitIRI = dyn_cast<VPIRPhi>(&R);
- if (!ExitIRI)
- break;
+ for (VPRecipeBase &R : ExitVPBB->phis()) {
+ auto *ExitIRI = cast<VPIRPhi>(&R);
if (ExitVPBB->getSinglePredecessor() != Plan.getMiddleBlock()) {
assert(ExitIRI->getNumOperands() ==
ExitVPBB->getPredecessors().size() &&
@@ -10579,10 +10575,9 @@ static void preparePlanForMainVectorLoop(VPlan &MainPlan, VPlan &EpiPlan) {
EpiWidenedPhis.insert(
cast<PHINode>(R.getVPSingleValue()->getUnderlyingValue()));
}
- for (VPRecipeBase &R : make_early_inc_range(*MainPlan.getScalarHeader())) {
- auto *VPIRInst = dyn_cast<VPIRPhi>(&R);
- if (!VPIRInst)
- break;
+ for (VPRecipeBase &R :
+ make_early_inc_range(MainPlan.getScalarHeader()->phis())) {
+ auto *VPIRInst = cast<VPIRPhi>(&R);
if (EpiWidenedPhis.contains(&VPIRInst->getIRPhi()))
continue;
// There is no corresponding wide induction in the epilogue plan that would
diff --git a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
index dac31518997d8..ce64ba7cd2714 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
@@ -274,7 +274,8 @@ InstructionCost VPRecipeBase::computeCost(ElementCount VF,
bool VPRecipeBase::isPhi() const {
return (getVPDefID() >= VPFirstPHISC && getVPDefID() <= VPLastPHISC) ||
(isa<VPInstruction>(this) &&
- cast<VPInstruction>(this)->getOpcode() == Instruction::PHI);
+ cast<VPInstruction>(this)->getOpcode() == Instruction::PHI) ||
+ isa<VPIRPhi>(this);
}
bool VPRecipeBase::isScalarCast() const {
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index 1d3e88037ea43..f2dc68b2ea8b6 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -874,10 +874,8 @@ void VPlanTransforms::optimizeInductionExitUsers(
VPBlockBase *MiddleVPBB = Plan.getMiddleBlock();
VPTypeAnalysis TypeInfo(Plan.getCanonicalIV()->getScalarType());
for (VPIRBasicBlock *ExitVPBB : Plan.getExitBlocks()) {
- for (VPRecipeBase &R : *ExitVPBB) {
- auto *ExitIRI = dyn_cast<VPIRPhi>(&R);
- if (!ExitIRI)
- break;
+ for (VPRecipeBase &R : ExitVPBB->phis()) {
+ auto *ExitIRI = cast<VPIRPhi>(&R);
for (auto [Idx, PredVPBB] : enumerate(ExitVPBB->getPredecessors())) {
VPValue *Escape = nullptr;
@@ -2505,11 +2503,8 @@ void VPlanTransforms::handleUncountableEarlyExit(
// Update the exit phis in the early exit block.
VPBuilder MiddleBuilder(NewMiddle);
VPBuilder EarlyExitB(VectorEarlyExitVPBB);
- for (VPRecipeBase &R : *VPEarlyExitBlock) {
- auto *ExitIRI = dyn_cast<VPIRPhi>(&R);
- if (!ExitIRI)
- break;
-
+ for (VPRecipeBase &R : VPEarlyExitBlock->phis()) {
+ auto *ExitIRI = cast<VPIRPhi>(&R);
PHINode &ExitPhi = ExitIRI->getIRPhi();
VPValue *IncomingFromEarlyExit = RecipeBuilder.getVPValueOrAddLiveIn(
ExitPhi.getIncomingValueForBlock(UncountableExitingBlock));
More information about the llvm-commits
mailing list