[llvm] [VPlan] Factor common VPDT-sort in sink-replicate (NFC) (PR #179214)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 2 04:07:21 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-vectorizers
Author: Ramkumar Ramachandra (artagnon)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/179214.diff
1 Files Affected:
- (modified) llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp (+6-12)
``````````diff
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index 43cffe5d30d6b..8b67a1bc72f3d 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -4463,6 +4463,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.
@@ -4522,6 +4523,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));
}
}
@@ -4548,15 +4554,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();
@@ -4617,14 +4616,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;
``````````
</details>
https://github.com/llvm/llvm-project/pull/179214
More information about the llvm-commits
mailing list