diff --git a/llvm/lib/Transforms/Vectorize/VPlan.h b/llvm/lib/Transforms/Vectorize/VPlan.h index 754c6b50ae028..13131a2b61722 100644 --- a/llvm/lib/Transforms/Vectorize/VPlan.h +++ b/llvm/lib/Transforms/Vectorize/VPlan.h @@ -483,12 +483,25 @@ class LLVM_ABI_FOR_TEST VPRecipeBase /// Set the recipe's debug location to \p NewDL. void setDebugLoc(DebugLoc NewDL) { DL = NewDL; } +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe, delegating to printRecipe(). + void print(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override final; +#endif + protected: /// Compute the cost of this recipe either using a recipe's specialized /// implementation or using the legacy cost model and the underlying /// instructions. virtual InstructionCost computeCost(ElementCount VF, VPCostContext &Ctx) const; + +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Each concrete VPRecipe prints itself, without printing common information, + /// like debug info or metadata. + virtual void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const = 0; +#endif }; // Helper macro to define common classof implementations for recipes. @@ -1133,10 +1146,6 @@ class LLVM_ABI_FOR_TEST VPInstruction : public VPRecipeWithIRFlags, VPCostContext &Ctx) const override; #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the VPInstruction to \p O. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; - /// Print the VPInstruction to dbgs() (for debugging). LLVM_DUMP_METHOD void dump() const; #endif @@ -1182,6 +1191,13 @@ class LLVM_ABI_FOR_TEST VPInstruction : public VPRecipeWithIRFlags, /// Returns the symbolic name assigned to the VPInstruction. StringRef getName() const { return Name; } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the VPInstruction to \p O. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A specialization of VPInstruction augmenting it with a dedicated result @@ -1247,10 +1263,11 @@ class VPInstructionWithType : public VPInstruction { Type *getResultType() const { return ResultTy; } +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif }; @@ -1339,13 +1356,13 @@ struct LLVM_ABI_FOR_TEST VPPhi : public VPInstruction, public VPPhiAccessors { void execute(VPTransformState &State) override; +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif -protected: const VPRecipeBase *getAsRecipe() const override { return this; } }; @@ -1385,12 +1402,6 @@ class VPIRInstruction : public VPRecipeBase { Instruction &getInstruction() const { return I; } -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - bool usesScalars(const VPValue *Op) const override { assert(is_contained(operands(), Op) && "Op must be an operand of the recipe"); @@ -1413,6 +1424,13 @@ class VPIRInstruction : public VPRecipeBase { /// Builder. Must only be used for VPIRInstructions with at least one operand /// wrapping a PHINode. void extractLastLaneOfFirstOperand(VPBuilder &Builder); + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// An overlay for VPIRInstructions wrapping PHI nodes enabling convenient use @@ -1432,13 +1450,13 @@ struct LLVM_ABI_FOR_TEST VPIRPhi : public VPIRInstruction, void execute(VPTransformState &State) override; +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif -protected: const VPRecipeBase *getAsRecipe() const override { return this; } }; @@ -1482,10 +1500,11 @@ class LLVM_ABI_FOR_TEST VPWidenRecipe : public VPRecipeWithIRFlags, unsigned getOpcode() const { return Opcode; } +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif }; @@ -1535,16 +1554,17 @@ class VPWidenCastRecipe : public VPRecipeWithIRFlags, public VPIRMetadata { InstructionCost computeCost(ElementCount VF, VPCostContext &Ctx) const override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - Instruction::CastOps getOpcode() const { return Opcode; } /// Returns the result type of the cast. Type *getResultType() const { return ResultTy; } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe for widening vector intrinsics. @@ -1626,13 +1646,14 @@ class VPWidenIntrinsicRecipe : public VPRecipeWithIRFlags, public VPIRMetadata { /// Returns true if the intrinsic may have side-effects. bool mayHaveSideEffects() const { return MayHaveSideEffects; } + bool usesFirstLaneOnly(const VPValue *Op) const override; + +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif - - bool usesFirstLaneOnly(const VPValue *Op) const override; }; /// A recipe for widening Call instructions using library calls. @@ -1678,10 +1699,11 @@ class LLVM_ABI_FOR_TEST VPWidenCallRecipe : public VPRecipeWithIRFlags, operand_range args() { return drop_end(operands()); } const_operand_range args() const { return drop_end(operands()); } +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif }; @@ -1722,10 +1744,11 @@ class VPHistogramRecipe : public VPRecipeBase { return getNumOperands() == 3 ? getOperand(2) : nullptr; } +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif }; @@ -1754,12 +1777,6 @@ struct LLVM_ABI_FOR_TEST VPWidenSelectRecipe : public VPRecipeWithIRFlags, InstructionCost computeCost(ElementCount VF, VPCostContext &Ctx) const override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - unsigned getOpcode() const { return Instruction::Select; } VPValue *getCond() const { @@ -1772,6 +1789,13 @@ struct LLVM_ABI_FOR_TEST VPWidenSelectRecipe : public VPRecipeWithIRFlags, "Op must be an operand of the recipe"); return Op == getCond() && Op->isDefinedOutsideLoopRegions(); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe for handling GEP instructions. @@ -1826,12 +1850,6 @@ class LLVM_ABI_FOR_TEST VPWidenGEPRecipe : public VPRecipeWithIRFlags { return 0; } -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// Returns true if the recipe only uses the first lane of operand \p Op. bool usesFirstLaneOnly(const VPValue *Op) const override { assert(is_contained(operands(), Op) && @@ -1841,6 +1859,13 @@ class LLVM_ABI_FOR_TEST VPWidenGEPRecipe : public VPRecipeWithIRFlags { else return !isPointerLoopInvariant() && Op->isDefinedOutsideLoopRegions(); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe to compute a pointer to the last element of each part of a widened @@ -1897,10 +1922,11 @@ class VPVectorEndPointerRecipe : public VPRecipeWithIRFlags, getDebugLoc()); } +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif }; @@ -1952,10 +1978,11 @@ class VPVectorPointerRecipe : public VPRecipeWithIRFlags, return 0; } +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif }; @@ -2013,12 +2040,6 @@ class LLVM_ABI_FOR_TEST VPHeaderPHIRecipe : public VPSingleDefRecipe, InstructionCost computeCost(ElementCount VF, VPCostContext &Ctx) const override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override = 0; -#endif - /// Returns the start value of the phi, if one is set. VPValue *getStartValue() { return getNumOperands() == 0 ? nullptr : getOperand(0); @@ -2043,6 +2064,13 @@ class LLVM_ABI_FOR_TEST VPHeaderPHIRecipe : public VPSingleDefRecipe, virtual VPRecipeBase &getBackedgeRecipe() { return *getBackedgeValue()->getDefiningRecipe(); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override = 0; +#endif }; /// Base class for widened induction (VPWidenIntOrFpInductionRecipe and @@ -2168,12 +2196,6 @@ class VPWidenIntOrFpInductionRecipe : public VPWidenInductionRecipe { "expandVPWidenIntOrFpInductionRecipe"); } -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - VPValue *getSplatVFValue() { // If the recipe has been unrolled return the VPValue for the induction // increment. @@ -2207,6 +2229,13 @@ class VPWidenIntOrFpInductionRecipe : public VPWidenInductionRecipe { VPValue *getLastUnrolledPartOperand() { return isUnrolled() ? getOperand(getNumOperands() - 1) : this; } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; class VPWidenPointerInductionRecipe : public VPWidenInductionRecipe { @@ -2246,10 +2275,11 @@ class VPWidenPointerInductionRecipe : public VPWidenInductionRecipe { /// Returns true if only scalar values will be generated. bool onlyScalarsGenerated(bool IsScalable); +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif }; @@ -2263,9 +2293,6 @@ class LLVM_ABI_FOR_TEST VPWidenPHIRecipe : public VPSingleDefRecipe, /// Name to use for the generated IR instruction for the widened phi. std::string Name; -protected: - const VPRecipeBase *getAsRecipe() const override { return this; } - public: /// Create a new VPWidenPHIRecipe for \p Phi with start value \p Start and /// debug location \p DL. @@ -2291,11 +2318,14 @@ class LLVM_ABI_FOR_TEST VPWidenPHIRecipe : public VPSingleDefRecipe, /// Generate the phi/select nodes. void execute(VPTransformState &State) override; +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif + + const VPRecipeBase *getAsRecipe() const override { return this; } }; /// A recipe for handling first-order recurrence phis. The start value is the @@ -2318,18 +2348,19 @@ struct VPFirstOrderRecurrencePHIRecipe : public VPHeaderPHIRecipe { InstructionCost computeCost(ElementCount VF, VPCostContext &Ctx) const override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// Returns true if the recipe only uses the first lane of operand \p Op. bool usesFirstLaneOnly(const VPValue *Op) const override { assert(is_contained(operands(), Op) && "Op must be an operand of the recipe"); return Op == getStartValue(); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe for handling reduction phis. The start value is the first operand @@ -2378,12 +2409,6 @@ class VPReductionPHIRecipe : public VPHeaderPHIRecipe, /// Get the factor that the VF of this recipe's output should be scaled by. unsigned getVFScaleFactor() const { return VFScaleFactor; } -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// Returns the number of incoming values, also number of incoming blocks. /// Note that at the moment, VPWidenPointerInductionRecipe only has a single /// incoming value, its start value. @@ -2404,6 +2429,13 @@ class VPReductionPHIRecipe : public VPHeaderPHIRecipe, "Op must be an operand of the recipe"); return isOrdered() || isInLoop(); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe for vectorizing a phi-node as a sequence of mask-based select @@ -2461,12 +2493,6 @@ class LLVM_ABI_FOR_TEST VPBlendRecipe : public VPSingleDefRecipe { InstructionCost computeCost(ElementCount VF, VPCostContext &Ctx) const override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// Returns true if the recipe only uses the first lane of operand \p Op. bool usesFirstLaneOnly(const VPValue *Op) const override { assert(is_contained(operands(), Op) && @@ -2476,6 +2502,13 @@ class LLVM_ABI_FOR_TEST VPBlendRecipe : public VPSingleDefRecipe { return all_of(users(), [this](VPUser *U) { return U->usesFirstLaneOnly(this); }); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A common base class for interleaved memory operations. @@ -2602,12 +2635,6 @@ class LLVM_ABI_FOR_TEST VPInterleaveRecipe final : public VPInterleaveBase { /// Generate the wide load or store, and shuffles. void execute(VPTransformState &State) override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - bool usesFirstLaneOnly(const VPValue *Op) const override { assert(is_contained(operands(), Op) && "Op must be an operand of the recipe"); @@ -2617,6 +2644,13 @@ class LLVM_ABI_FOR_TEST VPInterleaveRecipe final : public VPInterleaveBase { unsigned getNumStoreOperands() const override { return getNumOperands() - (getMask() ? 2 : 1); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe for interleaved memory operations with vector-predication @@ -2649,12 +2683,6 @@ class LLVM_ABI_FOR_TEST VPInterleaveEVLRecipe final : public VPInterleaveBase { /// Generate the wide load or store, and shuffles. void execute(VPTransformState &State) override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// The recipe only uses the first lane of the address, and EVL operand. bool usesFirstLaneOnly(const VPValue *Op) const override { assert(is_contained(operands(), Op) && @@ -2666,6 +2694,13 @@ class LLVM_ABI_FOR_TEST VPInterleaveEVLRecipe final : public VPInterleaveBase { unsigned getNumStoreOperands() const override { return getNumOperands() - (getMask() ? 3 : 2); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe to represent inloop reduction operations, performing a reduction on @@ -2742,12 +2777,6 @@ class LLVM_ABI_FOR_TEST VPReductionRecipe : public VPRecipeWithIRFlags { InstructionCost computeCost(ElementCount VF, VPCostContext &Ctx) const override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// Return the recurrence kind for the in-loop reduction. RecurKind getRecurrenceKind() const { return RdxKind; } /// Return true if the in-loop reduction is ordered. @@ -2762,6 +2791,13 @@ class LLVM_ABI_FOR_TEST VPReductionRecipe : public VPRecipeWithIRFlags { VPValue *getCondOp() const { return isConditional() ? getOperand(getNumOperands() - 1) : nullptr; } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe for forming partial reductions. In the loop, an accumulator and @@ -2819,10 +2855,11 @@ class VPPartialReductionRecipe : public VPReductionRecipe { /// Get the factor that the VF of this recipe's output should be scaled by. unsigned getVFScaleFactor() const { return VFScaleFactor; } +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif }; @@ -2852,12 +2889,6 @@ class LLVM_ABI_FOR_TEST VPReductionEVLRecipe : public VPReductionRecipe { /// Generate the reduction in the loop void execute(VPTransformState &State) override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// The VPValue of the explicit vector length. VPValue *getEVL() const { return getOperand(2); } @@ -2867,6 +2898,13 @@ class LLVM_ABI_FOR_TEST VPReductionEVLRecipe : public VPReductionRecipe { "Op must be an operand of the recipe"); return Op == getEVL(); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// VPReplicateRecipe replicates a given instruction producing multiple scalar @@ -2913,12 +2951,6 @@ class LLVM_ABI_FOR_TEST VPReplicateRecipe : public VPRecipeWithIRFlags, InstructionCost computeCost(ElementCount VF, VPCostContext &Ctx) const override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - bool isSingleScalar() const { return IsSingleScalar; } bool isPredicated() const { return IsPredicated; } @@ -2949,6 +2981,13 @@ class LLVM_ABI_FOR_TEST VPReplicateRecipe : public VPRecipeWithIRFlags, } unsigned getOpcode() const { return getUnderlyingInstr()->getOpcode(); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe for generating conditional branches on the bits of a mask. @@ -2973,8 +3012,8 @@ class LLVM_ABI_FOR_TEST VPBranchOnMaskRecipe : public VPRecipeBase { #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override { + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override { O << Indent << "BRANCH-ON-MASK "; printOperands(O, SlotTracker); } @@ -3115,12 +3154,6 @@ class VPExpressionRecipe : public VPSingleDefRecipe { InstructionCost computeCost(ElementCount VF, VPCostContext &Ctx) const override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// Returns true if this expression contains recipes that may read from or /// write to memory. bool mayReadOrWriteMemory() const; @@ -3131,6 +3164,13 @@ class VPExpressionRecipe : public VPSingleDefRecipe { /// Returns true if the result of this VPExpressionRecipe is a single-scalar. bool isSingleScalar() const; + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// VPPredInstPHIRecipe is a recipe for generating the phi nodes needed when @@ -3163,18 +3203,19 @@ class LLVM_ABI_FOR_TEST VPPredInstPHIRecipe : public VPSingleDefRecipe { return 0; } -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// Returns true if the recipe uses scalars of operand \p Op. bool usesScalars(const VPValue *Op) const override { assert(is_contained(operands(), Op) && "Op must be an operand of the recipe"); return true; } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A common base class for widening memory operations. An optional mask can be @@ -3292,12 +3333,6 @@ struct LLVM_ABI_FOR_TEST VPWidenLoadRecipe final : public VPWidenMemoryRecipe, /// Generate a wide load or gather. void execute(VPTransformState &State) override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// Returns true if the recipe only uses the first lane of operand \p Op. bool usesFirstLaneOnly(const VPValue *Op) const override { assert(is_contained(operands(), Op) && @@ -3306,6 +3341,13 @@ struct LLVM_ABI_FOR_TEST VPWidenLoadRecipe final : public VPWidenMemoryRecipe, // their address. return Op == getAddr() && isConsecutive(); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe for widening load operations with vector-predication intrinsics, @@ -3333,12 +3375,6 @@ struct VPWidenLoadEVLRecipe final : public VPWidenMemoryRecipe, public VPValue { InstructionCost computeCost(ElementCount VF, VPCostContext &Ctx) const override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// Returns true if the recipe only uses the first lane of operand \p Op. bool usesFirstLaneOnly(const VPValue *Op) const override { assert(is_contained(operands(), Op) && @@ -3347,6 +3383,13 @@ struct VPWidenLoadEVLRecipe final : public VPWidenMemoryRecipe, public VPValue { // only demand the first lane of their address. return Op == getEVL() || (Op == getAddr() && isConsecutive()); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe for widening store operations, using the stored value, the address @@ -3374,12 +3417,6 @@ struct LLVM_ABI_FOR_TEST VPWidenStoreRecipe final : public VPWidenMemoryRecipe { /// Generate a wide store or scatter. void execute(VPTransformState &State) override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// Returns true if the recipe only uses the first lane of operand \p Op. bool usesFirstLaneOnly(const VPValue *Op) const override { assert(is_contained(operands(), Op) && @@ -3388,6 +3425,13 @@ struct LLVM_ABI_FOR_TEST VPWidenStoreRecipe final : public VPWidenMemoryRecipe { // unless the same operand is also stored. return Op == getAddr() && isConsecutive() && Op != getStoredValue(); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe for widening store operations with vector-predication intrinsics, @@ -3417,12 +3461,6 @@ struct VPWidenStoreEVLRecipe final : public VPWidenMemoryRecipe { InstructionCost computeCost(ElementCount VF, VPCostContext &Ctx) const override; -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// Returns true if the recipe only uses the first lane of operand \p Op. bool usesFirstLaneOnly(const VPValue *Op) const override { assert(is_contained(operands(), Op) && @@ -3436,6 +3474,13 @@ struct VPWidenStoreEVLRecipe final : public VPWidenMemoryRecipe { // happen with opaque pointers. return Op == getAddr() && isConsecutive() && Op != getStoredValue(); } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// Recipe to expand a SCEV expression. @@ -3463,13 +3508,14 @@ class VPExpandSCEVRecipe : public VPSingleDefRecipe { return 0; } + const SCEV *getSCEV() const { return Expr; } + +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif - - const SCEV *getSCEV() const { return Expr; } }; /// Canonical scalar induction phi of the vector loop. Starting at the specified @@ -3496,12 +3542,6 @@ class VPCanonicalIVPHIRecipe : public VPHeaderPHIRecipe { "scalar phi recipe"); } -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - LLVM_ABI_FOR_TEST void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - /// Returns the scalar type of the induction. Type *getScalarType() const { return getStartValue()->getLiveInIRValue()->getType(); @@ -3527,6 +3567,13 @@ class VPCanonicalIVPHIRecipe : public VPHeaderPHIRecipe { // For now, match the behavior of the legacy cost model. return 0; } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + LLVM_ABI_FOR_TEST void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe for generating the active lane mask for the vector loop that is @@ -3553,10 +3600,11 @@ class VPActiveLaneMaskPHIRecipe : public VPHeaderPHIRecipe { /// Generate the active lane mask phi of the vector loop. void execute(VPTransformState &State) override; +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif }; @@ -3596,10 +3644,11 @@ class VPEVLBasedIVPHIRecipe : public VPHeaderPHIRecipe { return true; } +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - LLVM_ABI_FOR_TEST void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + LLVM_ABI_FOR_TEST void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif }; @@ -3631,10 +3680,11 @@ class VPWidenCanonicalIVRecipe : public VPSingleDefRecipe, return 0; } +protected: #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; #endif }; @@ -3686,12 +3736,6 @@ class VPDerivedIVRecipe : public VPSingleDefRecipe { return 0; } -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - Type *getScalarType() const { return getStartValue()->getLiveInIRValue()->getType(); } @@ -3705,6 +3749,13 @@ class VPDerivedIVRecipe : public VPSingleDefRecipe { "Op must be an operand of the recipe"); return true; } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// A recipe for handling phi nodes of integer and floating-point inductions, @@ -3756,12 +3807,6 @@ class LLVM_ABI_FOR_TEST VPScalarIVStepsRecipe : public VPRecipeWithIRFlags, return 0; } -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - /// Print the recipe. - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override; -#endif - VPValue *getStepValue() const { return getOperand(1); } /// Returns true if the recipe only uses the first lane of operand \p Op. @@ -3770,6 +3815,13 @@ class LLVM_ABI_FOR_TEST VPScalarIVStepsRecipe : public VPRecipeWithIRFlags, "Op must be an operand of the recipe"); return true; } + +protected: +#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) + /// Print the recipe. + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override; +#endif }; /// Casting from VPRecipeBase -> VPPhiAccessors is supported for all recipe diff --git a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp index 84bf0d525b86e..cf95b4eac9d75 100644 --- a/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp +++ b/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp @@ -424,8 +424,8 @@ void VPPartialReductionRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPPartialReductionRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPPartialReductionRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "PARTIAL-REDUCE "; printAsOperand(O, SlotTracker); O << " = " << Instruction::getOpcodeName(getOpcode()) << " "; @@ -485,6 +485,11 @@ FastMathFlags VPIRFlags::getFastMathFlags() const { #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) void VPSingleDefRecipe::dump() const { VPDef::dump(); } + +void VPRecipeBase::print(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { + printRecipe(O, Indent, SlotTracker); +} #endif template @@ -1369,11 +1374,11 @@ bool VPInstruction::usesFirstPartOnly(const VPValue *Op) const { #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) void VPInstruction::dump() const { VPSlotTracker SlotTracker(getParent()->getPlan()); - print(dbgs(), "", SlotTracker); + printRecipe(dbgs(), "", SlotTracker); } -void VPInstruction::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPInstruction::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "EMIT" << (isSingleScalar() ? "-SCALAR" : "") << " "; if (hasResult()) { @@ -1508,8 +1513,8 @@ void VPInstructionWithType::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPInstructionWithType::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPInstructionWithType::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "EMIT" << (isSingleScalar() ? "-SCALAR" : "") << " "; printAsOperand(O, SlotTracker); O << " = "; @@ -1553,8 +1558,8 @@ void VPPhi::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPPhi::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPPhi::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "EMIT" << (isSingleScalar() ? "-SCALAR" : "") << " "; printAsOperand(O, SlotTracker); O << " = phi "; @@ -1596,8 +1601,8 @@ void VPIRInstruction::extractLastLaneOfFirstOperand(VPBuilder &Builder) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPIRInstruction::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPIRInstruction::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "IR " << I; } #endif @@ -1652,9 +1657,9 @@ void VPPhiAccessors::printPhiOperands(raw_ostream &O, #endif #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPIRPhi::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { - VPIRInstruction::print(O, Indent, SlotTracker); +void VPIRPhi::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { + VPIRInstruction::printRecipe(O, Indent, SlotTracker); if (getNumOperands() != 0) { O << " (extra operand" << (getNumOperands() > 1 ? "s" : "") << ": "; @@ -1739,8 +1744,8 @@ InstructionCost VPWidenCallRecipe::computeCost(ElementCount VF, } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPWidenCallRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenCallRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "WIDEN-CALL "; Function *CalledFn = getCalledScalarFunction(); @@ -1874,8 +1879,8 @@ bool VPWidenIntrinsicRecipe::usesFirstLaneOnly(const VPValue *Op) const { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPWidenIntrinsicRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenIntrinsicRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "WIDEN-INTRINSIC "; if (ResultTy->isVoidTy()) { O << "void "; @@ -1961,8 +1966,8 @@ InstructionCost VPHistogramRecipe::computeCost(ElementCount VF, } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPHistogramRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPHistogramRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "WIDEN-HISTOGRAM buckets: "; getOperand(0)->printAsOperand(O, SlotTracker); @@ -1980,8 +1985,8 @@ void VPHistogramRecipe::print(raw_ostream &O, const Twine &Indent, } } -void VPWidenSelectRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenSelectRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "WIDEN-SELECT "; printAsOperand(O, SlotTracker); O << " = select "; @@ -2274,8 +2279,8 @@ InstructionCost VPWidenRecipe::computeCost(ElementCount VF, } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPWidenRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "WIDEN "; printAsOperand(O, SlotTracker); O << " = " << Instruction::getOpcodeName(Opcode); @@ -2354,8 +2359,8 @@ InstructionCost VPWidenCastRecipe::computeCost(ElementCount VF, } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPWidenCastRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenCastRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "WIDEN-CAST "; printAsOperand(O, SlotTracker); O << " = " << Instruction::getOpcodeName(Opcode); @@ -2378,8 +2383,8 @@ static Constant *getSignedIntOrFpConstant(Type *Ty, int64_t C) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPWidenIntOrFpInductionRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenIntOrFpInductionRecipe::printRecipe( + raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const { O << Indent; printAsOperand(O, SlotTracker); O << " = WIDEN-INDUCTION "; @@ -2403,8 +2408,8 @@ bool VPWidenIntOrFpInductionRecipe::isCanonical() const { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPDerivedIVRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPDerivedIVRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent; printAsOperand(O, SlotTracker); O << " = DERIVED-IV "; @@ -2511,8 +2516,8 @@ void VPScalarIVStepsRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPScalarIVStepsRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPScalarIVStepsRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent; printAsOperand(O, SlotTracker); O << " = SCALAR-STEPS "; @@ -2576,8 +2581,8 @@ void VPWidenGEPRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPWidenGEPRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenGEPRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "WIDEN-GEP "; O << (isPointerLoopInvariant() ? "Inv" : "Var"); for (size_t I = 0; I < getNumOperands() - 1; ++I) @@ -2629,8 +2634,8 @@ void VPVectorEndPointerRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPVectorEndPointerRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPVectorEndPointerRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent; printAsOperand(O, SlotTracker); O << " = vector-end-pointer"; @@ -2654,8 +2659,8 @@ void VPVectorPointerRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPVectorPointerRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPVectorPointerRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent; printAsOperand(O, SlotTracker); O << " = vector-pointer "; @@ -2679,8 +2684,8 @@ InstructionCost VPBlendRecipe::computeCost(ElementCount VF, } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPBlendRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPBlendRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "BLEND "; printAsOperand(O, SlotTracker); O << " ="; @@ -2963,8 +2968,8 @@ bool VPExpressionRecipe::isSingleScalar() const { #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPExpressionRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPExpressionRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "EXPRESSION "; printAsOperand(O, SlotTracker); O << " = "; @@ -3052,8 +3057,8 @@ void VPExpressionRecipe::print(raw_ostream &O, const Twine &Indent, } } -void VPReductionRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPReductionRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "REDUCE "; printAsOperand(O, SlotTracker); O << " = "; @@ -3072,8 +3077,8 @@ void VPReductionRecipe::print(raw_ostream &O, const Twine &Indent, O << ")"; } -void VPReductionEVLRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPReductionEVLRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "REDUCE "; printAsOperand(O, SlotTracker); O << " = "; @@ -3432,8 +3437,8 @@ InstructionCost VPReplicateRecipe::computeCost(ElementCount VF, } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPReplicateRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPReplicateRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << (IsSingleScalar ? "CLONE " : "REPLICATE "); if (!getUnderlyingInstr()->getType()->isVoidTy()) { @@ -3545,8 +3550,8 @@ void VPPredInstPHIRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPPredInstPHIRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPPredInstPHIRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "PHI-PREDICATED-INSTRUCTION "; printAsOperand(O, SlotTracker); O << " = "; @@ -3637,8 +3642,8 @@ void VPWidenLoadRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPWidenLoadRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenLoadRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "WIDEN "; printAsOperand(O, SlotTracker); O << " = load "; @@ -3716,8 +3721,8 @@ InstructionCost VPWidenLoadEVLRecipe::computeCost(ElementCount VF, } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPWidenLoadEVLRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenLoadEVLRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "WIDEN "; printAsOperand(O, SlotTracker); O << " = vp.load "; @@ -3760,8 +3765,8 @@ void VPWidenStoreRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPWidenStoreRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenStoreRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "WIDEN store "; printOperands(O, SlotTracker); } @@ -3825,8 +3830,8 @@ InstructionCost VPWidenStoreEVLRecipe::computeCost(ElementCount VF, } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPWidenStoreEVLRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenStoreEVLRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "WIDEN vp.store "; printOperands(O, SlotTracker); } @@ -4089,8 +4094,8 @@ void VPInterleaveRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPInterleaveRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPInterleaveRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { const InterleaveGroup *IG = getInterleaveGroup(); O << Indent << "INTERLEAVE-GROUP with factor " << IG->getFactor() << " at "; IG->getInsertPos()->printAsOperand(O, false); @@ -4232,8 +4237,8 @@ void VPInterleaveEVLRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPInterleaveEVLRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPInterleaveEVLRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { const InterleaveGroup *IG = getInterleaveGroup(); O << Indent << "INTERLEAVE-GROUP with factor " << IG->getFactor() << " at "; IG->getInsertPos()->printAsOperand(O, false); @@ -4306,8 +4311,8 @@ InstructionCost VPInterleaveBase::computeCost(ElementCount VF, } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPCanonicalIVPHIRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPCanonicalIVPHIRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "EMIT "; printAsOperand(O, SlotTracker); O << " = CANONICAL-INDUCTION "; @@ -4321,8 +4326,8 @@ bool VPWidenPointerInductionRecipe::onlyScalarsGenerated(bool IsScalable) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPWidenPointerInductionRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenPointerInductionRecipe::printRecipe( + raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const { assert((getNumOperands() == 3 || getNumOperands() == 5) && "unexpected number of operands"); O << Indent << "EMIT "; @@ -4341,8 +4346,8 @@ void VPWidenPointerInductionRecipe::print(raw_ostream &O, const Twine &Indent, } } -void VPExpandSCEVRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPExpandSCEVRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "EMIT "; printAsOperand(O, SlotTracker); O << " = EXPAND SCEV " << *Expr; @@ -4368,8 +4373,8 @@ void VPWidenCanonicalIVRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPWidenCanonicalIVRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenCanonicalIVRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "EMIT "; printAsOperand(O, SlotTracker); O << " = WIDEN-CANONICAL-INDUCTION "; @@ -4416,8 +4421,8 @@ VPFirstOrderRecurrencePHIRecipe::computeCost(ElementCount VF, } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPFirstOrderRecurrencePHIRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPFirstOrderRecurrencePHIRecipe::printRecipe( + raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const { O << Indent << "FIRST-ORDER-RECURRENCE-PHI "; printAsOperand(O, SlotTracker); O << " = phi "; @@ -4451,8 +4456,8 @@ void VPReductionPHIRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPReductionPHIRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPReductionPHIRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "WIDEN-REDUCTION-PHI "; printAsOperand(O, SlotTracker); @@ -4471,8 +4476,8 @@ void VPWidenPHIRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPWidenPHIRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPWidenPHIRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "WIDEN-PHI "; printAsOperand(O, SlotTracker); @@ -4494,8 +4499,8 @@ void VPActiveLaneMaskPHIRecipe::execute(VPTransformState &State) { } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPActiveLaneMaskPHIRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPActiveLaneMaskPHIRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "ACTIVE-LANE-MASK-PHI "; printAsOperand(O, SlotTracker); @@ -4505,8 +4510,8 @@ void VPActiveLaneMaskPHIRecipe::print(raw_ostream &O, const Twine &Indent, #endif #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) -void VPEVLBasedIVPHIRecipe::print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const { +void VPEVLBasedIVPHIRecipe::printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const { O << Indent << "EXPLICIT-VECTOR-LENGTH-BASED-IV-PHI "; printAsOperand(O, SlotTracker); diff --git a/llvm/unittests/Transforms/Vectorize/VPlanTest.cpp b/llvm/unittests/Transforms/Vectorize/VPlanTest.cpp index 53a9f45fd5c3a..ee7fa175ca918 100644 --- a/llvm/unittests/Transforms/Vectorize/VPlanTest.cpp +++ b/llvm/unittests/Transforms/Vectorize/VPlanTest.cpp @@ -749,7 +749,7 @@ TEST_F(VPBasicBlockTest, print) { std::string I3Dump; raw_string_ostream OS(I3Dump); VPSlotTracker SlotTracker; - I3->print(OS, "", SlotTracker); + cast(I3)->print(OS, "", SlotTracker); EXPECT_EQ("EMIT store , ", I3Dump); } @@ -818,7 +818,7 @@ Successor(s): ir-bb std::string I3Dump; raw_string_ostream OS(I3Dump); VPSlotTracker SlotTracker(&Plan); - I3->print(OS, "", SlotTracker); + cast(I3)->print(OS, "", SlotTracker); EXPECT_EQ("EMIT store vp<%1>, vp<%2>", I3Dump); } @@ -1726,8 +1726,8 @@ struct VPDoubleValueDef : public VPRecipeBase { void execute(struct VPTransformState &State) override {} #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - void print(raw_ostream &O, const Twine &Indent, - VPSlotTracker &SlotTracker) const override {} + void printRecipe(raw_ostream &O, const Twine &Indent, + VPSlotTracker &SlotTracker) const override {} #endif };