LLVM 20.0.0git
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
llvm::VPBasicBlock Class Reference

VPBasicBlock serves as the leaf of the Hierarchical Control-Flow Graph. More...

#include "Transforms/Vectorize/VPlan.h"

Inheritance diagram for llvm::VPBasicBlock:
Inheritance graph
[legend]

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 (const Twine &Name="", VPRecipeBase *Recipe=nullptr)
 
 ~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 VPRecipeBasefront () const
 
VPRecipeBasefront ()
 
const VPRecipeBaseback () const
 
VPRecipeBaseback ()
 
RecipeListTygetRecipeList ()
 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< iteratorphis ()
 Returns an iterator range over the PHI-like recipes in the block.
 
void dropAllReferences (VPValue *NewValue) override
 Replace all operands of VPUsers in the block with NewValue and also replaces all uses of VPValues defined in the block with NewValue.
 
VPBasicBlocksplitAt (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.
 
VPRegionBlockgetEnclosingLoopRegion ()
 
const VPRegionBlockgetEnclosingLoopRegion () const
 
void print (raw_ostream &O, const Twine &Indent, VPSlotTracker &SlotTracker) const override
 Print this VPBsicBlock to O, prefixing all lines with Indent.
 
VPRecipeBasegetTerminator ()
 If the block has multiple successors, return the branch recipe terminating the block.
 
const VPRecipeBasegetTerminator () const
 
bool isExiting () const
 Returns true if the block is exiting it's parent region.
 
VPBasicBlockclone () 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
 
VPRegionBlockgetParent ()
 
const VPRegionBlockgetParent () const
 
VPlangetPlan ()
 
const VPlangetPlan () const
 
void setPlan (VPlan *ParentPlan)
 Sets the pointer of the plan containing the block.
 
void setParent (VPRegionBlock *P)
 
const VPBasicBlockgetEntryBasicBlock () const
 
VPBasicBlockgetEntryBasicBlock ()
 
const VPBasicBlockgetExitingBasicBlock () const
 
VPBasicBlockgetExitingBasicBlock ()
 
const VPBlocksTygetSuccessors () const
 
VPBlocksTygetSuccessors ()
 
iterator_range< VPBlockBase ** > successors ()
 
iterator_range< VPBlockBase ** > predecessors ()
 
const VPBlocksTygetPredecessors () const
 
VPBlocksTygetPredecessors ()
 
VPBlockBasegetSingleSuccessor () const
 
VPBlockBasegetSinglePredecessor () const
 
size_t getNumSuccessors () const
 
size_t getNumPredecessors () const
 
VPBlockBasegetEnclosingBlockWithSuccessors ()
 An Enclosing Block of a block B is any block containing B, including B itself.
 
VPBlockBasegetEnclosingBlockWithPredecessors ()
 
const VPBlocksTygetHierarchicalSuccessors ()
 
VPBlockBasegetSingleHierarchicalSuccessor ()
 
const VPBlocksTygetHierarchicalPredecessors ()
 
VPBlockBasegetSingleHierarchicalPredecessor ()
 
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.
 
virtual void dropAllReferences (VPValue *NewValue)=0
 Replace all operands of VPUsers in the block with NewValue and also replaces all uses of VPValues defined in the block with NewValue.
 
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 VPBlockBaseclone ()=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.
 
- Static Public Member Functions inherited from llvm::VPBlockBase
static void deleteCFG (VPBlockBase *Entry)
 Delete all blocks reachable from a given VPBlockBase, inclusive.
 

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.
 

Detailed Description

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 3470 of file VPlan.h.

Member Typedef Documentation

◆ const_iterator

Definition at line 3495 of file VPlan.h.

◆ const_reverse_iterator

Definition at line 3497 of file VPlan.h.

◆ iterator

Instruction iterators...

Definition at line 3494 of file VPlan.h.

◆ RecipeListTy

Definition at line 3472 of file VPlan.h.

◆ reverse_iterator

Definition at line 3496 of file VPlan.h.

Constructor & Destructor Documentation

◆ VPBasicBlock() [1/2]

llvm::VPBasicBlock::VPBasicBlock ( const unsigned char  BlockSC,
const Twine Name = "" 
)
inlineprotected

Definition at line 3478 of file VPlan.h.

◆ VPBasicBlock() [2/2]

llvm::VPBasicBlock::VPBasicBlock ( const Twine Name = "",
VPRecipeBase Recipe = nullptr 
)
inline

Definition at line 3482 of file VPlan.h.

References appendRecipe().

◆ ~VPBasicBlock()

llvm::VPBasicBlock::~VPBasicBlock ( )
inlineoverride

Definition at line 3488 of file VPlan.h.

References llvm::iplist_impl< IntrusiveListT, TraitsT >::pop_back(), and Recipes.

Member Function Documentation

◆ appendRecipe()

void llvm::VPBasicBlock::appendRecipe ( VPRecipeBase Recipe)
inline

Augment the existing recipes of a VPBasicBlock with an additional Recipe as the last recipe.

Definition at line 3542 of file VPlan.h.

References end(), and insert().

Referenced by llvm::vputils::getOrCreateVPValueForSCEVExpr(), llvm::VPlanTransforms::optimizeForVFAndUF(), llvm::VPlanTransforms::truncateToMinimalBitwidths(), and VPBasicBlock().

◆ back() [1/2]

VPRecipeBase & llvm::VPBasicBlock::back ( )
inline

Definition at line 3517 of file VPlan.h.

References Recipes.

◆ back() [2/2]

const VPRecipeBase & llvm::VPBasicBlock::back ( ) const
inline

Definition at line 3516 of file VPlan.h.

References Recipes.

Referenced by hasConditionalTerminator(), and llvm::VPlanTransforms::optimizeForVFAndUF().

◆ begin() [1/2]

iterator llvm::VPBasicBlock::begin ( )
inline

Recipe iterator methods.

Definition at line 3502 of file VPlan.h.

References Recipes.

Referenced by llvm::InnerLoopVectorizer::createInductionResumeVPValues(), llvm::VPlan::getCanonicalIV(), getFirstNonPhi(), and phis().

◆ begin() [2/2]

const_iterator llvm::VPBasicBlock::begin ( ) const
inline

Definition at line 3503 of file VPlan.h.

References Recipes.

◆ classof()

static bool llvm::VPBasicBlock::classof ( const VPBlockBase V)
inlinestatic

Method to support type inquiry through isa, cast, and dyn_cast.

Definition at line 3528 of file VPlan.h.

◆ clone()

VPBasicBlock * llvm::VPBasicBlock::clone ( )
inlineoverridevirtual

Clone the current block and it's recipes, without updating the operands of the cloned recipes.

Implements llvm::VPBlockBase.

Reimplemented in llvm::VPIRBasicBlock.

Definition at line 3590 of file VPlan.h.

References llvm::VPBlockBase::getName().

◆ connectToPredecessors()

void VPBasicBlock::connectToPredecessors ( VPTransformState::CFGState CFG)
protected

◆ cost()

InstructionCost VPBasicBlock::cost ( ElementCount  VF,
VPCostContext Ctx 
)
overridevirtual

Return the cost of this VPBasicBlock.

Implements llvm::VPBlockBase.

Definition at line 765 of file VPlan.cpp.

References llvm::VPTransformState::VF.

◆ dropAllReferences()

void VPBasicBlock::dropAllReferences ( VPValue NewValue)
overridevirtual

Replace all operands of VPUsers in the block with NewValue and also replaces all uses of VPValues defined in the block with NewValue.

Implements llvm::VPBlockBase.

Definition at line 516 of file VPlan.cpp.

References I.

◆ empty()

bool llvm::VPBasicBlock::empty ( ) const
inline

◆ end() [1/2]

iterator llvm::VPBasicBlock::end ( )
inline

◆ end() [2/2]

const_iterator llvm::VPBasicBlock::end ( ) const
inline

Definition at line 3505 of file VPlan.h.

References Recipes.

◆ execute()

void VPBasicBlock::execute ( VPTransformState State)
overridevirtual

◆ executeRecipes()

void VPBasicBlock::executeRecipes ( VPTransformState State,
BasicBlock BB 
)
protected

Execute the recipes in the IR basic block BB.

Definition at line 526 of file VPlan.cpp.

References llvm::VPTransformState::CFG, llvm::dbgs(), execute(), llvm::Value::getName(), getName(), LLVM_DEBUG, and llvm::VPTransformState::CFGState::PrevVPBB.

◆ front() [1/2]

VPRecipeBase & llvm::VPBasicBlock::front ( )
inline

Definition at line 3515 of file VPlan.h.

References Recipes.

◆ front() [2/2]

const VPRecipeBase & llvm::VPBasicBlock::front ( ) const
inline

Definition at line 3514 of file VPlan.h.

References Recipes.

◆ getEnclosingLoopRegion() [1/2]

VPRegionBlock * VPBasicBlock::getEnclosingLoopRegion ( )

Definition at line 566 of file VPlan.cpp.

References getEnclosingLoopRegionForRegion(), and getParent().

Referenced by hoistPreviousBeforeFORUsers().

◆ getEnclosingLoopRegion() [2/2]

const VPRegionBlock * VPBasicBlock::getEnclosingLoopRegion ( ) const

Definition at line 570 of file VPlan.cpp.

References getEnclosingLoopRegionForRegion(), and getParent().

◆ getFirstNonPhi()

VPBasicBlock::iterator VPBasicBlock::getFirstNonPhi ( )

Return the position of the first non-phi node recipe in the block.

Definition at line 213 of file VPlan.cpp.

References begin(), and end().

Referenced by llvm::VPlanTransforms::adjustFixedOrderRecurrences(), llvm::VPRecipeBuilder::createHeaderMask(), legalizeAndOptimizeInductions(), mergeReplicateRegionsIntoSuccessors(), phis(), and sinkScalarOperands().

◆ getRecipeList()

RecipeListTy & llvm::VPBasicBlock::getRecipeList ( )
inline

Returns a reference to the list of recipes.

Definition at line 3520 of file VPlan.h.

References Recipes.

Referenced by llvm::VPRecipeBase::eraseFromParent(), and llvm::VPRecipeBase::removeFromParent().

◆ getSublistAccess()

static RecipeListTy VPBasicBlock::* llvm::VPBasicBlock::getSublistAccess ( VPRecipeBase )
inlinestatic

Returns a pointer to a member of the recipe list.

Definition at line 3523 of file VPlan.h.

References Recipes.

◆ getTerminator() [1/2]

VPRecipeBase * VPBasicBlock::getTerminator ( )

If the block has multiple successors, return the branch recipe terminating the block.

If there are no or only a single successor, return nullptr;

Definition at line 602 of file VPlan.cpp.

References hasConditionalTerminator().

Referenced by addVPLaneMaskPhiAndUpdateExitBranch().

◆ getTerminator() [2/2]

const VPRecipeBase * VPBasicBlock::getTerminator ( ) const

Definition at line 608 of file VPlan.cpp.

References hasConditionalTerminator().

◆ insert()

void llvm::VPBasicBlock::insert ( VPRecipeBase Recipe,
iterator  InsertPt 
)
inline

◆ isExiting()

bool VPBasicBlock::isExiting ( ) const

Returns true if the block is exiting it's parent region.

Definition at line 614 of file VPlan.cpp.

References getParent().

Referenced by hasConditionalTerminator().

◆ phis()

iterator_range< iterator > llvm::VPBasicBlock::phis ( )
inline

◆ print() [1/3]

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

Print plain-text dump of this VPlan to O.

Definition at line 668 of file VPlan.h.

◆ print() [2/3]

void VPBasicBlock::print ( raw_ostream O,
const Twine Indent,
VPSlotTracker SlotTracker 
) const
overridevirtual

Print this VPBsicBlock to O, prefixing all lines with Indent.

SlotTracker 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.

Definition at line 631 of file VPlan.cpp.

References getName(), and llvm::VPDef::print().

◆ print() [3/3]

virtual void llvm::VPBlockBase::print ( raw_ostream O,
const Twine Indent,
VPSlotTracker SlotTracker 
) const
virtual

Print plain-text dump of this VPBlockBase to O, prefixing all lines with Indent.

SlotTracker 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]

