[llvm] [VPlan] Move predication to VPlanTransform (NFC). (PR #128420)
via llvm-commits
llvm-commits at lists.llvm.org
Tue May 20 07:01:45 PDT 2025
================
@@ -9542,26 +9314,24 @@ LoopVectorizationPlanner::tryToBuildVPlanWithVPRecipes(VFRange &Range,
} else {
Builder.insert(Recipe);
}
- if (Recipe->getNumDefinedValues() == 1)
+ if (Recipe->getNumDefinedValues() == 1) {
SingleDef->replaceAllUsesWith(Recipe->getVPSingleValue());
- else
+ Old2New[SingleDef] = Recipe->getVPSingleValue();
+ } else {
assert(Recipe->getNumDefinedValues() == 0 &&
"Unexpected multidef recipe");
- R.eraseFromParent();
+ R.eraseFromParent();
+ }
}
}
- VPBlockBase *PrevVPBB = nullptr;
- for (VPBasicBlock *VPBB : VPBlockUtils::blocksOnly<VPBasicBlock>(RPOT)) {
- // Flatten the CFG in the loop. Masks for blocks have already been generated
- // and added to recipes as needed. To do so, first disconnect VPBB from its
- // successors. Then connect VPBB to the previously visited VPBB.
- for (auto *Succ : to_vector(VPBB->getSuccessors()))
- VPBlockUtils::disconnectBlocks(VPBB, Succ);
- if (PrevVPBB)
- VPBlockUtils::connectBlocks(PrevVPBB, VPBB);
- PrevVPBB = VPBB;
- }
+ // replaceAllUsesWith above may invalidate the block masks. Update them here.
+ // TODO: Include the masks as operands in the predicated VPlan directly
+ // to remove the need to keep a map of masks beyond the predication
+ // transform.
+ RecipeBuilder.updateBlockMaskCache(Old2New);
+ for (const auto &[Old, New] : Old2New)
----------------
ayalz wrote:
```suggestion
for (const auto &[Old, _] : Old2New)
```
?
https://github.com/llvm/llvm-project/pull/128420
More information about the llvm-commits
mailing list