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: