LLVM 20.0.0git
|
Class to record LLVM IR flag for a recipe along with it. More...
#include "Transforms/Vectorize/VPlan.h"
Classes | |
struct | DisjointFlagsTy |
struct | GEPFlagsTy |
struct | WrapFlagsTy |
Public Member Functions | |
template<typename IterT > | |
VPRecipeWithIRFlags (const unsigned char SC, IterT Operands, DebugLoc DL={}) | |
template<typename IterT > | |
VPRecipeWithIRFlags (const unsigned char SC, IterT Operands, Instruction &I) | |
template<typename IterT > | |
VPRecipeWithIRFlags (const unsigned char SC, IterT Operands, CmpInst::Predicate Pred, DebugLoc DL={}) | |
template<typename IterT > | |
VPRecipeWithIRFlags (const unsigned char SC, IterT Operands, WrapFlagsTy WrapFlags, DebugLoc DL={}) | |
template<typename IterT > | |
VPRecipeWithIRFlags (const unsigned char SC, IterT Operands, FastMathFlags FMFs, DebugLoc DL={}) | |
template<typename IterT > | |
VPRecipeWithIRFlags (const unsigned char SC, IterT Operands, DisjointFlagsTy DisjointFlags, DebugLoc DL={}) | |
void | dropPoisonGeneratingFlags () |
Drop all poison-generating flags. | |
void | setFlags (Instruction *I) const |
Set the IR flags for I . | |
CmpInst::Predicate | getPredicate () const |
bool | isInBounds () const |
bool | hasFastMathFlags () const |
Returns true if the recipe has fast-math flags. | |
FastMathFlags | getFastMathFlags () const |
bool | hasNoUnsignedWrap () const |
bool | hasNoSignedWrap () const |
bool | isDisjoint () const |
void | printFlags (raw_ostream &O) const |
Public Member Functions inherited from llvm::VPSingleDefRecipe | |
template<typename IterT > | |
VPSingleDefRecipe (const unsigned char SC, IterT Operands, DebugLoc DL={}) | |
VPSingleDefRecipe (const unsigned char SC, ArrayRef< VPValue * > Operands, DebugLoc DL={}) | |
template<typename IterT > | |
VPSingleDefRecipe (const unsigned char SC, IterT Operands, Value *UV, DebugLoc DL={}) | |
virtual VPSingleDefRecipe * | clone () override=0 |
Clone the current recipe. | |
Instruction * | getUnderlyingInstr () |
Returns the underlying instruction. | |
const Instruction * | getUnderlyingInstr () const |
Public Member Functions inherited from llvm::VPRecipeBase | |
VPRecipeBase (const unsigned char SC, ArrayRef< VPValue * > Operands, DebugLoc DL={}) | |
template<typename IterT > | |
VPRecipeBase (const unsigned char SC, iterator_range< IterT > Operands, DebugLoc DL={}) | |
virtual | ~VPRecipeBase ()=default |
virtual VPRecipeBase * | clone ()=0 |
Clone the current recipe. | |
VPBasicBlock * | getParent () |
const VPBasicBlock * | getParent () const |
virtual void | execute (VPTransformState &State)=0 |
The method which generates the output IR instructions that correspond to this VPRecipe, thereby "executing" the VPlan. | |
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. | |
Public Member Functions inherited from llvm::ilist_node_with_parent< VPRecipeBase, VPBasicBlock > | |
VPRecipeBase * | getPrevNode () |
const VPRecipeBase * | getPrevNode () const |
Get the previous node, or nullptr for the list head. | |
VPRecipeBase * | getNextNode () |
Get the next node, or nullptr for the list tail. | |
const VPRecipeBase * | getNextNode () const |
Get the next node, or nullptr for the list tail. | |
Public Member Functions inherited from llvm::ilist_node_impl< ilist_detail::compute_node_options< T, Options... >::type > | |
self_iterator | getIterator () |
const_self_iterator | getIterator () const |
reverse_self_iterator | getReverseIterator () |
const_reverse_self_iterator | getReverseIterator () const |
bool | isSentinel () const |
Check whether this is the sentinel node. | |
Public Member Functions inherited from llvm::ilist_detail::node_parent_access< NodeTy, ParentTy > | |
const ParentTy * | getParent () const |
ParentTy * | getParent () |
void | setParent (ParentTy *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 () |
VPUserID | getVPUserID () const |
void | addOperand (VPValue *Operand) |
unsigned | getNumOperands () const |
VPValue * | getOperand (unsigned N) const |
void | setOperand (unsigned I, VPValue *New) |
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 (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. | |
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 () |
Returns true if the value has more than one unique user. | |
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 () |
Returns the underlying IR value, if this VPValue is defined outside the scope of VPlan. | |
const Value * | getLiveInIRValue () const |
bool | isDefinedOutsideVectorRegions () const |
Returns true if the VPValue is defined outside any vector regions, i.e. | |
void | setUnderlyingValue (Value *Val) |
Static Public Member Functions | |
static bool | classof (const VPRecipeBase *R) |
static bool | classof (const VPUser *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) |
Protected Member Functions | |
void | transferFlags (VPRecipeWithIRFlags &Other) |
template<typename IterT > | |
VPRecipeWithIRFlags (const unsigned char SC, IterT Operands, GEPFlagsTy GEPFlags, DebugLoc DL={}) | |
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< T, 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, VPUserID ID) | |
VPUser (std::initializer_list< VPValue * > Operands, VPUserID ID) | |
template<typename IterT > | |
VPUser (iterator_range< IterT > Operands, VPUserID ID) | |
Protected Member Functions inherited from llvm::VPValue | |
VPValue (const unsigned char SC, Value *UV=nullptr, VPDef *Def=nullptr) | |
Additional Inherited Members | |
Public Types inherited from llvm::VPDef | |
using | VPRecipeTy = enum { VPBranchOnMaskSC, VPDerivedIVSC, VPExpandSCEVSC, VPInstructionSC, VPInterleaveSC, VPReductionEVLSC, VPReductionSC, VPReplicateSC, VPScalarCastSC, VPScalarIVStepsSC, VPVectorPointerSC, VPWidenCallSC, VPWidenCanonicalIVSC, VPWidenCastSC, VPWidenGEPSC, VPWidenLoadEVLSC, VPWidenLoadSC, VPWidenStoreEVLSC, VPWidenStoreSC, VPWidenSC, VPWidenSelectSC, VPBlendSC, VPWidenPHISC, VPPredInstPHISC, VPCanonicalIVPHISC, VPActiveLaneMaskPHISC, VPEVLBasedIVPHISC, VPFirstOrderRecurrencePHISC, VPWidenIntOrFpInductionSC, VPWidenPointerInductionSC, VPReductionPHISC, VPFirstPHISC=VPWidenPHISC, VPFirstHeaderPHISC=VPCanonicalIVPHISC, VPLastHeaderPHISC=VPReductionPHISC, VPLastPHISC=VPReductionPHISC, } |
An enumeration for keeping track of the concrete subclass of VPRecipeBase that is actually instantiated. | |
Public Types inherited from llvm::VPUser | |
enum class | VPUserID { Recipe , LiveOut } |
Subclass identifier (for isa/dyn_cast). More... | |
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< T, Options... >::type > | |
using | self_iterator = typename ilist_select_iterator_type< OptionsT::has_iterator_bits, ilist_detail::compute_node_options< T, Options... >::type, false, false >::type |
using | const_self_iterator = typename ilist_select_iterator_type< OptionsT::has_iterator_bits, ilist_detail::compute_node_options< T, Options... >::type, false, true >::type |
using | reverse_self_iterator = typename ilist_select_iterator_type< OptionsT::has_iterator_bits, ilist_detail::compute_node_options< T, Options... >::type, true, false >::type |
using | const_reverse_self_iterator = typename ilist_select_iterator_type< OptionsT::has_iterator_bits, ilist_detail::compute_node_options< T, Options... >::type, true, true >::type |
Protected Attributes inherited from llvm::VPValue | |
Value * | UnderlyingVal |
VPDef * | Def |
Pointer to the VPDef that defines this VPValue. | |
|
inline |
Definition at line 1046 of file VPlan.h.
References AllFlags, CmpPredicate, DisjointFlags, ExactFlags, FMFs, GEP, GEPFlags, I, llvm::VPRecipeWithIRFlags::DisjointFlagsTy::IsDisjoint, llvm::VPRecipeWithIRFlags::GEPFlagsTy::IsInBounds, NonNegFlags, Operands, and WrapFlags.
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineprotected |
|
inlinestatic |
|
inline |
Drop all poison-generating flags.
Definition at line 1122 of file VPlan.h.
References DisjointFlags, ExactFlags, FMFs, GEPFlags, llvm::VPRecipeWithIRFlags::WrapFlagsTy::HasNSW, llvm::VPRecipeWithIRFlags::WrapFlagsTy::HasNUW, llvm::VPRecipeWithIRFlags::DisjointFlagsTy::IsDisjoint, llvm::VPRecipeWithIRFlags::GEPFlagsTy::IsInBounds, NonNegFlags, and WrapFlags.
FastMathFlags VPRecipeWithIRFlags::getFastMathFlags | ( | ) | const |
Definition at line 310 of file VPlanRecipes.cpp.
References assert(), FMFs, llvm::FastMathFlags::setAllowContract(), llvm::FastMathFlags::setAllowReassoc(), llvm::FastMathFlags::setAllowReciprocal(), llvm::FastMathFlags::setApproxFunc(), llvm::FastMathFlags::setNoInfs(), llvm::FastMathFlags::setNoNaNs(), and llvm::FastMathFlags::setNoSignedZeros().
Referenced by llvm::VPScalarIVStepsRecipe::clone(), llvm::VPInstruction::execute(), llvm::VPScalarIVStepsRecipe::execute(), and printFlags().
|
inline |
Definition at line 1189 of file VPlan.h.
References assert(), and CmpPredicate.
Referenced by llvm::VPWidenRecipe::computeCost(), llvm::VPWidenRecipe::execute(), and printFlags().
|
inline |
Returns true if the recipe has fast-math flags.
Definition at line 1202 of file VPlan.h.
Referenced by llvm::VPScalarIVStepsRecipe::clone(), llvm::VPInstruction::execute(), and llvm::VPScalarIVStepsRecipe::execute().
|
inline |
Definition at line 1212 of file VPlan.h.
References assert(), llvm::VPRecipeWithIRFlags::WrapFlagsTy::HasNSW, and WrapFlags.
|
inline |
Definition at line 1206 of file VPlan.h.
References assert(), llvm::VPRecipeWithIRFlags::WrapFlagsTy::HasNUW, and WrapFlags.
|
inline |
Definition at line 1218 of file VPlan.h.
References assert(), DisjointFlags, and llvm::VPRecipeWithIRFlags::DisjointFlagsTy::IsDisjoint.
|
inline |
Definition at line 1195 of file VPlan.h.
References assert(), GEPFlags, and llvm::VPRecipeWithIRFlags::GEPFlagsTy::IsInBounds.
Referenced by llvm::VPVectorPointerRecipe::clone(), and llvm::VPWidenGEPRecipe::execute().
void VPRecipeWithIRFlags::printFlags | ( | raw_ostream & | O | ) | const |
Definition at line 1002 of file VPlanRecipes.cpp.
References DisjointFlags, ExactFlags, GEPFlags, getFastMathFlags(), llvm::VPUser::getNumOperands(), getPredicate(), llvm::CmpInst::getPredicateName(), llvm::VPRecipeWithIRFlags::WrapFlagsTy::HasNSW, llvm::VPRecipeWithIRFlags::WrapFlagsTy::HasNUW, llvm::VPRecipeWithIRFlags::DisjointFlagsTy::IsDisjoint, llvm::VPRecipeWithIRFlags::GEPFlagsTy::IsInBounds, NonNegFlags, llvm::FastMathFlags::print(), and WrapFlags.
Referenced by llvm::VPInstruction::print(), llvm::VPWidenRecipe::print(), llvm::VPWidenCastRecipe::print(), llvm::VPWidenGEPRecipe::print(), and llvm::VPReplicateRecipe::print().
|
inline |
Set the IR flags for I
.
Definition at line 1153 of file VPlan.h.
References DisjointFlags, ExactFlags, FMFs, GEPFlags, llvm::VPRecipeWithIRFlags::WrapFlagsTy::HasNSW, llvm::VPRecipeWithIRFlags::WrapFlagsTy::HasNUW, I, llvm::GEPNoWrapFlags::inBounds(), llvm::VPRecipeWithIRFlags::DisjointFlagsTy::IsDisjoint, llvm::VPRecipeWithIRFlags::GEPFlagsTy::IsInBounds, llvm::GEPNoWrapFlags::none(), NonNegFlags, and WrapFlags.
Referenced by llvm::VPWidenRecipe::execute(), and llvm::InnerLoopVectorizer::scalarizeInstruction().
|
inlineprotected |
unsigned llvm::VPRecipeWithIRFlags::AllFlags |
Definition at line 1028 of file VPlan.h.
Referenced by transferFlags(), and VPRecipeWithIRFlags().
CmpInst::Predicate llvm::VPRecipeWithIRFlags::CmpPredicate |
Definition at line 1021 of file VPlan.h.
Referenced by getPredicate(), and VPRecipeWithIRFlags().
DisjointFlagsTy llvm::VPRecipeWithIRFlags::DisjointFlags |
Definition at line 1023 of file VPlan.h.
Referenced by dropPoisonGeneratingFlags(), isDisjoint(), printFlags(), setFlags(), and VPRecipeWithIRFlags().
ExactFlagsTy llvm::VPRecipeWithIRFlags::ExactFlags |
Definition at line 1024 of file VPlan.h.
Referenced by dropPoisonGeneratingFlags(), printFlags(), setFlags(), and VPRecipeWithIRFlags().
FastMathFlagsTy llvm::VPRecipeWithIRFlags::FMFs |
Definition at line 1027 of file VPlan.h.
Referenced by dropPoisonGeneratingFlags(), getFastMathFlags(), setFlags(), and VPRecipeWithIRFlags().
GEPFlagsTy llvm::VPRecipeWithIRFlags::GEPFlags |
Definition at line 1025 of file VPlan.h.
Referenced by dropPoisonGeneratingFlags(), isInBounds(), printFlags(), setFlags(), and VPRecipeWithIRFlags().
NonNegFlagsTy llvm::VPRecipeWithIRFlags::NonNegFlags |
Definition at line 1026 of file VPlan.h.
Referenced by dropPoisonGeneratingFlags(), printFlags(), setFlags(), and VPRecipeWithIRFlags().
WrapFlagsTy llvm::VPRecipeWithIRFlags::WrapFlags |
Definition at line 1022 of file VPlan.h.
Referenced by dropPoisonGeneratingFlags(), hasNoSignedWrap(), hasNoUnsignedWrap(), printFlags(), setFlags(), and VPRecipeWithIRFlags().