[llvm] [VPlan] Remove Def pointer from for VPSingleDefRecipes (NFC) (PR #195483)
via llvm-commits
llvm-commits at lists.llvm.org
Tue May 12 13:00:02 PDT 2026
================
@@ -305,28 +307,63 @@ struct VPSymbolicValue : public VPValue {
bool Materialized = false;
};
-/// A VPValue defined by a recipe that produces one or more values.
+/// Abstract base class for VPValues defined by a VPRecipeBase.
class VPRecipeValue : public VPValue {
friend class VPValue;
friend class VPDef;
- /// Pointer to the VPRecipeBase that defines this VPValue.
- VPRecipeBase *Def;
-
#if !defined(NDEBUG)
/// Returns true if this VPRecipeValue is defined by \p D.
/// NOTE: Only used by VPDef to assert that VPRecipeValues added/removed from
/// /p D are associated with its VPRecipeBase,
bool isDefinedBy(const VPDef *D) const;
#endif
+protected:
+ VPRecipeValue(unsigned char SC, Value *UV = nullptr) : VPValue(SC, UV) {}
+
+public:
+ LLVM_ABI_FOR_TEST virtual ~VPRecipeValue() = 0;
+
+ static bool classof(const VPValue *V) {
+ return V->getVPValueID() == VPVStandaloneRecipeValueSC ||
+ V->getVPValueID() == VPVSingleDefValueSC;
+ }
+};
+
+/// A VPRecipeValue embedded as a subobject of VPSingleDefRecipe.
+class VPSingleDefValue : public VPRecipeValue {
+ friend class VPDef;
+ friend class VPSingleDefRecipe;
+
+protected:
+ /// Construct a VPSingleDefValue. Must only be used by VPSingleDefRecipe.
+ LLVM_ABI_FOR_TEST VPSingleDefValue(VPSingleDefRecipe *Def,
+ Value *UV = nullptr);
+
+public:
+ static bool classof(const VPValue *V) {
+ return V->getVPValueID() == VPVSingleDefValueSC;
+ }
+};
+
+/// A VPRecipeValue that stores a pointer to its defining recipe.
+class VPStandaloneRecipeValue : public VPRecipeValue {
+ friend class VPDef;
+
+ /// Pointer to the VPRecipeBase that defines this VPValue.
----------------
ayalz wrote:
```suggestion
/// Pointer to the multi-def recipe that defines this VPValue, among others.
```
https://github.com/llvm/llvm-project/pull/195483
More information about the llvm-commits
mailing list