@@ -7405,6 +7405,7 @@ static void createAndCollectMergePhiForReduction(
7405
7405
auto *PhiR = cast<VPReductionPHIRecipe>(RedResult->getOperand(0));
7406
7406
const RecurrenceDescriptor &RdxDesc = PhiR->getRecurrenceDescriptor();
7407
7407
7408
+ TrackingVH<Value> ReductionStartValue = RdxDesc.getRecurrenceStartValue();
7408
7409
Value *FinalValue =
7409
7410
State.get(RedResult, VPIteration(State.UF - 1, VPLane::getFirstLane()));
7410
7411
auto *ResumePhi =
@@ -7429,7 +7430,7 @@ static void createAndCollectMergePhiForReduction(
7429
7430
BCBlockPhi->addIncoming(ResumePhi->getIncomingValueForBlock(Incoming),
7430
7431
Incoming);
7431
7432
else
7432
- BCBlockPhi->addIncoming (RdxDesc. getRecurrenceStartValue () , Incoming);
7433
+ BCBlockPhi->addIncoming(ReductionStartValue , Incoming);
7433
7434
}
7434
7435
7435
7436
auto *OrigPhi = cast<PHINode>(PhiR->getUnderlyingValue());
@@ -8853,10 +8854,6 @@ VPlanPtr LoopVectorizationPlanner::buildVPlan(VFRange &Range) {
8853
8854
// A ComputeReductionResult recipe is added to the middle block, also for
8854
8855
// in-loop reductions which compute their result in-loop, because generating
8855
8856
// 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.
8860
8857
void LoopVectorizationPlanner::adjustRecipesForReductions(
8861
8858
VPBasicBlock *LatchVPBB, VPlanPtr &Plan, VPRecipeBuilder &RecipeBuilder,
8862
8859
ElementCount MinVF) {
@@ -9030,41 +9027,6 @@ void LoopVectorizationPlanner::adjustRecipesForReductions(
9030
9027
continue;
9031
9028
9032
9029
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
-
9068
9030
// If tail is folded by masking, introduce selects between the phi
9069
9031
// and the live-out instruction of each reduction, at the beginning of the
9070
9032
// dedicated latch block.
@@ -9097,9 +9059,7 @@ void LoopVectorizationPlanner::adjustRecipesForReductions(
9097
9059
// then extend the loop exit value to enable InstCombine to evaluate the
9098
9060
// entire expression in the smaller type.
9099
9061
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()) {
9103
9063
assert(!PhiR->isInLoop() && "Unexpected truncated inloop reduction!");
9104
9064
Type *RdxTy = RdxDesc.getRecurrenceType();
9105
9065
auto *Trunc =
0 commit comments