[llvm] [VPlan] Factor collectGroupedReplicateMemOps (NFC) (PR #179506)
Ramkumar Ramachandra via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 3 06:11:31 PST 2026
================
@@ -4595,51 +4668,32 @@ void VPlanTransforms::materializeBroadcasts(VPlan &Plan) {
}
}
-void VPlanTransforms::hoistInvariantLoads(VPlan &Plan) {
- VPRegionBlock *LoopRegion = Plan.getVectorLoopRegion();
-
- // Collect candidate loads with invariant addresses and noalias scopes
- // metadata and memory-writing recipes with noalias metadata.
- SmallVector<std::pair<VPRecipeBase *, MemoryLocation>> CandidateLoads;
- SmallVector<MemoryLocation> Stores;
- for (VPBasicBlock *VPBB : VPBlockUtils::blocksOnly<VPBasicBlock>(
- vp_depth_first_shallow(LoopRegion->getEntry()))) {
- for (VPRecipeBase &R : *VPBB) {
- // Only handle single-scalar replicated loads with invariant addresses.
- if (auto *RepR = dyn_cast<VPReplicateRecipe>(&R)) {
- if (RepR->isPredicated() || !RepR->isSingleScalar() ||
- RepR->getOpcode() != Instruction::Load)
- continue;
+void VPlanTransforms::hoistInvariantLoads(VPlan &Plan,
+ PredicatedScalarEvolution &PSE,
+ const Loop *L) {
+ VPBasicBlock *Preheader = Plan.getVectorPreheader();
+ auto IsInvariantLoad = [](VPReplicateRecipe *RepR) {
+ if (RepR->isPredicated() || !RepR->isSingleScalar() ||
+ RepR->getOpcode() != Instruction::Load)
+ return false;
+ VPValue *Addr = RepR->getOperand(0);
+ return Addr->isDefinedOutsideLoopRegions();
+ };
+ auto Groups = collectGroupedReplicateMemOps<Instruction::Load>(
+ Plan, PSE, L, IsInvariantLoad);
+ for (auto Group : Groups) {
+ VPReplicateRecipe *EarliestLoad = Group[0];
----------------
artagnon wrote:
Oops, fixed thinko now, thanks! Patch should really be an NFC now.
https://github.com/llvm/llvm-project/pull/179506
More information about the llvm-commits
mailing list