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
- 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 * >
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.
- 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
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.
- Protected Member Functions inherited from llvm::VPBlockBase
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: