LLVM: llvm::VPBlockBase Class Reference (original) (raw)

VPBlockBase is the building block of the Hierarchical Control-Flow Graph. More...

#include "[Transforms/Vectorize/VPlan.h](VPlan%5F8h%5Fsource.html)"

Public Types
using VPBlockTy = enum { VPRegionBlockSC, VPBasicBlockSC, VPIRBasicBlockSC }
An enumeration for keeping track of the concrete subclass of VPBlockBase that are actually instantiated.
using VPBlocksTy = SmallVectorImpl< VPBlockBase * >
Public Member Functions
virtual ~VPBlockBase ()=default
const std::string & getName () const
void setName (const Twine &newName)
unsigned getVPBlockID () const
VPRegionBlock * getParent ()
const VPRegionBlock * getParent () const
VPlan * getPlan ()
const VPlan * getPlan () const
void setPlan (VPlan *ParentPlan)
Sets the pointer of the plan containing the block.
void setParent (VPRegionBlock *P)
const VPBasicBlock * getEntryBasicBlock () const
VPBasicBlock * getEntryBasicBlock ()
const VPBasicBlock * getExitingBasicBlock () const
VPBasicBlock * getExitingBasicBlock ()
const VPBlocksTy & getSuccessors () const
VPBlocksTy & getSuccessors ()
iterator_range< VPBlockBase ** > successors ()
iterator_range< VPBlockBase ** > predecessors ()
const VPBlocksTy & getPredecessors () const
VPBlocksTy & getPredecessors ()
VPBlockBase * getSingleSuccessor () const
VPBlockBase * getSinglePredecessor () const
size_t getNumSuccessors () const
size_t getNumPredecessors () const
VPBlockBase * getEnclosingBlockWithSuccessors ()
An Enclosing Block of a block B is any block containing B, including B itself.
VPBlockBase * getEnclosingBlockWithPredecessors ()
const VPBlocksTy & getHierarchicalSuccessors ()
VPBlockBase * getSingleHierarchicalSuccessor ()
const VPBlocksTy & getHierarchicalPredecessors ()
VPBlockBase * getSingleHierarchicalPredecessor ()
void setOneSuccessor (VPBlockBase *Successor)
Set a given VPBlockBase Successor as the single successor of this VPBlockBase.
void setTwoSuccessors (VPBlockBase *IfTrue, VPBlockBase *IfFalse)
Set two given VPBlockBases IfTrue and IfFalse to be the two successors of this VPBlockBase.
void setPredecessors (ArrayRef< VPBlockBase * > NewPreds)
Set each VPBasicBlock in NewPreds as predecessor of this VPBlockBase.
void setSuccessors (ArrayRef< VPBlockBase * > NewSuccs)
Set each VPBasicBlock in NewSuccss as successor of this VPBlockBase.
void clearPredecessors ()
Remove all the predecessor of this block.
void clearSuccessors ()
Remove all the successors of this block.
void swapSuccessors ()
Swap successors of the block. The block must have exactly 2 successors.
virtual void execute (VPTransformState *State)=0
The method which generates the output IR that correspond to this VPBlockBase, thereby "executing" the VPlan.
virtual InstructionCost cost (ElementCount VF, VPCostContext &Ctx)=0
Return the cost of the block.
bool isLegalToHoistInto ()
Return true if it is legal to hoist instructions into this block.
void printAsOperand (raw_ostream &OS, bool PrintType=false) const
virtual void print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const =0
Print plain-text dump of this VPBlockBase to O, prefixing all lines with Indent.
void print (raw_ostream &O) const
Print plain-text dump of this VPlan to O.
void printSuccessors (raw_ostream &O, const Twine &Indent) const
Print the successors of this block to O, prefixing all lines with Indent.
LLVM_DUMP_METHOD void dump () const
Dump this VPBlockBase to dbgs().
virtual VPBlockBase * clone ()=0
Clone the current block and it's recipes without updating the operands of the cloned recipes, including all blocks in the single-entry single-exit region for VPRegionBlocks.

VPBlockBase is the building block of the Hierarchical Control-Flow Graph.

A VPBlockBase can be either a VPBasicBlock or a VPRegionBlock.

Definition at line 397 of file VPlan.h.

VPBlocksTy

VPBlockTy

An enumeration for keeping track of the concrete subclass of VPBlockBase that are actually instantiated.

Values of this enumeration are kept in the SubclassID field of the VPBlockBase objects. They are used for concrete type identification.

Definition at line 474 of file VPlan.h.

~VPBlockBase()

virtual llvm::VPBlockBase::~VPBlockBase ( ) virtualdefault

clearPredecessors()

void llvm::VPBlockBase::clearPredecessors ( ) inline

clearSuccessors()

void llvm::VPBlockBase::clearSuccessors ( ) inline

clone()

virtual VPBlockBase * llvm::VPBlockBase::clone ( ) pure virtual

cost()

dump()

execute()

virtual void llvm::VPBlockBase::execute ( VPTransformState * State) pure virtual

getEnclosingBlockWithPredecessors()

VPBlockBase * VPBlockBase::getEnclosingBlockWithPredecessors ( )

getEnclosingBlockWithSuccessors()

VPBlockBase * VPBlockBase::getEnclosingBlockWithSuccessors ( )

getEntryBasicBlock() [1/2]

getEntryBasicBlock() [2/2]

Returns

the VPBasicBlock that is the entry of this VPBlockBase, recursively, if the latter is a VPRegionBlock. Otherwise, if this VPBlockBase is a VPBasicBlock, it is returned.

