[llvm] [VPlan] Simplify worklist in reassociateHeaderMask. NFC (PR #181595)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 15 18:58:45 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: Luke Lau (lukel97)
<details>
<summary>Changes</summary>
Addresses review comments from https://github.com/llvm/llvm-project/pull/180898#pullrequestreview-3791945590. We don't need to recursively collect direct users of the header mask, we can do that as a separate step so that the main worklist loop only handles potentially reassociatable candidates.
Also add back mention of tail folding to comment.
---
Full diff: https://github.com/llvm/llvm-project/pull/181595.diff
1 Files Affected:
- (modified) llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp (+16-14)
``````````diff
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index 58ab147226ee2..8ff9f8aabf454 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -1607,27 +1607,29 @@ void VPlanTransforms::simplifyRecipes(VPlan &Plan) {
}
/// Reassociate (headermask && x) && y -> headermask && (x && y) to allow the
-/// header mask to be simplified further, e.g. in optimizeEVLMasks.
+/// header mask to be simplified further when tail folding, e.g. in
+/// optimizeEVLMasks.
static void reassociateHeaderMask(VPlan &Plan) {
VPValue *HeaderMask = vputils::findHeaderMask(Plan);
if (!HeaderMask)
return;
- SmallVector<VPUser *> Worklist(HeaderMask->users());
+
+ SmallVector<VPUser *> Worklist;
+ for (VPUser *U : HeaderMask->users())
+ if (match(U, m_LogicalAnd(m_Specific(HeaderMask), m_VPValue())))
+ append_range(Worklist, cast<VPSingleDefRecipe>(U)->users());
+
+ VPValue *X, *Y;
while (!Worklist.empty()) {
auto *R = dyn_cast<VPSingleDefRecipe>(Worklist.pop_back_val());
- if (!R)
+ if (!R || !match(R, m_LogicalAnd(
+ m_LogicalAnd(m_Specific(HeaderMask), m_VPValue(X)),
+ m_VPValue(Y))))
continue;
- VPValue *X, *Y;
- if (match(R, m_LogicalAnd(m_Specific(HeaderMask), m_VPValue())))
- Worklist.append(R->user_begin(), R->user_end());
- else if (match(R, m_LogicalAnd(
- m_LogicalAnd(m_Specific(HeaderMask), m_VPValue(X)),
- m_VPValue(Y)))) {
- VPBuilder Builder(R);
- Worklist.append(R->user_begin(), R->user_end());
- R->replaceAllUsesWith(
- Builder.createLogicalAnd(HeaderMask, Builder.createLogicalAnd(X, Y)));
- }
+ append_range(Worklist, R->users());
+ VPBuilder Builder(R);
+ R->replaceAllUsesWith(
+ Builder.createLogicalAnd(HeaderMask, Builder.createLogicalAnd(X, Y)));
}
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/181595
More information about the llvm-commits
mailing list