[llvm] edfe43c - [VPlan] Factor common VPDT-sort in sink-replicate (NFC) (#179214)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 15 23:25:00 PST 2026
Author: Ramkumar Ramachandra
Date: 2026-02-16T07:24:55Z
New Revision: edfe43cc9ebf207f3a1b3bbad932ba1159d5e211
URL: https://github.com/llvm/llvm-project/commit/edfe43cc9ebf207f3a1b3bbad932ba1159d5e211
DIFF: https://github.com/llvm/llvm-project/commit/edfe43cc9ebf207f3a1b3bbad932ba1159d5e211.diff
LOG: [VPlan] Factor common VPDT-sort in sink-replicate (NFC) (#179214)
Added:
Modified:
llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index 2f9f5df5a38d4..51208b6aad680 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -4662,6 +4662,7 @@ collectComplementaryPredicatedMemOps(VPlan &Plan,
"Only Load and Store opcodes supported");
constexpr bool IsLoad = (Opcode == Instruction::Load);
VPRegionBlock *LoopRegion = Plan.getVectorLoopRegion();
+ VPDominatorTree VPDT(Plan);
VPTypeAnalysis TypeInfo(Plan);
// Group predicated operations by their address SCEV.
@@ -4721,6 +4722,11 @@ collectComplementaryPredicatedMemOps(VPlan &Plan,
if (HasComplementaryMask) {
assert(Group.size() >= 2 && "must have at least 2 entries");
+ // Sort replicates by dominance order, with earliest (most dominating)
+ // first.
+ sort(Group, [&VPDT](VPReplicateRecipe *A, VPReplicateRecipe *B) {
+ return VPDT.properlyDominates(A, B);
+ });
AllGroups.push_back(std::move(Group));
}
}
@@ -4747,15 +4753,8 @@ void VPlanTransforms::hoistPredicatedLoads(VPlan &Plan,
if (Groups.empty())
return;
- VPDominatorTree VPDT(Plan);
-
// Process each group of loads.
for (auto &Group : Groups) {
- // Sort loads by dominance order, with earliest (most dominating) first.
- sort(Group, [&VPDT](VPReplicateRecipe *A, VPReplicateRecipe *B) {
- return VPDT.properlyDominates(A, B);
- });
-
// Try to use the earliest (most dominating) load to replace all others.
VPReplicateRecipe *EarliestLoad = Group[0];
VPBasicBlock *FirstBB = EarliestLoad->getParent();
@@ -4816,14 +4815,9 @@ void VPlanTransforms::sinkPredicatedStores(VPlan &Plan,
if (Groups.empty())
return;
- VPDominatorTree VPDT(Plan);
VPTypeAnalysis TypeInfo(Plan);
for (auto &Group : Groups) {
- sort(Group, [&VPDT](VPReplicateRecipe *A, VPReplicateRecipe *B) {
- return VPDT.properlyDominates(A, B);
- });
-
if (!canSinkStoreWithNoAliasCheck(Group, PSE, *L, TypeInfo))
continue;
More information about the llvm-commits
mailing list