LLVM 20.0.0git
|
Class that provides utilities for VPBlockBases in VPlan. More...
#include "Transforms/Vectorize/VPlan.h"
Public Member Functions | |
VPBlockUtils ()=delete | |
Static Public Member Functions | |
static void | insertBlockAfter (VPBlockBase *NewBlock, VPBlockBase *BlockPtr) |
Insert disconnected VPBlockBase NewBlock after BlockPtr . | |
static void | insertBlockBefore (VPBlockBase *NewBlock, VPBlockBase *BlockPtr) |
Insert disconnected block NewBlock before Blockptr . | |
static void | insertTwoBlocksAfter (VPBlockBase *IfTrue, VPBlockBase *IfFalse, VPBlockBase *BlockPtr) |
Insert disconnected VPBlockBases IfTrue and IfFalse after BlockPtr . | |
static void | connectBlocks (VPBlockBase *From, VPBlockBase *To, unsigned PredIdx=-1u, unsigned SuccIdx=-1u) |
Connect VPBlockBases From and To bi-directionally. | |
static void | disconnectBlocks (VPBlockBase *From, VPBlockBase *To) |
Disconnect VPBlockBases From and To bi-directionally. | |
static void | reassociateBlocks (VPBlockBase *Old, VPBlockBase *New) |
Reassociate all the blocks connected to Old so that they now point to New . | |
template<typename BlockTy , typename T > | |
static auto | blocksOnly (const T &Range) |
Return an iterator range over Range which only includes BlockTy blocks. | |
static void | insertOnEdge (VPBlockBase *From, VPBlockBase *To, VPBlockBase *BlockPtr) |
Inserts BlockPtr on the edge between From and To . | |
|
delete |
Return an iterator range over Range
which only includes BlockTy
blocks.
The accesses are casted to BlockTy
.
Definition at line 4211 of file VPlan.h.
References llvm::Block, llvm::Filter, llvm::make_filter_range(), llvm::map_range(), and Range.
|
inlinestatic |
Connect VPBlockBases From
and To
bi-directionally.
If PredIdx
is -1, append From
to the predecessors of To
, otherwise set To's
predecessor at PredIdx
to From
. If SuccIdx
is -1, append To
to the successors of From
, otherwise set From's
successor at SuccIdx
to To
. Both VPBlockBases must have the same parent, which can be null. Both VPBlockBases can be already connected to other VPBlockBases.
Definition at line 4170 of file VPlan.h.
References assert(), From, llvm::VPBlockBase::getParent(), and llvm::VPBlockBase::getPredecessors().
Referenced by llvm::VPlan::createInitialVPlan(), createReplicateRegion(), llvm::VPlanTransforms::handleUncountableEarlyExit(), insertBlockAfter(), insertBlockBefore(), insertOnEdge(), introduceCheckBlockInVPlan(), mergeBlocksIntoPredecessors(), and mergeReplicateRegionsIntoSuccessors().
|
inlinestatic |
Disconnect VPBlockBases From
and To
bi-directionally.
Remove To
from the successors of From
and From
from the predecessors of To
.
Definition at line 4189 of file VPlan.h.
References assert(), and From.
Referenced by insertBlockAfter(), insertBlockBefore(), mergeBlocksIntoPredecessors(), and mergeReplicateRegionsIntoSuccessors().
|
inlinestatic |
Insert disconnected VPBlockBase NewBlock
after BlockPtr
.
Add NewBlock
as successor of BlockPtr
and BlockPtr
as predecessor of NewBlock
, and propagate BlockPtr
parent to NewBlock
. BlockPtr's
successors are moved from BlockPtr
to NewBlock
. NewBlock
must have neither successors nor predecessors.
Definition at line 4116 of file VPlan.h.
References assert(), connectBlocks(), disconnectBlocks(), llvm::SmallVectorBase< Size_T >::empty(), llvm::VPBlockBase::getParent(), llvm::VPBlockBase::getPredecessors(), llvm::VPBlockBase::getSuccessors(), llvm::VPBlockBase::setParent(), and llvm::VPBlockBase::successors().
Referenced by llvm::VPlan::createInitialVPlan(), and llvm::VPBasicBlock::splitAt().
|
inlinestatic |
Insert disconnected block NewBlock
before Blockptr
.
First disconnects all predecessors of BlockPtr
and connects them to NewBlock
. Add NewBlock
as predecessor of BlockPtr
and BlockPtr
as successor of NewBlock
.
Definition at line 4133 of file VPlan.h.
References assert(), connectBlocks(), disconnectBlocks(), llvm::SmallVectorBase< Size_T >::empty(), llvm::VPBlockBase::getParent(), llvm::VPBlockBase::getPredecessors(), llvm::VPBlockBase::getSuccessors(), llvm::VPBlockBase::predecessors(), llvm::VPBlockBase::setParent(), and llvm::to_vector().
|
inlinestatic |
Inserts BlockPtr
on the edge between From
and To
.
That is, update From's
successor to To
to point to BlockPtr
and To's
predecessor from From
to BlockPtr
. From
and To
are added to BlockPtr's
predecessors and successors respectively. There must be a single edge between From
and To
.
Definition at line 4232 of file VPlan.h.
References assert(), llvm::SmallVectorTemplateCommon< T, typename >::begin(), connectBlocks(), llvm::count(), llvm::find(), From, and llvm::VPBlockBase::getPredecessors().
Referenced by addReplicateRegions(), llvm::VPlanTransforms::handleUncountableEarlyExit(), and introduceCheckBlockInVPlan().
|
inlinestatic |
Insert disconnected VPBlockBases IfTrue
and IfFalse
after BlockPtr
.
Add IfTrue
and IfFalse
as succesors of BlockPtr
and BlockPtr
as predecessor of IfTrue
and IfFalse
. Propagate BlockPtr
parent to IfTrue
and IfFalse
. BlockPtr
must have no successors and IfTrue
and IfFalse
must have neither successors nor predecessors.
Definition at line 4151 of file VPlan.h.
References assert(), llvm::SmallVectorBase< Size_T >::empty(), llvm::VPBlockBase::getParent(), llvm::VPBlockBase::getSuccessors(), llvm::VPBlockBase::setParent(), llvm::VPBlockBase::setPredecessors(), and llvm::VPBlockBase::setTwoSuccessors().
Referenced by createReplicateRegion().
|
inlinestatic |
Reassociate all the blocks connected to Old
so that they now point to New
.
Definition at line 4197 of file VPlan.h.
References llvm::VPBlockBase::clearPredecessors(), llvm::VPBlockBase::clearSuccessors(), llvm::VPBlockBase::getPredecessors(), llvm::VPBlockBase::getSuccessors(), and llvm::to_vector().
Referenced by llvm::EpilogueVectorizerEpilogueLoop::emitMinimumVectorEpilogueIterCountCheck(), and replaceVPBBWithIRVPBB().