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

VPRegionBlock represents a collection of VPBasicBlocks and VPRegionBlocks which form a Single-Entry-Single-Exiting subgraph of the output IR CFG. More...

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

Public Member Functions
~VPRegionBlock () override=default
const VPBlockBase * getEntry () const
VPBlockBase * getEntry ()
void setEntry (VPBlockBase *EntryBlock)
Set EntryBlock as the entry VPBlockBase of this VPRegionBlock.
const VPBlockBase * getExiting () const
VPBlockBase * getExiting ()
void setExiting (VPBlockBase *ExitingBlock)
Set ExitingBlock as the exiting VPBlockBase of this VPRegionBlock.
VPBasicBlock * getPreheaderVPBB ()
Returns the pre-header VPBasicBlock of the loop region.
bool isReplicator () const
An indicator whether this region is to generate multiple replicated instances of output IR corresponding to its VPBlockBases.
void execute (VPTransformState *State) override
The method which generates the output IR instructions that correspond to this VPRegionBlock, thereby "executing" the VPlan.
InstructionCost cost (ElementCount VF, VPCostContext &Ctx) override
Return the cost of the block.
void print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const override
Print this VPRegionBlock to O (recursively), prefixing all lines with Indent.
VPRegionBlock * clone () override
Clone all blocks in the single-entry single-exit region of the block and their recipes without updating the operands of the cloned recipes.
void dissolveToCFGLoop ()
Remove the current region from its VPlan, connecting its predecessor to its entry, and its exiting block to its successor.
VPCanonicalIVPHIRecipe * getCanonicalIV ()
Returns the canonical induction recipe of the region.
const VPCanonicalIVPHIRecipe * getCanonicalIV () const
Type * getCanonicalIVType ()
Return the type of the canonical IV for loop regions.
const Type * getCanonicalIVType () const
void print (raw_ostream &O) const
Print plain-text dump of this VPlan to O.
Public Member Functions inherited from llvm::VPBlockBase
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
bool hasPredecessors () const
Returns true if this block has any predecessors.
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 swapPredecessors ()
Swap predecessors of the block.
void swapSuccessors ()
Swap successors of the block. The block must have exactly 2 successors.
unsigned getIndexForPredecessor (const VPBlockBase *Pred) const
Returns the index for Pred in the blocks predecessors list.
unsigned getIndexForSuccessor (const VPBlockBase *Succ) const
Returns the index for Succ in the blocks successor list.
void printAsOperand (raw_ostream &OS, bool PrintType=false) const
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().
Static Public Member Functions
static bool classof (const VPBlockBase *V)
Method to support type inquiry through isa, cast, and dyn_cast.
Additional Inherited Members
Public Types inherited from llvm::VPBlockBase
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 *>
Protected Member Functions inherited from llvm::VPBlockBase
VPBlockBase (const unsigned char SC, const std::string &N)

VPRegionBlock represents a collection of VPBasicBlocks and VPRegionBlocks which form a Single-Entry-Single-Exiting subgraph of the output IR CFG.

A VPRegionBlock may indicate that its contents are to be replicated several times. This is designed to support predicated scalarization, in which a scalar if-then code structure needs to be generated VF * UF times. Having this replication indicator helps to keep a single model for multiple candidate VF's. The actual replication takes place only once the desired VF and UF have been determined.

Definition at line 4154 of file VPlan.h.

llvm::VPRegionBlock::~VPRegionBlock ( ) overridedefault

classof()

clone()

cost()

Return the cost of the block.

Implements llvm::VPBlockBase.

Definition at line 789 of file VPlan.cpp.

