[llvm] 41b7341 - [VPlan] Factor out helper to recursively collect all users (NFCI).
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 17 06:57:08 PDT 2024
Author: Florian Hahn
Date: 2024-04-17T14:56:47+01:00
New Revision: 41b7341d6b27adf81262a5a0bd4e430675b73bbb
URL: https://github.com/llvm/llvm-project/commit/41b7341d6b27adf81262a5a0bd4e430675b73bbb
DIFF: https://github.com/llvm/llvm-project/commit/41b7341d6b27adf81262a5a0bd4e430675b73bbb.diff
LOG: [VPlan] Factor out helper to recursively collect all users (NFCI).
Factor out logic to collect all users recursively to be re-used
in https://github.com/llvm/llvm-project/pull/87816.
Added:
Modified:
llvm/lib/Transforms/Vectorize/VPlan.h
llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/VPlan.h b/llvm/lib/Transforms/Vectorize/VPlan.h
index 148227f1f1a57b..334b10e2e5d097 100644
--- a/llvm/lib/Transforms/Vectorize/VPlan.h
+++ b/llvm/lib/Transforms/Vectorize/VPlan.h
@@ -1049,6 +1049,11 @@ class VPRecipeWithIRFlags : public VPSingleDefRecipe {
R->getVPDefID() == VPRecipeBase::VPVectorPointerSC;
}
+ static inline bool classof(const VPUser *U) {
+ auto *R = dyn_cast<VPRecipeBase>(U);
+ return R && classof(R);
+ }
+
/// Drop all poison-generating flags.
void dropPoisonGeneratingFlags() {
// NOTE: This needs to be kept in-sync with
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index 382bf5ac114053..78d0b5b95c5ec7 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -852,6 +852,18 @@ bool VPlanTransforms::adjustFixedOrderRecurrences(VPlan &Plan,
return true;
}
+static SmallVector<VPUser *> collectUsersRecursively(VPValue *V) {
+ SetVector<VPUser *> Users(V->user_begin(), V->user_end());
+ for (unsigned I = 0; I != Users.size(); ++I) {
+ VPRecipeBase *Cur = dyn_cast<VPRecipeBase>(Users[I]);
+ if (!Cur || isa<VPHeaderPHIRecipe>(Cur))
+ continue;
+ for (VPValue *V : Cur->definedValues())
+ Users.insert(V->user_begin(), V->user_end());
+ }
+ return Users.takeVector();
+}
+
void VPlanTransforms::clearReductionWrapFlags(VPlan &Plan) {
for (VPRecipeBase &R :
Plan.getVectorLoopRegion()->getEntryBasicBlock()->phis()) {
@@ -863,24 +875,10 @@ void VPlanTransforms::clearReductionWrapFlags(VPlan &Plan) {
if (RK != RecurKind::Add && RK != RecurKind::Mul)
continue;
- SmallSetVector<VPValue *, 8> Worklist;
- Worklist.insert(PhiR);
-
- for (unsigned I = 0; I != Worklist.size(); ++I) {
- VPValue *Cur = Worklist[I];
- if (auto *RecWithFlags =
- dyn_cast<VPRecipeWithIRFlags>(Cur->getDefiningRecipe())) {
+ for (VPUser *U : collectUsersRecursively(PhiR))
+ if (auto *RecWithFlags = dyn_cast<VPRecipeWithIRFlags>(U)) {
RecWithFlags->dropPoisonGeneratingFlags();
}
-
- for (VPUser *U : Cur->users()) {
- auto *UserRecipe = dyn_cast<VPRecipeBase>(U);
- if (!UserRecipe)
- continue;
- for (VPValue *V : UserRecipe->definedValues())
- Worklist.insert(V);
- }
- }
}
}
More information about the llvm-commits
mailing list