reverse_iterator llvm::VPBasicBlock::rbegin ( )
inline

Definition at line 3507 of file VPlan.h.

References Recipes.

◆ rbegin() [2/2]

const_reverse_iterator llvm::VPBasicBlock::rbegin ( ) const
inline

Definition at line 3508 of file VPlan.h.

References Recipes.

◆ rend() [1/2]

reverse_iterator llvm::VPBasicBlock::rend ( )
inline

Definition at line 3509 of file VPlan.h.

References Recipes.

◆ rend() [2/2]

const_reverse_iterator llvm::VPBasicBlock::rend ( ) const
inline

Definition at line 3510 of file VPlan.h.

References Recipes.

◆ size()

size_t llvm::VPBasicBlock::size ( ) const
inline

Definition at line 3512 of file VPlan.h.

References Recipes.

◆ splitAt()

VPBasicBlock * 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.

Returns the new block.

Definition at line 538 of file VPlan.cpp.

References assert(), llvm::BasicBlock::end(), getName(), llvm::VPBlockUtils::insertBlockAfter(), llvm::make_early_inc_range(), llvm::make_range(), llvm::SplitBlock(), and llvm::successors().

Referenced by addReplicateRegions().

Member Data Documentation

◆ Recipes

RecipeListTy llvm::VPBasicBlock::Recipes
protected

The VPRecipes held in the order of output instructions to generate.

Definition at line 3476 of file VPlan.h.

Referenced by back(), begin(), llvm::VPIRBasicBlock::clone(), empty(), end(), front(), getRecipeList(), getSublistAccess(), insert(), rbegin(), rend(), size(), and ~VPBasicBlock().


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