@@ -7703,8 +7703,7 @@ DenseMap<const SCEV *, Value *> LoopVectorizationPlanner::executePlan(
7703
7703
BestVPlan.execute (&State);
7704
7704
7705
7705
// 2.5 Collect reduction resume values.
7706
- auto *ExitVPBB =
7707
- cast<VPBasicBlock>(BestVPlan.getVectorLoopRegion ()->getSingleSuccessor ());
7706
+ auto *ExitVPBB = BestVPlan.getMiddleBlock ();
7708
7707
if (VectorizingEpilogue)
7709
7708
for (VPRecipeBase &R : *ExitVPBB) {
7710
7709
fixReductionScalarResumeWhenVectorizingEpilog (
@@ -8830,8 +8829,7 @@ static void addScalarResumePhis(VPRecipeBuilder &Builder, VPlan &Plan) {
8830
8829
static SetVector<VPIRInstruction *> collectUsersInExitBlock (
8831
8830
Loop *OrigLoop, VPRecipeBuilder &Builder, VPlan &Plan,
8832
8831
const MapVector<PHINode *, InductionDescriptor> &Inductions) {
8833
- auto *MiddleVPBB =
8834
- cast<VPBasicBlock>(Plan.getVectorLoopRegion ()->getSingleSuccessor ());
8832
+ auto *MiddleVPBB = Plan.getMiddleBlock ();
8835
8833
// No edge from the middle block to the unique exit block has been inserted
8836
8834
// and there is nothing to fix from vector loop; phis should have incoming
8837
8835
// from scalar loop only.
@@ -8876,8 +8874,7 @@ addUsersInExitBlock(VPlan &Plan,
8876
8874
if (ExitUsersToFix.empty ())
8877
8875
return ;
8878
8876
8879
- auto *MiddleVPBB =
8880
- cast<VPBasicBlock>(Plan.getVectorLoopRegion ()->getSingleSuccessor ());
8877
+ auto *MiddleVPBB = Plan.getMiddleBlock ();
8881
8878
VPBuilder B (MiddleVPBB, MiddleVPBB->getFirstNonPhi ());
8882
8879
8883
8880
// Introduce extract for exiting values and update the VPIRInstructions
@@ -8905,7 +8902,7 @@ static void addExitUsersForFirstOrderRecurrences(
8905
8902
VPlan &Plan, SetVector<VPIRInstruction *> &ExitUsersToFix) {
8906
8903
VPRegionBlock *VectorRegion = Plan.getVectorLoopRegion ();
8907
8904
auto *ScalarPHVPBB = Plan.getScalarPreheader ();
8908
- auto *MiddleVPBB = cast<VPBasicBlock>(VectorRegion-> getSingleSuccessor () );
8905
+ auto *MiddleVPBB = Plan. getMiddleBlock ( );
8909
8906
VPBuilder ScalarPHBuilder (ScalarPHVPBB);
8910
8907
VPBuilder MiddleBuilder (MiddleVPBB, MiddleVPBB->getFirstNonPhi ());
8911
8908
VPValue *TwoVPV = Plan.getOrAddLiveIn (
@@ -9085,8 +9082,7 @@ LoopVectorizationPlanner::tryToBuildVPlanWithVPRecipes(VFRange &Range) {
9085
9082
bool NeedsBlends = BB != HeaderBB && !BB->phis ().empty ();
9086
9083
return Legal->blockNeedsPredication (BB) || NeedsBlends;
9087
9084
});
9088
- auto *MiddleVPBB =
9089
- cast<VPBasicBlock>(Plan->getVectorLoopRegion ()->getSingleSuccessor ());
9085
+ auto *MiddleVPBB = Plan->getMiddleBlock ();
9090
9086
VPBasicBlock::iterator MBIP = MiddleVPBB->getFirstNonPhi ();
9091
9087
for (BasicBlock *BB : make_range (DFS.beginRPO (), DFS.endRPO ())) {
9092
9088
// Relevant instructions from basic block BB will be grouped into VPRecipe
@@ -9303,8 +9299,7 @@ void LoopVectorizationPlanner::adjustRecipesForReductions(
9303
9299
using namespace VPlanPatternMatch ;
9304
9300
VPRegionBlock *VectorLoopRegion = Plan->getVectorLoopRegion ();
9305
9301
VPBasicBlock *Header = VectorLoopRegion->getEntryBasicBlock ();
9306
- VPBasicBlock *MiddleVPBB =
9307
- cast<VPBasicBlock>(VectorLoopRegion->getSingleSuccessor ());
9302
+ VPBasicBlock *MiddleVPBB = Plan->getMiddleBlock ();
9308
9303
for (VPRecipeBase &R : Header->phis ()) {
9309
9304
auto *PhiR = dyn_cast<VPReductionPHIRecipe>(&R);
9310
9305
if (!PhiR || !PhiR->isInLoop () || (MinVF.isScalar () && !PhiR->isOrdered ()))
0 commit comments