[llvm] [VPlan] Introduce ComputeReductionResult VPInstruction opcode. (PR #70253)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 18 08:36:53 PST 2023
================
@@ -8992,7 +8852,25 @@ void LoopVectorizationPlanner::adjustRecipesForReductions(
SmallVector<VPReductionPHIRecipe *> InLoopReductionPhis;
for (VPRecipeBase &R : Header->phis()) {
auto *PhiR = dyn_cast<VPReductionPHIRecipe>(&R);
- if (!PhiR || !PhiR->isInLoop() || (MinVF.isScalar() && !PhiR->isOrdered()))
+ if (!PhiR)
+ continue;
+
+ // TODO: At the moment ComputeReductionResult also creates the bc.merge.rdx
+ // phi nodes, hence it needs to be created unconditionally here, until the
+ // reduction resume value handling is also modeled in VPlan.
+ auto *FinalReductionResult =
+ new VPInstruction(VPInstruction::ComputeReductionResult,
+ {PhiR, PhiR->getBackedgeValue()});
+ cast<VPBasicBlock>(VectorLoopRegion->getSingleSuccessor())
+ ->appendRecipe(FinalReductionResult);
+ for (VPUser *U : to_vector(PhiR->getBackedgeValue()->users())) {
----------------
ayalz wrote:
PhiR->getBackedgeValue()->replaceUsesWithIf()?
https://github.com/llvm/llvm-project/pull/70253
More information about the llvm-commits
mailing list