References assert(), llvm::Block, llvm::cast(), llvm::dbgs(), llvm::ForceTargetInstructionCost, getEntry(), llvm::InstructionCost::getInvalid(), llvm::VPBlockBase::getSuccessors(), InstructionCost, isReplicator(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable(), llvm::ElementCount::isVector(), LLVM_DEBUG, llvm::vp_depth_first_shallow(), and llvm::VPBlockBase::VPBlockBase().

Referenced by llvm::VPlan::cost().

dissolveToCFGLoop()

void VPRegionBlock::dissolveToCFGLoop ( )

Remove the current region from its VPlan, connecting its predecessor to its entry, and its exiting block to its successor.

Definition at line 832 of file VPlan.cpp.

References assert(), llvm::cast(), llvm::VPBlockUtils::connectBlocks(), llvm::VPBuilder::createScalarPhi(), llvm::VPBlockUtils::disconnectBlocks(), llvm::dyn_cast(), getEntry(), getExiting(), llvm::VPBlockBase::getParent(), llvm::VPBlockBase::getPlan(), llvm::VPBlockBase::getSinglePredecessor(), llvm::VPBlockBase::getSingleSuccessor(), llvm::VPValue::replaceAllUsesWith(), llvm::vp_depth_first_shallow(), and llvm::VPBlockBase::VPBlockBase().

execute()

getCanonicalIV() [1/2]

Returns the canonical induction recipe of the region.

Definition at line 4252 of file VPlan.h.

References llvm::VPBasicBlock::begin(), llvm::cast(), llvm::VPBasicBlock::empty(), llvm::VPBlockBase::getEntryBasicBlock(), and llvm::VPBlockBase::getSingleSuccessor().

Referenced by llvm::VPlanTransforms::addActiveLaneMask(), llvm::VPlanTransforms::addExplicitVectorLength(), addVPLaneMaskPhiAndUpdateExitBranch(), createScalarIVSteps(), findHeaderMask(), getCanonicalIV(), getCanonicalIVType(), getCanonicalIVType(), llvm::VPlanTransforms::handleMaxMinNumReductions(), isConditionTrueViaVFAndUF(), llvm::vputils::isHeaderMask(), llvm::VPlanTransforms::narrowInterleaveGroups(), optimizeEarlyExitInductionUser(), preparePlanForEpilogueVectorLoop(), preparePlanForMainVectorLoop(), and removeRedundantCanonicalIVs().

getCanonicalIV() [2/2]

getCanonicalIVType() [1/2]

Type * llvm::VPRegionBlock::getCanonicalIVType ( ) inline

getCanonicalIVType() [2/2]

const Type * llvm::VPRegionBlock::getCanonicalIVType ( ) const inline

getEntry() [1/2]

getEntry() [2/2]

Definition at line 4190 of file VPlan.h.

References llvm::VPBlockBase::VPBlockBase().

Referenced by llvm::VPlanTransforms::adjustFixedOrderRecurrences(), clone(), collectComplementaryPredicatedMemOps(), llvm::collectEphemeralRecipesForVPlan(), llvm::LoopVectorizationPlanner::computeBestVF(), cost(), dissolveToCFGLoop(), hasReplicatorRegion(), llvm::VPlanTransforms::hoistInvariantLoads(), licm(), llvm::VPlanTransforms::materializePacksAndUnpacks(), llvm::VPlanTransforms::narrowInterleaveGroups(), narrowToSingleScalarRecipes(), planContainsAdditionalSimplifications(), llvm::VPlanTransforms::replicateByVF(), llvm::LoopVectorizationPlanner::selectInterleaveCount(), simplifyBlends(), simplifyBranchConditionForVFAndUF(), transformRecipestoEVLRecipes(), llvm::VPRecipeBuilder::tryToCreateWidenRecipe(), tryToReplaceALMWithWideALM(), and willGenerateVectors().

getExiting() [1/2]

VPBlockBase * llvm::VPRegionBlock::getExiting ( ) inline

getExiting() [2/2]

getPreheaderVPBB()

VPBasicBlock * llvm::VPRegionBlock::getPreheaderVPBB ( ) inline

isReplicator()

bool llvm::VPRegionBlock::isReplicator ( ) const inline

print() [1/2]

print() [2/2]

setEntry()

void llvm::VPRegionBlock::setEntry ( VPBlockBase * EntryBlock) inline

setExiting()

void llvm::VPRegionBlock::setExiting ( VPBlockBase * ExitingBlock) inline

VPlan


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