-
Notifications
You must be signed in to change notification settings - Fork 15.4k
[VPlan] Combine LiveIns fields into MapVector (NFC) #170220
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Combine Value2VPValue and VPLiveIns into a single MapVector LiveIns field, simplifying users.
|
@llvm/pr-subscribers-vectorizers Author: Ramkumar Ramachandra (artagnon) ChangesCombine Value2VPValue and VPLiveIns into a single MapVector LiveIns field, simplifying users. Full diff: https://github.com/llvm/llvm-project/pull/170220.diff 2 Files Affected:
diff --git a/llvm/lib/Transforms/Vectorize/VPlan.h b/llvm/lib/Transforms/Vectorize/VPlan.h
index 6ca750fc53279..f793cf5209329 100644
--- a/llvm/lib/Transforms/Vectorize/VPlan.h
+++ b/llvm/lib/Transforms/Vectorize/VPlan.h
@@ -25,7 +25,7 @@
#define LLVM_TRANSFORMS_VECTORIZE_VPLAN_H
#include "VPlanValue.h"
-#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Twine.h"
@@ -4332,13 +4332,9 @@ class VPlan {
/// Represents the loop-invariant VF * UF of the vector loop region.
VPValue VFxUF;
- /// Holds a mapping between Values and their corresponding VPValue inside
- /// VPlan.
- Value2VPValueTy Value2VPValue;
-
- /// Contains all the external definitions created for this VPlan. External
- /// definitions are VPValues that hold a pointer to their underlying IR.
- SmallVector<VPValue *, 16> VPLiveIns;
+ /// Contains all the external definitions created for this VPlan, as a mapping
+ /// from IR Values to VPValues.
+ SmallMapVector<Value *, VPValue *, 16> LiveIns;
/// Blocks allocated and owned by the VPlan. They will be deleted once the
/// VPlan is destroyed.
@@ -4535,10 +4531,9 @@ class VPlan {
/// yet) for \p V.
VPValue *getOrAddLiveIn(Value *V) {
assert(V && "Trying to get or add the VPValue of a null Value");
- auto [It, Inserted] = Value2VPValue.try_emplace(V);
+ auto [It, Inserted] = LiveIns.try_emplace(V);
if (Inserted) {
VPValue *VPV = new VPValue(V);
- VPLiveIns.push_back(VPV);
assert(VPV->isLiveIn() && "VPV must be a live-in.");
It->second = VPV;
}
@@ -4570,17 +4565,10 @@ class VPlan {
}
/// Return the live-in VPValue for \p V, if there is one or nullptr otherwise.
- VPValue *getLiveIn(Value *V) const { return Value2VPValue.lookup(V); }
+ VPValue *getLiveIn(Value *V) const { return LiveIns.lookup(V); }
/// Return the list of live-in VPValues available in the VPlan.
- ArrayRef<VPValue *> getLiveIns() const {
- assert(all_of(Value2VPValue,
- [this](const auto &P) {
- return is_contained(VPLiveIns, P.second);
- }) &&
- "all VPValues in Value2VPValue must also be in VPLiveIns");
- return VPLiveIns;
- }
+ auto getLiveIns() const { return LiveIns.values(); }
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
/// Print the live-ins of this VPlan to \p O.
diff --git a/llvm/lib/Transforms/Vectorize/VPlanValue.h b/llvm/lib/Transforms/Vectorize/VPlanValue.h
index b9f5847ec731c..8849ccc6184fc 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanValue.h
+++ b/llvm/lib/Transforms/Vectorize/VPlanValue.h
@@ -20,10 +20,8 @@
#ifndef LLVM_TRANSFORMS_VECTORIZE_VPLAN_VALUE_H
#define LLVM_TRANSFORMS_VECTORIZE_VPLAN_VALUE_H
-#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/TinyPtrVector.h"
#include "llvm/ADT/iterator_range.h"
#include "llvm/Support/Compiler.h"
@@ -196,9 +194,6 @@ class LLVM_ABI_FOR_TEST VPValue {
}
};
-typedef DenseMap<Value *, VPValue *> Value2VPValueTy;
-typedef DenseMap<VPValue *, Value *> VPValue2ValueTy;
-
LLVM_ABI_FOR_TEST raw_ostream &operator<<(raw_ostream &OS,
const VPRecipeBase &R);
|
|
@llvm/pr-subscribers-llvm-transforms Author: Ramkumar Ramachandra (artagnon) ChangesCombine Value2VPValue and VPLiveIns into a single MapVector LiveIns field, simplifying users. Full diff: https://github.com/llvm/llvm-project/pull/170220.diff 2 Files Affected:
diff --git a/llvm/lib/Transforms/Vectorize/VPlan.h b/llvm/lib/Transforms/Vectorize/VPlan.h
index 6ca750fc53279..f793cf5209329 100644
--- a/llvm/lib/Transforms/Vectorize/VPlan.h
+++ b/llvm/lib/Transforms/Vectorize/VPlan.h
@@ -25,7 +25,7 @@
#define LLVM_TRANSFORMS_VECTORIZE_VPLAN_H
#include "VPlanValue.h"
-#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Twine.h"
@@ -4332,13 +4332,9 @@ class VPlan {
/// Represents the loop-invariant VF * UF of the vector loop region.
VPValue VFxUF;
- /// Holds a mapping between Values and their corresponding VPValue inside
- /// VPlan.
- Value2VPValueTy Value2VPValue;
-
- /// Contains all the external definitions created for this VPlan. External
- /// definitions are VPValues that hold a pointer to their underlying IR.
- SmallVector<VPValue *, 16> VPLiveIns;
+ /// Contains all the external definitions created for this VPlan, as a mapping
+ /// from IR Values to VPValues.
+ SmallMapVector<Value *, VPValue *, 16> LiveIns;
/// Blocks allocated and owned by the VPlan. They will be deleted once the
/// VPlan is destroyed.
@@ -4535,10 +4531,9 @@ class VPlan {
/// yet) for \p V.
VPValue *getOrAddLiveIn(Value *V) {
assert(V && "Trying to get or add the VPValue of a null Value");
- auto [It, Inserted] = Value2VPValue.try_emplace(V);
+ auto [It, Inserted] = LiveIns.try_emplace(V);
if (Inserted) {
VPValue *VPV = new VPValue(V);
- VPLiveIns.push_back(VPV);
assert(VPV->isLiveIn() && "VPV must be a live-in.");
It->second = VPV;
}
@@ -4570,17 +4565,10 @@ class VPlan {
}
/// Return the live-in VPValue for \p V, if there is one or nullptr otherwise.
- VPValue *getLiveIn(Value *V) const { return Value2VPValue.lookup(V); }
+ VPValue *getLiveIn(Value *V) const { return LiveIns.lookup(V); }
/// Return the list of live-in VPValues available in the VPlan.
- ArrayRef<VPValue *> getLiveIns() const {
- assert(all_of(Value2VPValue,
- [this](const auto &P) {
- return is_contained(VPLiveIns, P.second);
- }) &&
- "all VPValues in Value2VPValue must also be in VPLiveIns");
- return VPLiveIns;
- }
+ auto getLiveIns() const { return LiveIns.values(); }
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
/// Print the live-ins of this VPlan to \p O.
diff --git a/llvm/lib/Transforms/Vectorize/VPlanValue.h b/llvm/lib/Transforms/Vectorize/VPlanValue.h
index b9f5847ec731c..8849ccc6184fc 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanValue.h
+++ b/llvm/lib/Transforms/Vectorize/VPlanValue.h
@@ -20,10 +20,8 @@
#ifndef LLVM_TRANSFORMS_VECTORIZE_VPLAN_VALUE_H
#define LLVM_TRANSFORMS_VECTORIZE_VPLAN_VALUE_H
-#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/TinyPtrVector.h"
#include "llvm/ADT/iterator_range.h"
#include "llvm/Support/Compiler.h"
@@ -196,9 +194,6 @@ class LLVM_ABI_FOR_TEST VPValue {
}
};
-typedef DenseMap<Value *, VPValue *> Value2VPValueTy;
-typedef DenseMap<VPValue *, Value *> VPValue2ValueTy;
-
LLVM_ABI_FOR_TEST raw_ostream &operator<<(raw_ostream &OS,
const VPRecipeBase &R);
|
Combine Value2VPValue and VPLiveIns into a single MapVector LiveIns field, simplifying users.