[llvm] [VPlan] Type VP(Recipe|Block)Ty SubclassID (NFC) (PR #209132)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 13 03:33:20 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-vectorizers
Author: Ramkumar Ramachandra (artagnon)
<details>
<summary>Changes</summary>
With the advantage that switching over the SubclassID would give better compile-time diagnostics.
---
Full diff: https://github.com/llvm/llvm-project/pull/209132.diff
1 Files Affected:
- (modified) llvm/lib/Transforms/Vectorize/VPlan.h (+29-30)
``````````diff
diff --git a/llvm/lib/Transforms/Vectorize/VPlan.h b/llvm/lib/Transforms/Vectorize/VPlan.h
index 46e2ad4716323..e5ca9ab3aa81f 100644
--- a/llvm/lib/Transforms/Vectorize/VPlan.h
+++ b/llvm/lib/Transforms/Vectorize/VPlan.h
@@ -94,8 +94,6 @@ enum class UncountableExitStyle {
class LLVM_ABI_FOR_TEST VPBlockBase {
friend class VPBlockUtils;
- const unsigned char SubclassID; ///< Subclass identifier (for isa/dyn_cast).
-
/// An optional name for the block.
std::string Name;
@@ -159,10 +157,6 @@ class LLVM_ABI_FOR_TEST VPBlockBase {
*I = New;
}
-protected:
- VPBlockBase(const unsigned char SC, const std::string &N)
- : SubclassID(SC), Name(N) {}
-
public:
/// An enumeration for keeping track of the concrete subclass of VPBlockBase
/// that are actually instantiated. Values of this enumeration are kept in the
@@ -383,6 +377,13 @@ class LLVM_ABI_FOR_TEST VPBlockBase {
/// the cloned recipes, including all blocks in the single-entry single-exit
/// region for VPRegionBlocks.
virtual VPBlockBase *clone() = 0;
+
+private:
+ const VPBlockTy SubclassID; ///< Subclass identifier (for isa/dyn_cast).
+
+protected:
+ VPBlockBase(const VPBlockTy SC, const std::string &N)
+ : Name(N), SubclassID(SC) {}
};
/// VPRecipeBase is a base class modeling a sequence of one or more output IR
@@ -397,9 +398,6 @@ class LLVM_ABI_FOR_TEST VPRecipeBase
friend VPBasicBlock;
friend class VPBlockUtils;
- /// Subclass identifier (for isa/dyn_cast).
- const unsigned char SubclassID;
-
/// Each VPRecipe belongs to a single VPBasicBlock.
VPBasicBlock *Parent = nullptr;
@@ -458,9 +456,9 @@ class LLVM_ABI_FOR_TEST VPRecipeBase
VPLastPHISC = VPReductionPHISC,
};
- VPRecipeBase(const unsigned char SC, ArrayRef<VPValue *> Operands,
+ VPRecipeBase(const VPRecipeTy SC, ArrayRef<VPValue *> Operands,
DebugLoc DL = DebugLoc::getUnknown())
- : VPDef(), VPUser(Operands), SubclassID(SC), DL(DL) {}
+ : VPDef(), VPUser(Operands), DL(DL), SubclassID(SC) {}
~VPRecipeBase() override = default;
@@ -514,7 +512,7 @@ class LLVM_ABI_FOR_TEST VPRecipeBase
iplist<VPRecipeBase>::iterator eraseFromParent();
/// \return an ID for the concrete type of this object.
- unsigned getVPRecipeID() const { return SubclassID; }
+ VPRecipeTy getVPRecipeID() const { return SubclassID; }
/// Method to support type inquiry through isa, cast, and dyn_cast.
static inline bool classof(const VPDef *D) {
@@ -560,6 +558,10 @@ class LLVM_ABI_FOR_TEST VPRecipeBase
VPSlotTracker &SlotTracker) const;
#endif
+private:
+ /// Subclass identifier (for isa/dyn_cast).
+ const VPRecipeTy SubclassID;
+
protected:
/// Compute the cost of this recipe either using a recipe's specialized
/// implementation or using the legacy cost model and the underlying
@@ -602,15 +604,15 @@ LLVM_ABI Type *computeScalarTypeForInstruction(unsigned Opcode,
class LLVM_ABI_FOR_TEST VPSingleDefRecipe : public VPRecipeBase,
public VPSingleDefValue {
public:
- VPSingleDefRecipe(const unsigned char SC, ArrayRef<VPValue *> Operands,
+ VPSingleDefRecipe(const VPRecipeTy SC, ArrayRef<VPValue *> Operands,
DebugLoc DL = DebugLoc::getUnknown())
: VPRecipeBase(SC, Operands, DL), VPSingleDefValue(this) {}
- VPSingleDefRecipe(const unsigned char SC, ArrayRef<VPValue *> Operands,
+ VPSingleDefRecipe(const VPRecipeTy SC, ArrayRef<VPValue *> Operands,
Value *UV, DebugLoc DL = DebugLoc::getUnknown())
: VPRecipeBase(SC, Operands, DL), VPSingleDefValue(this, UV) {}
- VPSingleDefRecipe(const unsigned char SC, ArrayRef<VPValue *> Operands,
+ VPSingleDefRecipe(const VPRecipeTy SC, ArrayRef<VPValue *> Operands,
Type *ResultTy, Value *UV = nullptr,
DebugLoc DL = DebugLoc::getUnknown())
: VPRecipeBase(SC, Operands, DL), VPSingleDefValue(this, UV, ResultTy) {}
@@ -1106,12 +1108,12 @@ static_assert(sizeof(VPIRFlags) <= 3, "VPIRFlags should not grow");
/// A pure-virtual common base class for recipes defining a single VPValue and
/// using IR flags.
struct VPRecipeWithIRFlags : public VPSingleDefRecipe, public VPIRFlags {
- VPRecipeWithIRFlags(const unsigned char SC, ArrayRef<VPValue *> Operands,
+ VPRecipeWithIRFlags(const VPRecipeTy SC, ArrayRef<VPValue *> Operands,
const VPIRFlags &Flags,
DebugLoc DL = DebugLoc::getUnknown())
: VPSingleDefRecipe(SC, Operands, DL), VPIRFlags(Flags) {}
- VPRecipeWithIRFlags(const unsigned char SC, ArrayRef<VPValue *> Operands,
+ VPRecipeWithIRFlags(const VPRecipeTy SC, ArrayRef<VPValue *> Operands,
Type *ResultTy, const VPIRFlags &Flags,
DebugLoc DL = DebugLoc::getUnknown())
: VPSingleDefRecipe(SC, Operands, ResultTy, /*UV=*/nullptr, DL),
@@ -1927,8 +1929,7 @@ class VPWidenIntrinsicRecipe : public VPRecipeWithIRFlags, public VPIRMetadata {
bool MayHaveSideEffects;
protected:
- VPWidenIntrinsicRecipe(const unsigned char SC,
- Intrinsic::ID VectorIntrinsicID,
+ VPWidenIntrinsicRecipe(const VPRecipeTy SC, Intrinsic::ID VectorIntrinsicID,
ArrayRef<VPValue *> CallArguments, Type *Ty,
const VPIRFlags &Flags = {},
const VPIRMetadata &MD = {},
@@ -2426,12 +2427,12 @@ class VPVectorPointerRecipe : public VPRecipeWithIRFlags {
class LLVM_ABI_FOR_TEST VPHeaderPHIRecipe : public VPSingleDefRecipe,
public VPPhiAccessors {
protected:
- VPHeaderPHIRecipe(unsigned char VPRecipeID, Instruction *UnderlyingInstr,
+ VPHeaderPHIRecipe(const VPRecipeTy VPRecipeID, Instruction *UnderlyingInstr,
VPValue *Start, DebugLoc DL = DebugLoc::getUnknown())
: VPHeaderPHIRecipe(VPRecipeID, UnderlyingInstr, Start,
Start->getScalarType(), DL) {}
- VPHeaderPHIRecipe(unsigned char VPRecipeID, Instruction *UnderlyingInstr,
+ VPHeaderPHIRecipe(const VPRecipeTy VPRecipeID, Instruction *UnderlyingInstr,
VPValue *Start, Type *ResultTy, DebugLoc DL)
: VPSingleDefRecipe(VPRecipeID, Start, ResultTy, UnderlyingInstr, DL) {}
@@ -2502,13 +2503,13 @@ class VPWidenInductionRecipe : public VPHeaderPHIRecipe {
InductionDescriptor IndDesc;
public:
- VPWidenInductionRecipe(unsigned char Kind, PHINode *IV, VPValue *Start,
+ VPWidenInductionRecipe(const VPRecipeTy Kind, PHINode *IV, VPValue *Start,
VPValue *Step, const InductionDescriptor &IndDesc,
DebugLoc DL)
: VPWidenInductionRecipe(Kind, IV, Start, Step, IndDesc,
Start->getScalarType(), DL) {}
- VPWidenInductionRecipe(unsigned char Kind, PHINode *IV, VPValue *Start,
+ VPWidenInductionRecipe(const VPRecipeTy Kind, PHINode *IV, VPValue *Start,
VPValue *Step, const InductionDescriptor &IndDesc,
Type *ResultTy, DebugLoc DL)
: VPHeaderPHIRecipe(Kind, IV, Start, ResultTy, DL), IndDesc(IndDesc) {
@@ -3028,8 +3029,7 @@ class LLVM_ABI_FOR_TEST VPInterleaveBase : public VPRecipeBase,
bool NeedsMaskForGaps = false;
protected:
- VPInterleaveBase(const unsigned char SC,
- const InterleaveGroup<Instruction> *IG,
+ VPInterleaveBase(const VPRecipeTy SC, const InterleaveGroup<Instruction> *IG,
ArrayRef<VPValue *> Operands,
ArrayRef<VPValue *> StoredValues, VPValue *Mask,
bool NeedsMaskForGaps, const VPIRMetadata &MD, DebugLoc DL)
@@ -3214,10 +3214,9 @@ class LLVM_ABI_FOR_TEST VPReductionRecipe : public VPRecipeWithIRFlags {
ReductionStyle Style;
protected:
- VPReductionRecipe(const unsigned char SC, RecurKind RdxKind,
- FastMathFlags FMFs, Instruction *I,
- ArrayRef<VPValue *> Operands, VPValue *CondOp,
- ReductionStyle Style, DebugLoc DL)
+ VPReductionRecipe(const VPRecipeTy SC, RecurKind RdxKind, FastMathFlags FMFs,
+ Instruction *I, ArrayRef<VPValue *> Operands,
+ VPValue *CondOp, ReductionStyle Style, DebugLoc DL)
: VPRecipeWithIRFlags(SC, Operands, Operands[0]->getScalarType(), FMFs,
DL),
RdxKind(RdxKind), Style(Style) {
@@ -4371,7 +4370,7 @@ class LLVM_ABI_FOR_TEST VPBasicBlock : public VPBlockBase {
/// The VPRecipes held in the order of output instructions to generate.
RecipeListTy Recipes;
- VPBasicBlock(const unsigned char BlockSC, const Twine &Name = "")
+ VPBasicBlock(const VPBlockTy BlockSC, const Twine &Name = "")
: VPBlockBase(BlockSC, Name.str()) {}
public:
``````````
</details>
https://github.com/llvm/llvm-project/pull/209132
More information about the llvm-commits
mailing list