|
LLVM 22.0.0git
|
A pure-virtual common base class for recipes defining a single VPValue and using IR flags. More...
#include "Transforms/Vectorize/VPlan.h"
Public Member Functions | |
| VPRecipeWithIRFlags (const unsigned char SC, ArrayRef< VPValue * > Operands, DebugLoc DL=DebugLoc::getUnknown()) | |
| VPRecipeWithIRFlags (const unsigned char SC, ArrayRef< VPValue * > Operands, Instruction &I) | |
| VPRecipeWithIRFlags (const unsigned char SC, ArrayRef< VPValue * > Operands, const VPIRFlags &Flags, DebugLoc DL=DebugLoc::getUnknown()) | |
| virtual VPRecipeWithIRFlags * | clone () override=0 |
| Clone the current recipe. | |
| void | execute (VPTransformState &State) override=0 |
| The method which generates the output IR instructions that correspond to this VPRecipe, thereby "executing" the VPlan. | |
| InstructionCost | getCostForRecipeWithOpcode (unsigned Opcode, ElementCount VF, VPCostContext &Ctx) const |
Compute the cost for this recipe for VF, using Opcode and Ctx. | |
| Public Member Functions inherited from llvm::VPSingleDefRecipe | |
| VPSingleDefRecipe (const unsigned char SC, ArrayRef< VPValue * > Operands, DebugLoc DL=DebugLoc::getUnknown()) | |
| VPSingleDefRecipe (const unsigned char SC, ArrayRef< VPValue * > Operands, Value *UV, DebugLoc DL=DebugLoc::getUnknown()) | |
| Instruction * | getUnderlyingInstr () |
| Returns the underlying instruction. | |
| const Instruction * | getUnderlyingInstr () const |
| LLVM_DUMP_METHOD void | dump () const |
| Print this VPSingleDefRecipe to dbgs() (for debugging). | |
| Public Member Functions inherited from llvm::VPRecipeBase | |
| VPRecipeBase (const unsigned char SC, ArrayRef< VPValue * > Operands, DebugLoc DL=DebugLoc::getUnknown()) | |
| virtual | ~VPRecipeBase ()=default |
| VPBasicBlock * | getParent () |
| const VPBasicBlock * | getParent () const |
| VPRegionBlock * | getRegion () |
| const VPRegionBlock * | getRegion () const |
| InstructionCost | cost (ElementCount VF, VPCostContext &Ctx) |
| Return the cost of this recipe, taking into account if the cost computation should be skipped and the ForceTargetInstructionCost flag. | |
| void | insertBefore (VPRecipeBase *InsertPos) |
| Insert an unlinked recipe into a basic block immediately before the specified recipe. | |
| void | insertBefore (VPBasicBlock &BB, iplist< VPRecipeBase >::iterator IP) |
Insert an unlinked recipe into BB immediately before the insertion point IP;. | |
| void | insertAfter (VPRecipeBase *InsertPos) |
| Insert an unlinked Recipe into a basic block immediately after the specified Recipe. | |
| void | moveAfter (VPRecipeBase *MovePos) |
| Unlink this recipe from its current VPBasicBlock and insert it into the VPBasicBlock that MovePos lives in, right after MovePos. | |
| void | moveBefore (VPBasicBlock &BB, iplist< VPRecipeBase >::iterator I) |
| Unlink this recipe and insert into BB before I. | |
| void | removeFromParent () |
| This method unlinks 'this' from the containing basic block, but does not delete it. | |
| iplist< VPRecipeBase >::iterator | eraseFromParent () |
| This method unlinks 'this' from the containing basic block and deletes it. | |
| bool | mayHaveSideEffects () const |
| Returns true if the recipe may have side-effects. | |
| bool | isPhi () const |
| Returns true for PHI-like recipes. | |
| bool | mayReadFromMemory () const |
| Returns true if the recipe may read from memory. | |
| bool | mayWriteToMemory () const |
| Returns true if the recipe may write to memory. | |
| bool | mayReadOrWriteMemory () const |
| Returns true if the recipe may read from or write to memory. | |
| DebugLoc | getDebugLoc () const |
| Returns the debug location of the recipe. | |
| bool | isScalarCast () const |
| Return true if the recipe is a scalar cast. | |
| void | setDebugLoc (DebugLoc NewDL) |
Set the recipe's debug location to NewDL. | |
| Public Member Functions inherited from llvm::ilist_node_with_parent< VPRecipeBase, VPBasicBlock > | |
| VPRecipeBase * | getPrevNode () |
| VPRecipeBase * | getNextNode () |
Get the next node, or nullptr for the list tail. | |
| Public Member Functions inherited from llvm::ilist_node_impl< ilist_detail::compute_node_options< VPRecipeBase, Options... >::type > | |
| self_iterator | getIterator () |
| reverse_self_iterator | getReverseIterator () |
| std::enable_if_t< T::is_sentinel_tracking_explicit, bool > | isSentinel () const |
| Check whether this is the sentinel node. | |
| Public Member Functions inherited from llvm::ilist_detail::node_parent_access< ilist_node_impl< ilist_detail::compute_node_options< VPRecipeBase, Options... >::type >, ilist_detail::compute_node_options< VPRecipeBase, Options... >::type::parent_ty > | |
| const ilist_detail::compute_node_options< VPRecipeBase, Options... >::type::parent_ty * | getParent () const |
| void | setParent (ilist_detail::compute_node_options< VPRecipeBase, Options... >::type::parent_ty *Parent) |
| Public Member Functions inherited from llvm::VPDef | |
| VPDef (const unsigned char SC) | |
| virtual | ~VPDef () |
| VPValue * | getVPSingleValue () |
| Returns the only VPValue defined by the VPDef. | |
| const VPValue * | getVPSingleValue () const |
| VPValue * | getVPValue (unsigned I) |
Returns the VPValue with index I defined by the VPDef. | |
| const VPValue * | getVPValue (unsigned I) const |
| ArrayRef< VPValue * > | definedValues () |
| Returns an ArrayRef of the values defined by the VPDef. | |
| ArrayRef< VPValue * > | definedValues () const |
| Returns an ArrayRef of the values defined by the VPDef. | |
| unsigned | getNumDefinedValues () const |
| Returns the number of values defined by the VPDef. | |
| unsigned | getVPDefID () const |
| void | dump () const |
| Dump the VPDef to stderr (for debugging). | |
| virtual void | print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const =0 |
| Each concrete VPDef prints itself. | |
| Public Member Functions inherited from llvm::VPUser | |
| VPUser ()=delete | |
| VPUser (const VPUser &)=delete | |
| VPUser & | operator= (const VPUser &)=delete |
| virtual | ~VPUser () |
| void | addOperand (VPValue *Operand) |
| unsigned | getNumOperands () const |
| VPValue * | getOperand (unsigned N) const |
| void | setOperand (unsigned I, VPValue *New) |
| void | swapOperands () |
| Swap operands of the VPUser. It must have exactly 2 operands. | |
| void | replaceUsesOfWith (VPValue *From, VPValue *To) |
Replaces all uses of From in the VPUser with To. | |
| operand_iterator | op_begin () |
| const_operand_iterator | op_begin () const |
| operand_iterator | op_end () |
| const_operand_iterator | op_end () const |
| operand_range | operands () |
| const_operand_range | operands () const |
| virtual bool | usesScalars (const VPValue *Op) const |
Returns true if the VPUser uses scalars of operand Op. | |
| virtual bool | onlyFirstLaneUsed (const VPValue *Op) const |
Returns true if the VPUser only uses the first lane of operand Op. | |
| virtual bool | onlyFirstPartUsed (const VPValue *Op) const |
Returns true if the VPUser only uses the first part of operand Op. | |
| Public Member Functions inherited from llvm::VPValue | |
| Value * | getUnderlyingValue () const |
| Return the underlying Value attached to this VPValue. | |
| VPValue (const VPValue &)=delete | |
| VPValue & | operator= (const VPValue &)=delete |
| virtual | ~VPValue () |
| unsigned | getVPValueID () const |
| void | printAsOperand (raw_ostream &OS, VPSlotTracker &Tracker) const |
| void | print (raw_ostream &OS, VPSlotTracker &Tracker) const |
| void | dump () const |
| Dump the value to stderr (for debugging). | |
| unsigned | getNumUsers () const |
| void | addUser (VPUser &User) |
| void | removeUser (VPUser &User) |
Remove a single User from the list of users. | |
| user_iterator | user_begin () |
| const_user_iterator | user_begin () const |
| user_iterator | user_end () |
| const_user_iterator | user_end () const |
| user_range | users () |
| const_user_range | users () const |
| bool | hasMoreThanOneUniqueUser () const |
| Returns true if the value has more than one unique user. | |
| bool | hasOneUse () const |
| void | replaceAllUsesWith (VPValue *New) |
| void | replaceUsesWithIf (VPValue *New, llvm::function_ref< bool(VPUser &U, unsigned Idx)> ShouldReplace) |
Go through the uses list for this VPValue and make each use point to New if the callback ShouldReplace returns true for the given use specified by a pair of (VPUser, the use index). | |
| VPRecipeBase * | getDefiningRecipe () |
| Returns the recipe defining this VPValue or nullptr if it is not defined by a recipe, i.e. | |
| const VPRecipeBase * | getDefiningRecipe () const |
| bool | hasDefiningRecipe () const |
| Returns true if this VPValue is defined by a recipe. | |
| bool | isLiveIn () const |
| Returns true if this VPValue is a live-in, i.e. defined outside the VPlan. | |
| Value * | getLiveInIRValue () const |
| Returns the underlying IR value, if this VPValue is defined outside the scope of VPlan. | |
| bool | isDefinedOutsideLoopRegions () const |
| Returns true if the VPValue is defined outside any loop. | |
| void | setUnderlyingValue (Value *Val) |
| Public Member Functions inherited from llvm::VPIRFlags | |
| VPIRFlags () | |
| VPIRFlags (Instruction &I) | |
| VPIRFlags (CmpInst::Predicate Pred) | |
| VPIRFlags (WrapFlagsTy WrapFlags) | |
| VPIRFlags (TruncFlagsTy TruncFlags) | |
| VPIRFlags (FastMathFlags FMFs) | |
| VPIRFlags (DisjointFlagsTy DisjointFlags) | |
| VPIRFlags (NonNegFlagsTy NonNegFlags) | |
| VPIRFlags (GEPNoWrapFlags GEPFlags) | |
| void | transferFlags (VPIRFlags &Other) |
| void | intersectFlags (const VPIRFlags &Other) |
Only keep flags also present in Other. | |
| void | dropPoisonGeneratingFlags () |
| Drop all poison-generating flags. | |
| void | applyFlags (Instruction &I) const |
Apply the IR flags to I. | |
| CmpInst::Predicate | getPredicate () const |
| void | setPredicate (CmpInst::Predicate Pred) |
| GEPNoWrapFlags | getGEPNoWrapFlags () const |
| bool | hasPredicate () const |
| Returns true if the recipe has a comparison predicate. | |
| bool | hasFastMathFlags () const |
| Returns true if the recipe has fast-math flags. | |
| LLVM_ABI_FOR_TEST FastMathFlags | getFastMathFlags () const |
| bool | hasNonNegFlag () const |
| Returns true if the recipe has non-negative flag. | |
| bool | isNonNeg () const |
| bool | hasNoUnsignedWrap () const |
| bool | hasNoSignedWrap () const |
| bool | isDisjoint () const |
| bool | flagsValidForOpcode (unsigned Opcode) const |
Returns true if the set flags are valid for Opcode. | |
| void | printFlags (raw_ostream &O) const |
Static Public Member Functions | |
| static bool | classof (const VPRecipeBase *R) |
| static bool | classof (const VPUser *U) |
| static bool | classof (const VPValue *V) |
| static bool | classof (const VPSingleDefRecipe *U) |
| Static Public Member Functions inherited from llvm::VPSingleDefRecipe | |
| static bool | classof (const VPRecipeBase *R) |
| static bool | classof (const VPUser *U) |
| Static Public Member Functions inherited from llvm::VPRecipeBase | |
| static bool | classof (const VPDef *D) |
| Method to support type inquiry through isa, cast, and dyn_cast. | |
| static bool | classof (const VPUser *U) |
Additional Inherited Members | |
| Public Types inherited from llvm::VPDef | |
| using | VPRecipeTy |
| An enumeration for keeping track of the concrete subclass of VPRecipeBase that is actually instantiated. | |
| Public Types inherited from llvm::VPUser | |
| typedef SmallVectorImpl< VPValue * >::iterator | operand_iterator |
| typedef SmallVectorImpl< VPValue * >::const_iterator | const_operand_iterator |
| typedef iterator_range< operand_iterator > | operand_range |
| typedef iterator_range< const_operand_iterator > | const_operand_range |
| Public Types inherited from llvm::VPValue | |
| enum | { VPValueSC , VPVRecipeSC } |
| An enumeration for keeping track of the concrete subclass of VPValue that are actually instantiated. More... | |
| typedef SmallVectorImpl< VPUser * >::iterator | user_iterator |
| typedef SmallVectorImpl< VPUser * >::const_iterator | const_user_iterator |
| typedef iterator_range< user_iterator > | user_range |
| typedef iterator_range< const_user_iterator > | const_user_range |
| Protected Types inherited from llvm::ilist_node_impl< ilist_detail::compute_node_options< VPRecipeBase, Options... >::type > | |
| using | self_iterator |
| using | const_self_iterator |
| using | reverse_self_iterator |
| using | const_reverse_self_iterator |
| Protected Member Functions inherited from llvm::VPRecipeBase | |
| virtual InstructionCost | computeCost (ElementCount VF, VPCostContext &Ctx) const |
| Compute the cost of this recipe either using a recipe's specialized implementation or using the legacy cost model and the underlying instructions. | |
| Protected Member Functions inherited from llvm::ilist_node_with_parent< VPRecipeBase, VPBasicBlock > | |
| ilist_node_with_parent ()=default | |
| Protected Member Functions inherited from llvm::ilist_node_impl< ilist_detail::compute_node_options< VPRecipeBase, Options... >::type > | |
| ilist_node_impl ()=default | |
| Protected Member Functions inherited from llvm::VPUser | |
| void | printOperands (raw_ostream &O, VPSlotTracker &SlotTracker) const |
Print the operands to O. | |
| VPUser (ArrayRef< VPValue * > Operands) | |
| Protected Member Functions inherited from llvm::VPValue | |
| VPValue (const unsigned char SC, Value *UV=nullptr, VPDef *Def=nullptr) | |
| VPValue (Value *UV=nullptr) | |
| Create a live-in VPValue. | |
| VPValue (VPDef *Def, Value *UV=nullptr) | |
Create a VPValue for a Def which is a subclass of VPValue. | |
| VPValue (Value *UV, VPDef *Def) | |
Create a VPValue for a Def which defines multiple values. | |
| Protected Attributes inherited from llvm::VPValue | |
| Value * | UnderlyingVal |
| Hold the underlying Value, if any, attached to this VPValue. | |
| VPDef * | Def |
| Pointer to the VPDef that defines this VPValue. | |
A pure-virtual common base class for recipes defining a single VPValue and using IR flags.
|
inline |
Definition at line 872 of file VPlan.h.
References llvm::DebugLoc::getUnknown(), llvm::VPIRFlags::VPIRFlags(), and llvm::VPSingleDefRecipe::VPSingleDefRecipe().
Referenced by clone(), llvm::VPInstruction::VPInstruction(), llvm::VPInstruction::VPInstruction(), llvm::VPReductionRecipe::VPReductionRecipe(), llvm::VPScalarIVStepsRecipe::VPScalarIVStepsRecipe(), llvm::VPVectorEndPointerRecipe::VPVectorEndPointerRecipe(), llvm::VPVectorPointerRecipe::VPVectorPointerRecipe(), llvm::VPWidenCallRecipe::VPWidenCallRecipe(), llvm::VPWidenCastRecipe::VPWidenCastRecipe(), llvm::VPWidenGEPRecipe::VPWidenGEPRecipe(), llvm::VPWidenIntrinsicRecipe::VPWidenIntrinsicRecipe(), llvm::VPWidenIntrinsicRecipe::VPWidenIntrinsicRecipe(), llvm::VPWidenRecipe::VPWidenRecipe(), llvm::VPWidenRecipe::VPWidenRecipe(), and llvm::VPWidenSelectRecipe::VPWidenSelectRecipe().
|
inline |
Definition at line 876 of file VPlan.h.
References llvm::VPRecipeBase::getDebugLoc(), I, llvm::VPIRFlags::VPIRFlags(), and llvm::VPSingleDefRecipe::VPSingleDefRecipe().
|
inline |
Definition at line 880 of file VPlan.h.
References llvm::DebugLoc::getUnknown(), llvm::VPIRFlags::VPIRFlags(), and llvm::VPSingleDefRecipe::VPSingleDefRecipe().
|
inlinestatic |
|
inlinestatic |
Definition at line 912 of file VPlan.h.
References classof(), llvm::dyn_cast(), and llvm::VPSingleDefRecipe::VPSingleDefRecipe().
Definition at line 900 of file VPlan.h.
References classof(), and llvm::dyn_cast().
Definition at line 905 of file VPlan.h.
References classof(), and llvm::dyn_cast_or_null().
|
overridepure virtual |
Clone the current recipe.
Implements llvm::VPSingleDefRecipe.
Implemented in llvm::VPInstruction, llvm::VPInstructionWithType, llvm::VPPartialReductionRecipe, llvm::VPPhi, llvm::VPReductionEVLRecipe, llvm::VPReductionRecipe, llvm::VPReplicateRecipe, llvm::VPScalarIVStepsRecipe, llvm::VPVectorEndPointerRecipe, llvm::VPVectorPointerRecipe, llvm::VPWidenCallRecipe, llvm::VPWidenCastRecipe, llvm::VPWidenGEPRecipe, llvm::VPWidenIntrinsicRecipe, llvm::VPWidenRecipe, and llvm::VPWidenSelectRecipe.
References VPRecipeWithIRFlags().
Referenced by cloneForLane().
|
overridepure virtual |
The method which generates the output IR instructions that correspond to this VPRecipe, thereby "executing" the VPlan.
Implements llvm::VPRecipeBase.
Implemented in llvm::VPInstruction, llvm::VPInstructionWithType, llvm::VPPartialReductionRecipe, llvm::VPPhi, llvm::VPReductionEVLRecipe, llvm::VPReductionRecipe, llvm::VPReplicateRecipe, llvm::VPScalarIVStepsRecipe, llvm::VPVectorEndPointerRecipe, llvm::VPVectorPointerRecipe, llvm::VPWidenCallRecipe, llvm::VPWidenCastRecipe, llvm::VPWidenGEPRecipe, llvm::VPWidenIntrinsicRecipe, llvm::VPWidenRecipe, and llvm::VPWidenSelectRecipe.
| InstructionCost VPRecipeWithIRFlags::getCostForRecipeWithOpcode | ( | unsigned | Opcode, |
| ElementCount | VF, | ||
| VPCostContext & | Ctx ) const |
Compute the cost for this recipe for VF, using Opcode and Ctx.
Definition at line 1003 of file VPlanRecipes.cpp.
References llvm::SmallVectorImpl< T >::append(), llvm::dyn_cast_or_null(), llvm::VPUser::getOperand(), llvm::VPIRFlags::getPredicate(), llvm::VPValue::getUnderlyingValue(), llvm::VPValue::isDefinedOutsideLoopRegions(), llvm::ElementCount::isVector(), llvm::TargetTransformInfo::OperandValueInfo::Kind, llvm_unreachable, llvm::CmpInst::makeCmpResultType(), llvm::TargetTransformInfo::OK_AnyValue, llvm::TargetTransformInfo::OK_UniformValue, llvm::TargetTransformInfo::OP_None, llvm::toVectorTy(), llvm::User::value_op_begin(), and llvm::User::value_op_end().
Referenced by llvm::VPInstruction::computeCost(), llvm::VPReplicateRecipe::computeCost(), and llvm::VPWidenRecipe::computeCost().