@@ -577,7 +577,7 @@ class VPSingleDefRecipe : public VPRecipeBase, public VPValue {
577577#endif
578578};
579579
580- // / Class to record LLVM IR flags.
580+ // / Class to record and manage LLVM IR flags.
581581class VPIRFlags {
582582 enum class OperationType : unsigned char {
583583 Cmp,
@@ -812,8 +812,9 @@ class VPIRFlags {
812812#endif
813813};
814814
815- class VPRecipeWithIRFlags : public VPSingleDefRecipe , public VPIRFlags {
816- public:
815+ // / A pure-virtual common base class for recipes defining a single VPValue and
816+ // / using IR flags.
817+ struct VPRecipeWithIRFlags : public VPSingleDefRecipe , public VPIRFlags {
817818 VPRecipeWithIRFlags (const unsigned char SC, ArrayRef<VPValue *> Operands,
818819 DebugLoc DL = {})
819820 : VPSingleDefRecipe(SC, Operands, DL), VPIRFlags() {}
@@ -826,7 +827,6 @@ class VPRecipeWithIRFlags : public VPSingleDefRecipe, public VPIRFlags {
826827 const VPIRFlags &Flags, DebugLoc DL = {})
827828 : VPSingleDefRecipe(SC, Operands, DL), VPIRFlags(Flags) {}
828829
829- public:
830830 static inline bool classof (const VPRecipeBase *R) {
831831 return R->getVPDefID () == VPRecipeBase::VPInstructionSC ||
832832 R->getVPDefID () == VPRecipeBase::VPWidenSC ||
@@ -852,6 +852,8 @@ class VPRecipeWithIRFlags : public VPSingleDefRecipe, public VPIRFlags {
852852 auto *R = dyn_cast_or_null<VPRecipeBase>(V->getDefiningRecipe ());
853853 return R && classof (R);
854854 }
855+
856+ void execute (VPTransformState &State) override = 0;
855857};
856858
857859// / Helper to access the operand that contains the unroll part for this recipe
0 commit comments