the VPBasicBlock that is the entry of Block, possibly indirectly.

Definition at line 158 of file VPlan.cpp.

References llvm::Block, and llvm::RegionBase< Tr >::getEntry().

Referenced by addCanonicalIVRecipes(), addExitUsersForFirstOrderRecurrences(), llvm::VPlanTransforms::adjustFixedOrderRecurrences(), llvm::VPlanTransforms::clearReductionWrapFlags(), collectAllHeaderMasks(), llvm::VPRecipeBuilder::createHeaderMask(), createScalarIVSteps(), llvm::LoopVectorizationPlanner::executePlan(), llvm::InnerLoopVectorizer::fixVectorizedLoop(), llvm::VPlan::getCanonicalIV(), legalizeAndOptimizeInductions(), preparePlanForEpilogueVectorLoop(), preparePlanForMainVectorLoop(), removeRedundantCanonicalIVs(), removeRedundantExpandSCEVRecipes(), removeRedundantInductionCasts(), sinkScalarOperands(), llvm::VPlanTransforms::tryAddExplicitVectorLength(), and llvm::VPlanTransforms::unrollByUF().

getExitingBasicBlock() [1/2]

getExitingBasicBlock() [2/2]

Returns

the VPBasicBlock that is the exiting this VPBlockBase, recursively, if the latter is a VPRegionBlock. Otherwise, if this VPBlockBase is a VPBasicBlock, it is returned.

the VPBasicBlock that is the exit of Block, possibly indirectly.

Definition at line 178 of file VPlan.cpp.

References llvm::Block.

Referenced by addCanonicalIVRecipes(), addVPLaneMaskPhiAndUpdateExitBranch(), llvm::VPBasicBlock::connectToPredecessors(), llvm::VPIRInstruction::execute(), llvm::VPlan::execute(), llvm::VPRegionBlock::getPreheaderVPBB(), llvm::VPlanTransforms::optimizeForVFAndUF(), and sinkScalarOperands().

getHierarchicalPredecessors()

const VPBlocksTy & llvm::VPBlockBase::getHierarchicalPredecessors ( ) inline

getHierarchicalSuccessors()

getName()

const std::string & llvm::VPBlockBase::getName ( ) const inline

getNumPredecessors()

size_t llvm::VPBlockBase::getNumPredecessors ( ) const inline

getNumSuccessors()

size_t llvm::VPBlockBase::getNumSuccessors ( ) const inline

getParent() [1/2]

getParent() [2/2]

getPlan() [1/2]

VPlan * VPBlockBase::getPlan ( )

getPlan() [2/2]

getPredecessors() [1/2]

VPBlocksTy & llvm::VPBlockBase::getPredecessors ( ) inline

getPredecessors() [2/2]

Definition at line 520 of file VPlan.h.

Referenced by cloneFrom(), collectUsersInExitBlocks(), llvm::VPBlockUtils::connectBlocks(), llvm::VPIRInstruction::execute(), getHierarchicalPredecessors(), llvm::VPBlockUtils::insertBlockAfter(), llvm::VPBlockUtils::insertBlockBefore(), llvm::VPBlockUtils::insertOnEdge(), llvm::VPIRInstruction::print(), llvm::VPBlockUtils::reassociateBlocks(), and llvm::VPRegionBlock::setEntry().

getSingleHierarchicalPredecessor()

VPBlockBase * llvm::VPBlockBase::getSingleHierarchicalPredecessor ( ) inline

getSingleHierarchicalSuccessor()

VPBlockBase * llvm::VPBlockBase::getSingleHierarchicalSuccessor ( ) inline

getSinglePredecessor()

VPBlockBase * llvm::VPBlockBase::getSinglePredecessor ( ) const inline

getSingleSuccessor()

VPBlockBase * llvm::VPBlockBase::getSingleSuccessor ( ) const inline

getSuccessors() [1/2]

VPBlocksTy & llvm::VPBlockBase::getSuccessors ( ) inline

getSuccessors() [2/2]

getVPBlockID()

unsigned llvm::VPBlockBase::getVPBlockID ( ) const inline

Returns

an ID for the concrete type of this object. This is used to implement the classof checks. This should not be used for any other purpose, as the values may change as LLVM evolves.

Definition at line 487 of file VPlan.h.

isLegalToHoistInto()

bool llvm::VPBlockBase::isLegalToHoistInto ( ) inline

Return true if it is legal to hoist instructions into this block.

Definition at line 641 of file VPlan.h.

predecessors()

print() [1/2]

void llvm::VPBlockBase::print ( raw_ostream & O) const inline

print() [2/2]

printAsOperand()

void llvm::VPBlockBase::printAsOperand ( raw_ostream & OS, bool PrintType = false ) const inline

printSuccessors()

Print the successors of this block to O, prefixing all lines with Indent.

Definition at line 619 of file VPlan.cpp.

setName()

void llvm::VPBlockBase::setName ( const Twine & newName) inline

setOneSuccessor()

void llvm::VPBlockBase::setOneSuccessor ( VPBlockBase * Successor) inline

setParent()

setPlan()

void VPBlockBase::setPlan ( VPlan * ParentPlan )

setPredecessors()

setSuccessors()

setTwoSuccessors()

successors()

swapSuccessors()

void llvm::VPBlockBase::swapSuccessors ( ) inline

VPBlockUtils


The documentation for this class was generated from the following files: