@@ -7405,6 +7405,7 @@ static void createAndCollectMergePhiForReduction(
74057405 auto *PhiR = cast<VPReductionPHIRecipe>(RedResult->getOperand (0 ));
74067406 const RecurrenceDescriptor &RdxDesc = PhiR->getRecurrenceDescriptor ();
74077407
7408+ TrackingVH<Value> ReductionStartValue = RdxDesc.getRecurrenceStartValue ();
74087409 Value *FinalValue =
74097410 State.get (RedResult, VPIteration (State.UF - 1 , VPLane::getFirstLane ()));
74107411 auto *ResumePhi =
@@ -7429,7 +7430,7 @@ static void createAndCollectMergePhiForReduction(
74297430 BCBlockPhi->addIncoming (ResumePhi->getIncomingValueForBlock (Incoming),
74307431 Incoming);
74317432 else
7432- BCBlockPhi->addIncoming (RdxDesc. getRecurrenceStartValue () , Incoming);
7433+ BCBlockPhi->addIncoming (ReductionStartValue , Incoming);
74337434 }
74347435
74357436 auto *OrigPhi = cast<PHINode>(PhiR->getUnderlyingValue ());
@@ -8853,10 +8854,6 @@ VPlanPtr LoopVectorizationPlanner::buildVPlan(VFRange &Range) {
88538854// A ComputeReductionResult recipe is added to the middle block, also for
88548855// in-loop reductions which compute their result in-loop, because generating
88558856// the subsequent bc.merge.rdx phi is driven by ComputeReductionResult recipes.
8856- //
8857- // Adjust AnyOf reductions; replace the reduction phi for the selected value
8858- // with a boolean reduction phi node to check if the condition is true in any
8859- // iteration. The final value is selected by the final ComputeReductionResult.
88608857void LoopVectorizationPlanner::adjustRecipesForReductions (
88618858 VPBasicBlock *LatchVPBB, VPlanPtr &Plan, VPRecipeBuilder &RecipeBuilder,
88628859 ElementCount MinVF) {
@@ -9030,41 +9027,6 @@ void LoopVectorizationPlanner::adjustRecipesForReductions(
90309027 continue ;
90319028
90329029 const RecurrenceDescriptor &RdxDesc = PhiR->getRecurrenceDescriptor ();
9033- // Adjust AnyOf reductions; replace the reduction phi for the selected value
9034- // with a boolean reduction phi node to check if the condition is true in
9035- // any iteration. The final value is selected by the final
9036- // ComputeReductionResult.
9037- if (RecurrenceDescriptor::isAnyOfRecurrenceKind (
9038- RdxDesc.getRecurrenceKind ())) {
9039- auto *Select = cast<VPRecipeBase>(*find_if (PhiR->users (), [](VPUser *U) {
9040- return isa<VPWidenSelectRecipe>(U) ||
9041- (isa<VPReplicateRecipe>(U) &&
9042- cast<VPReplicateRecipe>(U)->getUnderlyingInstr ()->getOpcode () ==
9043- Instruction::Select);
9044- }));
9045- VPValue *Cmp = Select->getOperand (0 );
9046- // If the compare is checking the reduction PHI node, adjust it to check
9047- // the start value.
9048- if (VPRecipeBase *CmpR = Cmp->getDefiningRecipe ()) {
9049- for (unsigned I = 0 ; I != CmpR->getNumOperands (); ++I)
9050- if (CmpR->getOperand (I) == PhiR)
9051- CmpR->setOperand (I, PhiR->getStartValue ());
9052- }
9053- VPBuilder::InsertPointGuard Guard (Builder);
9054- Builder.setInsertPoint (Select);
9055-
9056- // If the true value of the select is the reduction phi, the new value is
9057- // selected if the negated condition is true in any iteration.
9058- if (Select->getOperand (1 ) == PhiR)
9059- Cmp = Builder.createNot (Cmp);
9060- VPValue *Or = Builder.createOr (PhiR, Cmp);
9061- Select->getVPSingleValue ()->replaceAllUsesWith (Or);
9062-
9063- // Convert the reduction phi to operate on bools.
9064- PhiR->setOperand (0 , Plan->getVPValueOrAddLiveIn (ConstantInt::getFalse (
9065- OrigLoop->getHeader ()->getContext ())));
9066- }
9067-
90689030 // If tail is folded by masking, introduce selects between the phi
90699031 // and the live-out instruction of each reduction, at the beginning of the
90709032 // dedicated latch block.
@@ -9097,9 +9059,7 @@ void LoopVectorizationPlanner::adjustRecipesForReductions(
90979059 // then extend the loop exit value to enable InstCombine to evaluate the
90989060 // entire expression in the smaller type.
90999061 Type *PhiTy = PhiR->getStartValue ()->getLiveInIRValue ()->getType ();
9100- if (MinVF.isVector () && PhiTy != RdxDesc.getRecurrenceType () &&
9101- !RecurrenceDescriptor::isAnyOfRecurrenceKind (
9102- RdxDesc.getRecurrenceKind ())) {
9062+ if (MinVF.isVector () && PhiTy != RdxDesc.getRecurrenceType ()) {
91039063 assert (!PhiR->isInLoop () && " Unexpected truncated inloop reduction!" );
91049064 Type *RdxTy = RdxDesc.getRecurrenceType ();
91059065 auto *Trunc =
0 commit comments