|
LLVM 22.0.0git
|
A recipe for widening store operations, using the stored value, the address to store to and an optional mask. More...
#include "Transforms/Vectorize/VPlan.h"
Public Member Functions | |
| VPWidenStoreRecipe (StoreInst &Store, VPValue *Addr, VPValue *StoredVal, VPValue *Mask, bool Consecutive, bool Reverse, const VPIRMetadata &Metadata, DebugLoc DL) | |
| VPWidenStoreRecipe * | clone () override |
| Clone the current recipe. | |
| VP_CLASSOF_IMPL (VPDef::VPWidenStoreSC) | |
| VPValue * | getStoredValue () const |
| Return the value stored by this recipe. | |
| void | execute (VPTransformState &State) override |
| Generate a wide store or scatter. | |
| void | print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const override |
| Print the recipe. | |
| bool | onlyFirstLaneUsed (const VPValue *Op) const override |
Returns true if the recipe only uses the first lane of operand Op. | |
| Public Member Functions inherited from llvm::VPWidenMemoryRecipe | |
| bool | isConsecutive () const |
| Return whether the loaded-from / stored-to addresses are consecutive. | |
| bool | isReverse () const |
| Return whether the consecutive loaded/stored addresses are in reverse order. | |
| VPValue * | getAddr () const |
| Return the address accessed by this recipe. | |
| bool | isMasked () const |
| Returns true if the recipe is masked. | |
| VPValue * | getMask () const |
| Return the mask used by this recipe. | |
| InstructionCost | computeCost (ElementCount VF, VPCostContext &Ctx) const override |
| Return the cost of this VPWidenMemoryRecipe. | |
| Instruction & | getIngredient () const |
| 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). | |
| 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 | onlyFirstPartUsed (const VPValue *Op) const |
Returns true if the VPUser only uses the first part of operand Op. | |
| Public Member Functions inherited from llvm::VPIRMetadata | |
| VPIRMetadata () | |
| VPIRMetadata (Instruction &I) | |
Adds metatadata that can be preserved from the original instruction I. | |
| VPIRMetadata (Instruction &I, LoopVersioning *LVer) | |
Adds metatadata that can be preserved from the original instruction I and noalias metadata guaranteed by runtime checks using LVer. | |
| VPIRMetadata (const VPIRMetadata &Other) | |
| Copy constructor for cloning. | |
| VPIRMetadata & | operator= (const VPIRMetadata &Other) |
| void | applyMetadata (Instruction &I) const |
Add all metadata to I. | |
| void | addMetadata (unsigned Kind, MDNode *Node) |
Add metadata with kind Kind and Node. | |
| void | intersect (const VPIRMetadata &MD) |
Intersect this VPIRMetada object with MD, keeping only metadata nodes that are common to both. | |
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 |
| Static Public Member Functions inherited from llvm::VPWidenMemoryRecipe | |
| 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) |
| 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::VPWidenMemoryRecipe | |
| void | setMask (VPValue *Mask) |
| VPWidenMemoryRecipe (const char unsigned SC, Instruction &I, std::initializer_list< VPValue * > Operands, bool Consecutive, bool Reverse, const VPIRMetadata &Metadata, DebugLoc DL) | |
| 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 Attributes inherited from llvm::VPWidenMemoryRecipe | |
| Instruction & | Ingredient |
| bool | Consecutive |
| Whether the accessed addresses are consecutive. | |
| bool | Reverse |
| Whether the consecutive accessed addresses are in reverse order. | |
| bool | IsMasked = false |
| Whether the memory access is masked. | |
A recipe for widening store operations, using the stored value, the address to store to and an optional mask.
|
inline |
Definition at line 3341 of file VPlan.h.
References llvm::VPWidenMemoryRecipe::Consecutive, llvm::VPWidenMemoryRecipe::Reverse, and llvm::VPWidenMemoryRecipe::VPWidenMemoryRecipe().
Referenced by clone().
|
inlineoverridevirtual |
Clone the current recipe.
Reimplemented from llvm::VPWidenMemoryRecipe.
Definition at line 3349 of file VPlan.h.
References llvm::cast(), llvm::VPWidenMemoryRecipe::Consecutive, llvm::VPWidenMemoryRecipe::getAddr(), getDebugLoc(), getMask(), getStoredValue(), llvm::VPWidenMemoryRecipe::Ingredient, llvm::VPWidenMemoryRecipe::Reverse, and VPWidenStoreRecipe().
|
overridevirtual |
Generate a wide store or scatter.
Reimplemented from llvm::VPWidenMemoryRecipe.
Definition at line 3699 of file VPlanRecipes.cpp.
References llvm::VPIRMetadata::applyMetadata(), llvm::VPWidenMemoryRecipe::getAddr(), llvm::getLoadStoreAlignment(), llvm::VPWidenMemoryRecipe::getMask(), getStoredValue(), llvm::VPWidenMemoryRecipe::Ingredient, llvm::VPWidenMemoryRecipe::isConsecutive(), and llvm::VPWidenMemoryRecipe::isReverse().
|
inline |
Return the value stored by this recipe.
Definition at line 3358 of file VPlan.h.
References llvm::VPUser::getOperand().
Referenced by clone(), execute(), onlyFirstLaneUsed(), and llvm::VPWidenStoreEVLRecipe::VPWidenStoreEVLRecipe().
Returns true if the recipe only uses the first lane of operand Op.
Reimplemented from llvm::VPUser.
Definition at line 3370 of file VPlan.h.
References assert(), llvm::VPWidenMemoryRecipe::getAddr(), getStoredValue(), llvm::is_contained(), llvm::VPWidenMemoryRecipe::isConsecutive(), and llvm::VPUser::operands().
|
overridevirtual |
Print the recipe.
Implements llvm::VPDef.
Definition at line 3735 of file VPlanRecipes.cpp.
References llvm::VPUser::printOperands().
| llvm::VPWidenStoreRecipe::VP_CLASSOF_IMPL | ( | VPDef::VPWidenStoreSC | ) |