LLVM 20.0.0git
|
A special type of VPBasicBlock that wraps an existing IR basic block. More...
#include "Transforms/Vectorize/VPlan.h"
Public Member Functions | |
VPIRBasicBlock (BasicBlock *IRBB) | |
~VPIRBasicBlock () override | |
void | execute (VPTransformState *State) override |
The method which generates the output IR instructions that correspond to this VPBasicBlock, thereby "executing" the VPlan. | |
VPIRBasicBlock * | clone () override |
Clone the current block and it's recipes, without updating the operands of the cloned recipes. | |
BasicBlock * | getIRBasicBlock () const |
Public Member Functions inherited from llvm::VPBasicBlock | |
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 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. | |
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. | |
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. | |
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 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 bool | classof (const VPBlockBase *V) |
static VPIRBasicBlock * | fromBasicBlock (BasicBlock *IRBB) |
Create a VPIRBasicBlock from IRBB containing VPIRInstructions for all instructions in IRBB , except its terminator which is managed in VPlan. | |
Static Public Member Functions inherited from llvm::VPBasicBlock | |
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. | |
Additional Inherited Members | |
Public Types inherited from llvm::VPBasicBlock | |
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 * > |
Protected Member Functions inherited from llvm::VPBasicBlock | |
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 inherited from llvm::VPBasicBlock | |
RecipeListTy | Recipes |
The VPRecipes held in the order of output instructions to generate. | |
A special type of VPBasicBlock that wraps an existing IR basic block.
Recipes of the block get added before the first non-phi instruction in the wrapped block. Note: At the moment, VPIRBasicBlock can only be used to wrap VPlan's preheader block.
|
inline |
|
inlinestatic |
|
inlineoverridevirtual |
Clone the current block and it's recipes, without updating the operands of the cloned recipes.
Reimplemented from llvm::VPBasicBlock.
Definition at line 3639 of file VPlan.h.
References llvm::VPBasicBlock::Recipes.
|
overridevirtual |
The method which generates the output IR instructions that correspond to this VPBasicBlock, thereby "executing" the VPlan.
Reimplemented from llvm::VPBasicBlock.
Definition at line 455 of file VPlan.cpp.
References assert(), llvm::VPTransformState::Builder, llvm::VPTransformState::CFG, llvm::IRBuilderBase::CreateBr(), llvm::VPTransformState::CFGState::PrevBB, llvm::IRBuilderBase::SetInsertPoint(), llvm::User::setOperand(), llvm::size(), and llvm::VPTransformState::CFGState::VPBB2IRBB.
|
static |
Create a VPIRBasicBlock from IRBB
containing VPIRInstructions for all instructions in IRBB
, except its terminator which is managed in VPlan.
Definition at line 843 of file VPlan.cpp.
References llvm::BasicBlock::begin(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::BasicBlock::getTerminator(), I, and llvm::make_range().
Referenced by llvm::VPlan::createInitialVPlan(), llvm::EpilogueVectorizerEpilogueLoop::emitMinimumVectorEpilogueIterCountCheck(), llvm::VPlanTransforms::handleUncountableEarlyExit(), introduceCheckBlockInVPlan(), replaceVPBBWithIRVPBB(), and llvm::VPlan::VPlan().
|
inline |