LLVM: llvm::VPBasicBlock Class Reference (original) (raw)
VPBasicBlock serves as the leaf of the Hierarchical Control-Flow Graph. More...
#include "[Transforms/Vectorize/VPlan.h](VPlan%5F8h%5Fsource.html)"
Public Types | |
---|---|
using | RecipeListTy = iplist< VPRecipeBase > |
using | iterator = RecipeListTy::iterator |
Instruction iterators... | |
using | const_iterator = RecipeListTy::const_iterator |
using | reverse_iterator = RecipeListTy::reverse_iterator |
using | const_reverse_iterator = RecipeListTy::const_reverse_iterator |
![]() |
|
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 | |
---|---|
~VPBasicBlock () override | |
iterator | begin () |
Recipe iterator methods. | |
const_iterator | begin () const |
iterator | end () |
const_iterator | end () const |
reverse_iterator | rbegin () |
const_reverse_iterator | rbegin () const |
reverse_iterator | rend () |
const_reverse_iterator | rend () const |
size_t | size () const |
bool | empty () const |
const VPRecipeBase & | front () const |
VPRecipeBase & | front () |
const VPRecipeBase & | back () const |
VPRecipeBase & | back () |
RecipeListTy & | getRecipeList () |
Returns a reference to the list of recipes. | |
void | insert (VPRecipeBase *Recipe, iterator InsertPt) |
void | appendRecipe (VPRecipeBase *Recipe) |
Augment the existing recipes of a VPBasicBlock with an additional Recipe as the last recipe. | |
void | execute (VPTransformState *State) override |
The method which generates the output IR instructions that correspond to this VPBasicBlock, thereby "executing" the VPlan. | |
InstructionCost | cost (ElementCount VF, VPCostContext &Ctx) override |
Return the cost of this VPBasicBlock. | |
iterator | getFirstNonPhi () |
Return the position of the first non-phi node recipe in the block. | |
iterator_range< iterator > | phis () |
Returns an iterator range over the PHI-like recipes in the block. | |
VPBasicBlock * | splitAt (iterator SplitAt) |
Split current block at SplitAt by inserting a new block between the current block and its successors and moving all recipes starting at SplitAt to the new block. | |
VPRegionBlock * | getEnclosingLoopRegion () |
const VPRegionBlock * | getEnclosingLoopRegion () const |
void | print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const override |
Print this VPBsicBlock to O, prefixing all lines with Indent. | |
VPRecipeBase * | getTerminator () |
If the block has multiple successors, return the branch recipe terminating the block. | |
const VPRecipeBase * | getTerminator () const |
bool | isExiting () const |
Returns true if the block is exiting it's parent region. | |
VPBasicBlock * | clone () override |
Clone the current block and it's recipes, without updating the operands of the cloned recipes. | |
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. | |
![]() |
|
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. | |
Static Public Member Functions | |
---|---|
static RecipeListTy VPBasicBlock::* | getSublistAccess (VPRecipeBase *) |
Returns a pointer to a member of the recipe list. | |
static bool | classof (const VPBlockBase *V) |
Method to support type inquiry through isa, cast, and dyn_cast. | |
Protected Member Functions | |
---|---|
VPBasicBlock (const unsigned char BlockSC, const Twine &Name="") | |
void | executeRecipes (VPTransformState *State, BasicBlock *BB) |
Execute the recipes in the IR basic block BB. | |
void | connectToPredecessors (VPTransformState::CFGState &CFG) |
Connect the VPBBs predecessors' in the VPlan CFG to the IR basic block generated for this VPBB. | |
![]() |
|
VPBlockBase (const unsigned char SC, const std::string &N) | |
Protected Attributes | |
---|---|
RecipeListTy | Recipes |
The VPRecipes held in the order of output instructions to generate. | |
VPBasicBlock serves as the leaf of the Hierarchical Control-Flow Graph.
It holds a sequence of zero or more VPRecipe's each representing a sequence of output IR instructions. All PHI-like recipes must come before any non-PHI recipes.
Definition at line 3536 of file VPlan.h.
◆ const_iterator
◆ const_reverse_iterator
◆ iterator
◆ RecipeListTy
◆ reverse_iterator
◆ ~VPBasicBlock()
llvm::VPBasicBlock::~VPBasicBlock ( ) | inlineoverride |
---|
◆ appendRecipe()
void llvm::VPBasicBlock::appendRecipe ( VPRecipeBase * Recipe) | inline |
---|
◆ back() [1/2]
◆ back() [2/2]
◆ begin() [1/2]
iterator llvm::VPBasicBlock::begin ( ) | inline |
---|
◆ begin() [2/2]
◆ classof()
Method to support type inquiry through isa, cast, and dyn_cast.
Definition at line 3597 of file VPlan.h.
◆ clone()
◆ connectToPredecessors()
Connect the VPBBs predecessors' in the VPlan CFG to the IR basic block generated for this VPBB.
Definition at line 415 of file VPlan.cpp.
References llvm::GenericDomTreeUpdater< DerivedT, DomTreeT, PostDomTreeT >::applyUpdates(), assert(), llvm::VPTransformState::CFG, llvm::BranchInst::Create(), llvm::dbgs(), DL, llvm::VPTransformState::CFGState::DTU, llvm::MachineBasicBlock::eraseFromParent(), llvm::VPBlockBase::getExitingBasicBlock(), llvm::VPBlockBase::getHierarchicalSuccessors(), llvm::Value::getName(), llvm::BasicBlock::getTerminator(), llvm::DominatorTreeBase< BasicBlock, false >::Insert, LLVM_DEBUG, and llvm::VPTransformState::CFGState::VPBB2IRBB.
◆ cost()
◆ empty()
bool llvm::VPBasicBlock::empty ( ) const | inline |
---|
◆ end() [1/2]
iterator llvm::VPBasicBlock::end ( ) | inline |
---|
◆ end() [2/2]
◆ execute()
The method which generates the output IR instructions that correspond to this VPBasicBlock, thereby "executing" the VPlan.
Implements llvm::VPBlockBase.
Reimplemented in llvm::VPIRBasicBlock.
Definition at line 480 of file VPlan.cpp.
References llvm::LoopBase< BlockT, LoopT >::addBasicBlockToLoop(), llvm::VPTransformState::Builder, llvm::VPTransformState::CFG, llvm::IRBuilderBase::CreateUnreachable(), llvm::VPTransformState::CurrentParentLoop, getParent(), llvm::VPTransformState::Lane, llvm::VPTransformState::LI, llvm::VPTransformState::CFGState::PrevBB, llvm::IRBuilderBase::SetInsertPoint(), and llvm::VPTransformState::CFGState::VPBB2IRBB.
Referenced by llvm::LoopVectorizationPlanner::executePlan(), and executeRecipes().
◆ executeRecipes()
◆ front() [1/2]
◆ front() [2/2]
◆ getEnclosingLoopRegion() [1/2]
◆ getEnclosingLoopRegion() [2/2]
◆ getFirstNonPhi()
◆ getRecipeList()
◆ getSublistAccess()
Returns a pointer to a member of the recipe list.
Definition at line 3592 of file VPlan.h.
References Recipes.
◆ getTerminator() [1/2]
◆ getTerminator() [2/2]
◆ insert()
◆ isExiting()
bool VPBasicBlock::isExiting | ( | ) | const |
---|
◆ phis()
Returns an iterator range over the PHI-like recipes in the block.
Definition at line 3624 of file VPlan.h.
References begin(), getFirstNonPhi(), and llvm::make_range().
Referenced by addExitUsersForFirstOrderRecurrences(), llvm::VPlanTransforms::adjustFixedOrderRecurrences(), llvm::VPlanTransforms::clearReductionWrapFlags(), collectAllHeaderMasks(), legalizeAndOptimizeInductions(), preparePlanForMainVectorLoop(), removeRedundantCanonicalIVs(), removeRedundantInductionCasts(), and llvm::VPlanTransforms::unrollByUF().
◆ print() [1/3]
void llvm::VPBlockBase::print ( raw_ostream & O) const | inline |
---|
Print plain-text dump of this VPlan to O
.
Definition at line 662 of file VPlan.h.
◆ print() [2/3]
◆ print() [3/3]
Print plain-text dump of this VPBlockBase to O
, prefixing all lines with Indent
.
[SlotTracker](classllvm%5F1%5F1SlotTracker.html "This class provides computation of slot numbers for LLVM Assembly writing.")
is used to print unnamed VPValue's using consequtive numbers.
Note that the numbering is applied to the whole VPlan, so printing individual blocks is consistent with the whole VPlan printing.
Implements llvm::VPBlockBase.
◆ rbegin() [1/2]
◆ rbegin() [2/2]
◆ rend() [1/2]
◆ rend() [2/2]
◆ size()
size_t llvm::VPBasicBlock::size ( ) const | inline |
---|
◆ splitAt()
◆ VPlan
◆ Recipes
The VPRecipes held in the order of output instructions to generate.
Definition at line 3551 of file VPlan.h.
Referenced by back(), begin(), empty(), end(), front(), getRecipeList(), getSublistAccess(), insert(), rbegin(), rend(), size(), and ~VPBasicBlock().
The documentation for this class was generated from the following files: