MLIR
20.0.0git
|
Block
represents an ordered list of Operation
s.
More...
#include "mlir/IR/Block.h"
Public Types | |
using | BlockArgListType = MutableArrayRef< BlockArgument > |
using | args_iterator = BlockArgListType::iterator |
using | reverse_args_iterator = BlockArgListType::reverse_iterator |
using | OpListType = llvm::iplist< Operation > |
This is the list of operations in the block. More... | |
using | iterator = OpListType::iterator |
using | reverse_iterator = OpListType::reverse_iterator |
template<typename OpT > | |
using | op_iterator = detail::op_iterator< OpT, iterator > |
This class provides iteration over the held operations of a block for a specific operation type. More... | |
using | pred_iterator = PredecessorIterator |
using | succ_iterator = SuccessorRange::iterator |
Public Types inherited from mlir::IRObjectWithUseList< BlockOperand > | |
using | use_iterator = ValueUseIterator< BlockOperand > |
using | use_range = iterator_range< use_iterator > |
using | user_iterator = ValueUserIterator< use_iterator, BlockOperand > |
using | user_range = iterator_range< user_iterator > |
Public Member Functions | |
Block ()=default | |
~Block () | |
void | clear () |
Region * | getParent () const |
Provide a 'getParent' method for ilist_node_with_parent methods. More... | |
Operation * | getParentOp () |
Returns the closest surrounding operation that contains this block. More... | |
bool | isEntryBlock () |
Return if this block is the entry block in the parent region. More... | |
void | insertBefore (Block *block) |
Insert this block (which must not already be in a region) right before the specified block. More... | |
void | insertAfter (Block *block) |
Insert this block (which must not already be in a region) right after the specified block. More... | |
void | moveBefore (Block *block) |
Unlink this block from its current region and insert it right before the specific block. More... | |
void | moveBefore (Region *region, llvm::iplist< Block >::iterator iterator) |
Unlink this block from its current region and insert it right before the block that the given iterator points to in the region region. More... | |
void | erase () |
Unlink this Block from its parent region and delete it. More... | |
BlockArgListType | getArguments () |
ValueTypeRange< BlockArgListType > | getArgumentTypes () |
Return a range containing the types of the arguments for this block. More... | |
args_iterator | args_begin () |
args_iterator | args_end () |
reverse_args_iterator | args_rbegin () |
reverse_args_iterator | args_rend () |
bool | args_empty () |
BlockArgument | addArgument (Type type, Location loc) |
Add one value to the argument list. More... | |
BlockArgument | insertArgument (args_iterator it, Type type, Location loc) |
Insert one value to the position in the argument list indicated by the given iterator. More... | |
iterator_range< args_iterator > | addArguments (TypeRange types, ArrayRef< Location > locs) |
Add one argument to the argument list for each type specified in the list. More... | |
BlockArgument | insertArgument (unsigned index, Type type, Location loc) |
Add one value to the argument list at the specified position. More... | |
void | eraseArgument (unsigned index) |
Erase the argument at 'index' and remove it from the argument list. More... | |
void | eraseArguments (unsigned start, unsigned num) |
Erases 'num' arguments from the index 'start'. More... | |
void | eraseArguments (const BitVector &eraseIndices) |
Erases the arguments that have their corresponding bit set in eraseIndices and removes them from the argument list. More... | |
void | eraseArguments (function_ref< bool(BlockArgument)> shouldEraseFn) |
Erases arguments using the given predicate. More... | |
unsigned | getNumArguments () |
BlockArgument | getArgument (unsigned i) |
OpListType & | getOperations () |
iterator | begin () |
iterator | end () |
reverse_iterator | rbegin () |
reverse_iterator | rend () |
bool | empty () |
void | push_back (Operation *op) |
void | push_front (Operation *op) |
Operation & | back () |
Operation & | front () |
Operation * | findAncestorOpInBlock (Operation &op) |
Returns 'op' if 'op' lies in this block, or otherwise finds the ancestor operation of 'op' that lies in this block. More... | |
void | dropAllReferences () |
This drops all operand uses from operations within this block, which is an essential step in breaking cyclic dependences between references when they are to be deleted. More... | |
void | dropAllDefinedValueUses () |
This drops all uses of values defined in this block or in the blocks of nested regions wherever the uses are located. More... | |
bool | isOpOrderValid () |
Returns true if the ordering of the child operations is valid, false otherwise. More... | |
void | invalidateOpOrder () |
Invalidates the current ordering of operations. More... | |
bool | verifyOpOrder () |
Verifies the current ordering of child operations matches the validOpOrder flag. More... | |
void | recomputeOpOrder () |
Recomputes the ordering of child operations within the block. More... | |
template<typename OpT > | |
iterator_range< op_iterator< OpT > > | getOps () |
Return an iterator range over the operations within this block that are of 'OpT'. More... | |
template<typename OpT > | |
op_iterator< OpT > | op_begin () |
template<typename OpT > | |
op_iterator< OpT > | op_end () |
iterator_range< iterator > | without_terminator () |
Return an iterator range over the operation within this block excluding the terminator operation at the end. More... | |
Operation * | getTerminator () |
Get the terminator operation of this block. More... | |
bool | mightHaveTerminator () |
Check whether this block might have a terminator. More... | |
pred_iterator | pred_begin () |
pred_iterator | pred_end () |
iterator_range< pred_iterator > | getPredecessors () |
bool | hasNoPredecessors () |
Return true if this block has no predecessors. More... | |
bool | hasNoSuccessors () |
Returns true if this blocks has no successors. More... | |
Block * | getSinglePredecessor () |
If this block has exactly one predecessor, return it. More... | |
Block * | getUniquePredecessor () |
If this block has a unique predecessor, i.e., all incoming edges originate from one block, return it. More... | |
unsigned | getNumSuccessors () |
Block * | getSuccessor (unsigned i) |
succ_iterator | succ_begin () |
succ_iterator | succ_end () |
SuccessorRange | getSuccessors () |
template<WalkOrder Order = WalkOrder::PostOrder, typename Iterator = ForwardIterator, typename FnT , typename ArgT = detail::first_argument<FnT>, typename RetT = detail::walkResultType<FnT>> | |
RetT | walk (FnT &&callback) |
Walk all nested operations, blocks (including this block) or regions, depending on the type of callback. More... | |
template<WalkOrder Order = WalkOrder::PostOrder, typename Iterator = ForwardIterator, typename FnT , typename RetT = detail::walkResultType<FnT>> | |
RetT | walk (Block::iterator begin, Block::iterator end, FnT &&callback) |
Walk all nested operations, blocks (excluding this block) or regions, depending on the type of callback, in the specified [begin, end) range of this block. More... | |
Block * | splitBlock (iterator splitBefore) |
Split the block into two blocks before the specified operation or iterator. More... | |
Block * | splitBlock (Operation *splitBeforeOp) |
void | print (raw_ostream &os) |
void | print (raw_ostream &os, AsmState &state) |
void | dump () |
void | printAsOperand (raw_ostream &os, bool printType=true) |
Print out the name of the block without printing its body. More... | |
void | printAsOperand (raw_ostream &os, AsmState &state) |
Public Member Functions inherited from mlir::IRObjectWithUseList< BlockOperand > | |
~IRObjectWithUseList () | |
void | dropAllUses () |
Drop all uses of this object from their respective owners. More... | |
void | replaceAllUsesWith (ValueT &&newValue) |
Replace all uses of 'this' value with the new value, updating anything in the IR that uses 'this' to use the other value instead. More... | |
void | shuffleUseList (ArrayRef< unsigned > indices) |
Shuffle the use-list chain according to the provided indices vector, which need to represent a valid shuffle. More... | |
use_iterator | use_begin () const |
use_iterator | use_end () const |
use_range | getUses () const |
Returns a range of all uses, which is useful for iterating over all uses. More... | |
bool | hasOneUse () const |
Returns true if this value has exactly one use. More... | |
bool | use_empty () const |
Returns true if this value has no uses. More... | |
user_iterator | user_begin () const |
user_iterator | user_end () const |
user_range | getUsers () const |
Returns a range of all users. More... | |
Static Public Member Functions | |
static OpListType Block::* | getSublistAccess (Operation *) |
Returns pointer to member of operation list. More... | |
Friends | |
struct | llvm::ilist_traits< Block > |
Additional Inherited Members | |
Protected Member Functions inherited from mlir::IRObjectWithUseList< BlockOperand > | |
IRObjectWithUseList ()=default | |
BlockOperand * | getFirstUse () const |
Return the first operand that is using this value, for use by custom use/def iterators. More... | |
using mlir::Block::args_iterator = BlockArgListType::iterator |
using mlir::Block::iterator = OpListType::iterator |
using mlir::Block::op_iterator = detail::op_iterator<OpT, iterator> |
using mlir::Block::OpListType = llvm::iplist<Operation> |
using mlir::Block::reverse_args_iterator = BlockArgListType::reverse_iterator |
using mlir::Block::reverse_iterator = OpListType::reverse_iterator |
using mlir::Block::succ_iterator = SuccessorRange::iterator |
|
explicitdefault |
Referenced by splitBlock().
Block::~Block | ( | ) |
Definition at line 19 of file Block.cpp.
References clear(), and verifyOpOrder().
BlockArgument Block::addArgument | ( | Type | type, |
Location | loc | ||
) |
Add one value to the argument list.
Definition at line 152 of file Block.cpp.
Referenced by mlir::Region::addArgument(), addBlockArgumentsFromOther(), addBodyWithPayloadOp(), mlir::Region::cloneInto(), ensureDistinctSuccessors(), generateFusedElementwiseOpRegion(), mlirBlockCreate(), and transformToReduceLoop().
Add one argument to the argument list for each type specified in the list.
locs
is required to have the same number of elements as types
.
Definition at line 159 of file Block.cpp.
Referenced by mlir::Region::addArguments(), mlir::OpBuilder::createBlock(), mlir::ControlFlowToSCFTransformation::createStructuredDoWhileLoopOp(), and mlir::sparse_tensor::LoopEmitter::enterCurrentCoIterationCase().
|
inline |
Definition at line 92 of file Block.h.
References getArguments().
|
inline |
Definition at line 97 of file Block.h.
Referenced by collapseBranch().
|
inline |
Definition at line 93 of file Block.h.
References getArguments().
|
inline |
Definition at line 94 of file Block.h.
References getArguments().
|
inline |
Definition at line 95 of file Block.h.
References getArguments().
|
inline |
Definition at line 150 of file Block.h.
Referenced by addAtomicRMW(), ensureDistinctSuccessors(), mlir::impl::ensureRegionTerminator(), getNumSuccessors(), getTerminator(), mlir::spirv::hasOneBranchOpTo(), inlineConvertOmpRegions(), insertCopies(), mlir::linalg::isaFillOpInterface(), mlir::linalg::detail::isContractionBody(), matchSelectReduction(), matchSimpleReduction(), mightHaveTerminator(), mlirBlockGetTerminator(), mlir::sortTopologically(), mlir::RewriterBase::splitBlock(), mlir::SuccessorRange::SuccessorRange(), and mlir::JamBlockGatherer< OpTy >::walk().
|
inline |
Definition at line 141 of file Block.h.
Referenced by mlir::detail::ConversionPatternRewriterImpl::applySignatureConversion(), mlir::OpBuilder::atBlockBegin(), mlir::ImplicitLocOpBuilder::atBlockBegin(), mlir::OpTrait::SingleBlock< ConcreteType >::begin(), collapseBranch(), computeInsertPoint(), convertOmpAtomicCapture(), convertOmpAtomicUpdate(), findHighestBlockForPlacement(), mlir::detail::DominanceInfoBase< IsPostDom >::findNearestCommonDominator(), fuseIfLegal(), generateUnrolledLoop(), getMemoryFootprintBytes(), getOps(), mlir::affine::getPerfectlyNestedLoops(), getPerfectlyNestedLoopsImpl(), handleInlinedAllocas(), mlir::spirv::isMergeBlock(), matchSelectReduction(), matchSimpleReduction(), mlirBlockInsertOwnedOperationAfter(), op_begin(), mlir::OpBuilder::OpBuilder(), promoteIfBlock(), mlir::scf::replaceAndCastForOpIterArg(), rewriteOneForallCommonImpl(), mlir::OpBuilder::setInsertionPointToStart(), mlir::RewriterBase::splitBlock(), mlir::JamBlockGatherer< OpTy >::walk(), walk(), and without_terminator().
|
inline |
Definition at line 36 of file Block.h.
References dropAllReferences(), and empty().
Referenced by ~Block().
void Block::dropAllDefinedValueUses | ( | ) |
This drops all uses of values defined in this block or in the blocks of nested regions wherever the uses are located.
Definition at line 93 of file Block.cpp.
References getArguments().
Referenced by mlir::Operation::dropAllDefinedValueUses(), and mlir::detail::ConversionPatternRewriterImpl::SingleEraseRewriter::eraseBlock().
void Block::dropAllReferences | ( | ) |
This drops all operand uses from operations within this block, which is an essential step in breaking cyclic dependences between references when they are to be deleted.
Definition at line 88 of file Block.cpp.
References mlir::Operation::dropAllReferences().
Referenced by clear(), and mlir::Region::dropAllReferences().
void Block::dump | ( | ) |
Definition at line 3994 of file AsmPrinter.cpp.
References print().
|
inline |
Definition at line 146 of file Block.h.
Referenced by mlir::detail::ConversionPatternRewriterImpl::applySignatureConversion(), clear(), ensureDistinctSuccessors(), mlir::impl::ensureRegionTerminator(), mlir::detail::ConversionPatternRewriterImpl::SingleEraseRewriter::eraseBlock(), getNumSuccessors(), mlir::RewriterBase::inlineBlockBefore(), insertArgument(), mlir::linalg::detail::isContractionBody(), mlir::spirv::isMergeBlock(), matchSelectReduction(), matchSimpleReduction(), mightHaveTerminator(), mlirBlockGetFirstOperation(), mlirBlockGetTerminator(), mlir::sortTopologically(), mlir::SuccessorRange::SuccessorRange(), and mlir::JamBlockGatherer< OpTy >::walk().
|
inline |
Definition at line 142 of file Block.h.
Referenced by mlir::detail::ConversionPatternRewriterImpl::applySignatureConversion(), mlir::OpBuilder::atBlockEnd(), mlir::ImplicitLocOpBuilder::atBlockEnd(), collapseBranch(), mlir::OpTrait::SingleBlock< ConcreteType >::end(), generateUnrolledLoop(), getOps(), mlir::affine::getPerfectlyNestedLoops(), getPerfectlyNestedLoopsImpl(), mlir::RewriterBase::inlineBlockBefore(), mlir::spirv::isMergeBlock(), matchSelectReduction(), matchSimpleReduction(), mlir::RewriterBase::mergeBlocks(), mlir::Operation::moveAfter(), op_begin(), op_end(), promoteIfBlock(), mlir::affine::separateFullTiles(), mlir::OpBuilder::setInsertionPointToEnd(), mlir::RewriterBase::splitBlock(), splitBlock(), transformToStructuredCFBranches(), mlir::JamBlockGatherer< OpTy >::walk(), walk(), and without_terminator().
void Block::erase | ( | ) |
Unlink this Block from its parent region and delete it.
Unlink this Block from its parent Region and delete it.
Definition at line 65 of file Block.cpp.
References mlir::Region::getBlocks(), and getParent().
Referenced by outlineKernelFuncImpl(), transformCyclesToSCFLoops(), and transformToStructuredCFBranches().
void Block::eraseArgument | ( | unsigned | index | ) |
Erase the argument at 'index' and remove it from the argument list.
Definition at line 192 of file Block.cpp.
Referenced by dropRedundantArguments(), mlir::Region::eraseArgument(), and pruneRedundantArguments().
void Block::eraseArguments | ( | const BitVector & | eraseIndices | ) |
Erases the arguments that have their corresponding bit set in eraseIndices
and removes them from the argument list.
Definition at line 209 of file Block.cpp.
References eraseArguments(), and mlir::BlockArgument::getArgNumber().
void Block::eraseArguments | ( | function_ref< bool(BlockArgument)> | shouldEraseFn | ) |
void Block::eraseArguments | ( | unsigned | start, |
unsigned | num | ||
) |
Erases 'num' arguments from the index 'start'.
Definition at line 200 of file Block.cpp.
Referenced by eraseArguments(), inlineIfCase(), and transformToStructuredCFBranches().
Returns 'op' if 'op' lies in this block, or otherwise finds the ancestor operation of 'op' that lies in this block.
Returns nullptr if the latter fails. TODO: This is very specific functionality that should live somewhere else, probably in Dominance.cpp.
Returns nullptr if the latter fails.
Definition at line 73 of file Block.cpp.
Referenced by mlir::bufferization::BufferPlacementAllocs::getStartOperation(), happensBefore(), neededValuesDominateInsertionPoint(), and srcAppearsBeforeDstInAncestralBlock().
|
inline |
Definition at line 151 of file Block.h.
Referenced by mlir::detail::ConversionPatternRewriterImpl::applySignatureConversion(), checkTransformationPreconditions(), cloneToCollapsedOp< GenericOp >(), mlir::lsp::MLIRServer::convertFromBytecode(), mlir::sparse_tensor::LoopEmitter::enterCoIterationOverTensorsAtLvls(), fuseIfLegal(), generateFusedElementwiseOpRegion(), llvm::GraphTraits< Inverse< mlir::Region * > >::getEntryNode(), mlir::affine::getPerfectlyNestedLoops(), getPerfectlyNestedLoopsImpl(), getPerfectlyNestedLoopsOutsideOf(), mlir::RewriterBase::inlineBlockBefore(), inlineOmpRegionCleanup(), mlir::spirv::isMergeBlock(), matchSelectReduction(), matchSimpleReduction(), mlirBlockGetFirstOperation(), mlir::scf::replaceAndCastForOpIterArg(), rewriteOneForallCommonImpl(), setupCoroMachinery(), transformCyclesToSCFLoops(), and transformToStructuredCFBranches().
|
inline |
Definition at line 127 of file Block.h.
Referenced by addAtomicRMW(), mlir::detail::ConversionPatternRewriterImpl::applySignatureConversion(), createAsyncDispatchFunction(), createElementFPowIFunc(), eraseTerminatorSuccessorOperands(), findPayloadOp(), mlir::detail::getBranchSuccessorArgument(), injectGpuIndexOperations(), inlineOmpRegionCleanup(), mlir::linalg::isaFillOpInterface(), mlir::linalg::detail::isContractionBody(), makeAtomicReductionGen(), makeReductionGen(), outlineKernelFuncImpl(), and pruneRedundantArguments().
|
inline |
Definition at line 85 of file Block.h.
Referenced by addBlockArgumentsFromOther(), addBodyWithPayloadOp(), mlir::OneToNPatternRewriter::applySignatureConversion(), mlir::detail::ConversionPatternRewriterImpl::applySignatureConversion(), args_begin(), args_end(), args_rbegin(), args_rend(), mlir::bufferization::bufferizeBlockSignature(), buildGenericRegion(), mlir::Region::cloneInto(), cloneToCollapsedOp< GenericOp >(), collapseBranch(), createAsyncDispatchFunction(), createBinarySearchFunc(), createHeapSortFunc(), createPartitionFunc(), createQuickSortFunc(), createShiftDownFunc(), createSingleExitBranchRegion(), createSingleExitingLatch(), createSortStableFunc(), mlir::ControlFlowToSCFTransformation::createStructuredDoWhileLoopOp(), dropAllDefinedValueUses(), dropRedundantArguments(), ensureDistinctSuccessors(), findPayloadOp(), fuseIfLegal(), mlir::sparse_tensor::FuncCallOrInlineGenerator< SubClass >::genCallOrInline(), mlir::sparse_tensor::genCoIteration(), generateFusedElementwiseOpRegion(), genLoopWithIterator(), mlir::Region::getArguments(), mlir::RewriterBase::inlineBlockBefore(), inlineIfCase(), inlinePayload(), inlineWhileCase(), mlir::OperationEquivalence::isRegionEquivalentTo(), mlir::makeRegionIsolatedFromAbove(), matchSelectReduction(), matchSimpleReduction(), mlir::outlineSingleBlockRegion(), printOperation(), pruneRedundantArguments(), mlir::scf::replaceAndCastForOpIterArg(), mlir::mesh::shardedBlockArgumentTypes(), mlir::mesh::spmdizeBlock(), transformCyclesToSCFLoops(), transformToReduceLoop(), and transformToStructuredCFBranches().
auto Block::getArgumentTypes | ( | ) |
Return a range containing the types of the arguments for this block.
Definition at line 148 of file Block.cpp.
Referenced by mlir::detail::ConversionPatternRewriterImpl::applySignatureConversion(), mlir::TypeConverter::convertBlockSignature(), mlir::TypeConverter::isLegal(), mlir::makeRegionIsolatedFromAbove(), ConvertTypesInSCFForOp::matchAndRewrite(), and transformToStructuredCFBranches().
|
inline |
Definition at line 126 of file Block.h.
Referenced by mlir::detail::ConversionPatternRewriterImpl::applySignatureConversion(), mlir::TypeConverter::convertBlockSignature(), createSingleExitingLatch(), ensureDistinctSuccessors(), findPayloadOp(), mlir::RewriterBase::inlineBlockBefore(), mlir::ConversionPatternRewriter::inlineBlockBefore(), inlineIfCase(), mlir::linalg::detail::isContractionBody(), mlir::OperationEquivalence::isRegionEquivalentTo(), mlir::makeRegionIsolatedFromAbove(), mapInitializationArgs(), matchSimpleReduction(), mlir::outlineSingleBlockRegion(), transformToReduceLoop(), and transformToStructuredCFBranches().
unsigned Block::getNumSuccessors | ( | ) |
Definition at line 254 of file Block.cpp.
References back(), empty(), and mlir::Operation::getNumSuccessors().
Referenced by createSingleExitBlocksForReturnLike(), getSuccessor(), isRegionExitBlock(), successorEdges(), and transformToStructuredCFBranches().
|
inline |
Definition at line 135 of file Block.h.
Referenced by mlir::affine::affineParallelize(), mlir::detail::ConversionPatternRewriterImpl::applySignatureConversion(), constructTiledLoopNest(), findPayloadOp(), hoistAffineIfOp(), mlir::RewriterBase::inlineBlockBefore(), isaElemwiseSingleUnaryOrBinaryOpInterface(), mlir::linalg::isaFillOpInterface(), mlirBlockInsertOwnedOperationAfter(), mlir::Operation::moveBefore(), outlineKernelFuncImpl(), processParallelLoop(), promoteIfBlock(), rewriteOneForallCommonImpl(), mlir::affine::separateFullTiles(), setupCoroMachinery(), splitBlock(), transformCyclesToSCFLoops(), and transformToStructuredCFBranches().
|
inline |
Return an iterator range over the operations within this block that are of 'OpT'.
Definition at line 191 of file Block.h.
References begin(), and end().
Referenced by generateCollapsedIndexingRegion(), generateFusedElementwiseOpRegion(), handleInlinedAllocas(), and updateExpandedGenericOpRegion().
Region * Block::getParent | ( | ) | const |
Provide a 'getParent' method for ilist_node_with_parent methods.
We mark it as a const function because ilist_node_with_parent specifically requires a 'getParent() const' method. Once ilist_node removes this constraint, we should drop the const to fit the rest of the MLIR const model.
Definition at line 26 of file Block.cpp.
Referenced by llvm::ilist_traits<::mlir::Block >::addNodeToList(), mlir::detail::ConversionPatternRewriterImpl::applySignatureConversion(), mlir::sparse_tensor::Merger::buildExp(), mlir::OpBuilder::cloneRegionBefore(), collectUnderlyingAddressValues(), mlir::FunctionCallBuilder::create(), mlir::OpBuilder::createBlock(), createElementFPowIFunc(), createElementIPowIFunc(), ensureDistinctSuccessors(), erase(), mlir::Region::findAncestorBlockInRegion(), mlir::detail::DominanceInfoBase< IsPostDom >::findNearestCommonDominator(), generateCopy(), getBlockNumber(), mlir::bufferization::AnalysisState::getEnclosingRepetitiveRegion(), getInsertionRegion(), mlir::dataflow::CFGEdge::getLoc(), mlir::detail::DominanceInfoBase< IsPostDom >::getNode(), getParentOp(), mlir::Operation::getParentRegion(), mlir::detail::DominanceInfoBase< IsPostDom >::hasSSADominance(), mlir::ReductionNode::initialize(), mlir::RewriterBase::inlineRegionBefore(), insertAfter(), insertBefore(), isEntryBlock(), mlir::detail::DominanceInfoBase< IsPostDom >::isReachableFromEntry(), mayBeValidWithoutTerminator(), mlirBlockDetach(), moveBefore(), mlir::RewriterBase::moveBlockBefore(), printBlock(), mlir::detail::DominanceInfoBase< IsPostDom >::properlyDominates(), mlir::PostDominanceInfo::properlyPostDominates(), llvm::ilist_traits<::mlir::Block >::removeNodeFromList(), mlir::RewriterBase::splitBlock(), splitBlock(), mlir::mesh::spmdizeBlock(), mlir::SuccessorRange::SuccessorRange(), mlir::transformCFGToSCF(), transformCyclesToSCFLoops(), transformToReduceLoop(), transformToStructuredCFBranches(), and tryGetBlocksInSameRegion().
Operation * Block::getParentOp | ( | ) |
Returns the closest surrounding operation that contains this block.
Returns the closest surrounding operation that contains this block or nullptr if this block is unlinked.
Definition at line 30 of file Block.cpp.
References getParent(), and mlir::Region::getParentOp().
Referenced by mlir::affine::affineDataCopyGenerate(), mlir::ConversionPatternRewriter::applySignatureConversion(), mlir::bufferization::bufferizeBlockSignature(), buildPackingLoopNestImpl(), checkAndNestUnderRewriteOp(), mlir::sparse_tensor::createFuncCall(), mlir::LLVM::createGlobalString(), emitRemarkForBlock(), mlir::ConversionPatternRewriter::eraseBlock(), finalizeWhileOp(), mlir::Region::findAncestorBlockInRegion(), getAncestorBlock(), mlir::getControlFlowPredecessors(), mlir::Operation::getParentOp(), getParentsOfType(), getPhiIncomingBlock(), hoistSubsetAtIterArg(), mlir::ConversionPatternRewriter::inlineBlockBefore(), isFnEntryBlock(), isFunctionArgument(), mlir::detail::ConversionPatternRewriterImpl::notifyBlockInserted(), removeBufferizationAttributes(), mlir::ConversionPatternRewriter::replaceUsesOfBlockArgument(), transformToReduceLoop(), and tryToEnforceAlignment().
|
inline |
Definition at line 235 of file Block.h.
References pred_begin(), and pred_end().
Referenced by insertArgument(), and transformToReduceLoop().
Block * Block::getSinglePredecessor | ( | ) |
If this block has exactly one predecessor, return it.
Otherwise, return null.
Note that if a block has duplicate predecessors from a single block (e.g. if you have a conditional branch with the same block as the true/false destinations) is not considered to be a single predecessor.
Otherwise, return null.
Note that multiple edges from a single block (e.g. if you have a cond branch with the same block as the true/false destinations) is not considered to be a single predecessor.
Definition at line 269 of file Block.cpp.
References pred_begin(), and pred_end().
Referenced by transformToReduceLoop().
|
inlinestatic |
Block * Block::getSuccessor | ( | unsigned | i | ) |
Definition at line 258 of file Block.cpp.
References getNumSuccessors(), mlir::Operation::getSuccessor(), and getTerminator().
Referenced by ensureDistinctSuccessors(), printOperation(), transformToReduceLoop(), and transformToStructuredCFBranches().
|
inline |
Definition at line 265 of file Block.h.
Referenced by calculateCycleEdges(), isReachable(), mergeIdenticalBlocks(), mlir::Liveness::resolveLiveness(), succ_begin(), succ_end(), and transformToStructuredCFBranches().
Operation * Block::getTerminator | ( | ) |
Get the terminator operation of this block.
This function asserts that the block might have a valid terminator operation.
Definition at line 243 of file Block.cpp.
References back(), and mightHaveTerminator().
Referenced by mlir::OpBuilder::atBlockTerminator(), mlir::ImplicitLocOpBuilder::atBlockTerminator(), collapseBranch(), containsReturn(), convertOmpAtomicCapture(), convertOmpAtomicUpdate(), createSingleExitBlocksForReturnLike(), ensureDistinctSuccessors(), fuseIfLegal(), generateUnrolledLoop(), getBlockPredecessorOperands(), getMutableSuccessorOperands(), getPerfectlyNestedLoopsOutsideOf(), getPHISourceValue(), mlir::bufferization::BufferPlacementAllocs::getStartOperation(), getSuccessor(), inlineIfCase(), inlineWhileCase(), mlir::sparse_tensor::insertYieldOp(), mlir::linalg::detail::isContractionBody(), outlineKernelFuncImpl(), mlir::outlineSingleBlockRegion(), mlir::scf::replaceAndCastForOpIterArg(), mlir::scf::tileAndFuseConsumerOfSlice(), transformCyclesToSCFLoops(), transformToStructuredCFBranches(), and mlir::scf::yieldReplacementForFusedProducer().
Block * Block::getUniquePredecessor | ( | ) |
If this block has a unique predecessor, i.e., all incoming edges originate from one block, return it.
Otherwise, return null.
Definition at line 280 of file Block.cpp.
References pred_begin(), and pred_end().
|
inline |
Return true if this block has no predecessors.
Definition at line 240 of file Block.h.
References pred_begin(), and pred_end().
Referenced by checkTransformationPreconditions(), and mlir::RewriterBase::inlineBlockBefore().
|
inline |
Returns true if this blocks has no successors.
Definition at line 243 of file Block.h.
References succ_begin(), and succ_end().
Referenced by mlir::RewriterBase::inlineBlockBefore().
void Block::insertAfter | ( | Block * | block | ) |
Insert this block (which must not already be in a region) right after the specified block.
Definition at line 45 of file Block.cpp.
References mlir::Region::getBlocks(), and getParent().
Referenced by createSingleExitingLatch().
BlockArgument Block::insertArgument | ( | args_iterator | it, |
Type | type, | ||
Location | loc | ||
) |
Insert one value to the position in the argument list indicated by the given iterator.
Insert one value to the given position of the argument list.
The existing arguments are shifted. The block is expected not to have predecessors.
Definition at line 186 of file Block.cpp.
References empty(), and getPredecessors().
Referenced by mlir::Region::insertArgument().
BlockArgument Block::insertArgument | ( | unsigned | index, |
Type | type, | ||
Location | loc | ||
) |
void Block::insertBefore | ( | Block * | block | ) |
Insert this block (which must not already be in a region) right before the specified block.
Definition at line 39 of file Block.cpp.
References mlir::Region::getBlocks(), and getParent().
Referenced by transformCyclesToSCFLoops().
void Block::invalidateOpOrder | ( | ) |
Invalidates the current ordering of operations.
Definition at line 106 of file Block.cpp.
References verifyOpOrder().
Referenced by llvm::ilist_traits<::mlir::Operation >::transferNodesFromList().
bool Block::isEntryBlock | ( | ) |
Return if this block is the entry block in the parent region.
Definition at line 35 of file Block.cpp.
References mlir::Region::front(), and getParent().
Referenced by mlir::LocalAliasAnalysis::aliasImpl(), checkTransformationPreconditions(), collectUnderlyingAddressValues(), mlir::getControlFlowPredecessors(), getPhiIncomingBlock(), and isFnEntryBlock().
bool Block::isOpOrderValid | ( | ) |
Returns true if the ordering of the child operations is valid, false otherwise.
Definition at line 103 of file Block.cpp.
Referenced by mlir::Operation::isBeforeInBlock(), and verifyOpOrder().
bool Block::mightHaveTerminator | ( | ) |
Check whether this block might have a terminator.
Definition at line 249 of file Block.cpp.
References back(), empty(), and mlir::Operation::mightHaveTrait().
Referenced by getTerminator().
void Block::moveBefore | ( | Block * | block | ) |
Unlink this block from its current region and insert it right before the specific block.
Definition at line 53 of file Block.cpp.
References getParent().
Referenced by mlir::RewriterBase::moveBlockBefore().
Unlink this block from its current region and insert it right before the block that the given iterator points to in the region region.
Definition at line 60 of file Block.cpp.
References mlir::Region::getBlocks(), and getParent().
|
inline |
|
inline |
|
inline |
Definition at line 231 of file Block.h.
References mlir::IRObjectWithUseList< BlockOperand >::getFirstUse().
Referenced by ableToUpdatePredOperands(), buildBlockMapping(), calculateCycleEdges(), llvm::GraphTraits< Inverse< mlir::Block * > >::child_begin(), collectUnderlyingAddressValues(), dropRedundantArguments(), getBlockPredecessorOperands(), getPredecessors(), getSinglePredecessor(), getUniquePredecessor(), hasNoPredecessors(), transformToReduceLoop(), and transformToStructuredCFBranches().
|
inline |
Definition at line 234 of file Block.h.
Referenced by ableToUpdatePredOperands(), buildBlockMapping(), calculateCycleEdges(), llvm::GraphTraits< Inverse< mlir::Block * > >::child_end(), collectUnderlyingAddressValues(), dropRedundantArguments(), getBlockPredecessorOperands(), getPredecessors(), getSinglePredecessor(), getUniquePredecessor(), hasNoPredecessors(), transformToReduceLoop(), and transformToStructuredCFBranches().
void Block::print | ( | raw_ostream & | os | ) |
Definition at line 3977 of file AsmPrinter.cpp.
References mlir::Operation::getParentOp().
Referenced by mlir::operator<<(), mlir::dataflow::CFGEdge::print(), and printBlock().
void Block::print | ( | raw_ostream & | os, |
AsmState & | state | ||
) |
Definition at line 3990 of file AsmPrinter.cpp.
void Block::printAsOperand | ( | raw_ostream & | os, |
AsmState & | state | ||
) |
Definition at line 4006 of file AsmPrinter.cpp.
void Block::printAsOperand | ( | raw_ostream & | os, |
bool | printType = true |
||
) |
Print out the name of the block without printing its body.
NOTE: The printType argument is ignored. We keep it for compatibility with LLVM dominator machinery that expects it to exist.
Definition at line 3997 of file AsmPrinter.cpp.
|
inline |
Definition at line 147 of file Block.h.
Referenced by ensureDistinctSuccessors().
|
inline |
void Block::recomputeOpOrder | ( | ) |
Recomputes the ordering of child operations within the block.
Definition at line 135 of file Block.cpp.
Referenced by mlir::Operation::isBeforeInBlock().
|
inline |
Split the block into two blocks before the specified operation or iterator.
Note that all operations BEFORE the specified iterator stay as part of the original basic block, and the rest of the operations in the original block are moved to the new block, including the old terminator. The original block is left without a terminator.
The newly formed Block is returned, and the specified iterator is invalidated.
Definition at line 307 of file Block.cpp.
References Block(), end(), mlir::Region::getBlocks(), getOperations(), and getParent().
Referenced by setupCoroMachinery(), mlir::RewriterBase::splitBlock(), and splitBlock().
Definition at line 370 of file Block.h.
References splitBlock().
|
inline |
Definition at line 263 of file Block.h.
References getSuccessors().
Referenced by llvm::GraphTraits< mlir::Block * >::child_begin(), and hasNoSuccessors().
|
inline |
Definition at line 264 of file Block.h.
References getSuccessors().
Referenced by llvm::GraphTraits< mlir::Block * >::child_end(), and hasNoSuccessors().
bool Block::verifyOpOrder | ( | ) |
Verifies the current ordering of child operations matches the validOpOrder flag.
Verifies the current ordering of child operations.
Returns false if the order is valid, true otherwise.
Definition at line 114 of file Block.cpp.
References isOpOrderValid().
Referenced by invalidateOpOrder(), and ~Block().
|
inline |
Walk all nested operations, blocks (excluding this block) or regions, depending on the type of callback, in the specified [begin, end) range of this block.
The order in which operations, blocks or regions at the same nesting level are visited (e.g., lexicographical or reverse lexicographical order) is determined by Iterator
. The walk order for enclosing operations, blocks or regions with respect to their nested ones is specified by Order
(post-order by default).
A callback on a operation or block is allowed to erase that operation or block if either:
See Operation::walk for more details.
|
inline |
Walk all nested operations, blocks (including this block) or regions, depending on the type of callback.
The order in which operations, blocks or regions at the same nesting level are visited (e.g., lexicographical or reverse lexicographical order) is determined by Iterator
. The walk order for enclosing operations, blocks or regions with respect to their nested ones is specified by Order
(post-order by default).
A callback on a operation or block is allowed to erase that operation or block if either:
See Operation::walk for more details.
Definition at line 290 of file Block.h.
References mlir::WalkResult::advance(), begin(), end(), mlir::WalkResult::interrupt(), mlir::PostOrder, and mlir::PreOrder.
Referenced by mlir::affine::affineDataCopyGenerate(), getMemoryFootprintBytes(), and getSingleOpOfType().
|
inline |
Return an iterator range over the operation within this block excluding the terminator operation at the end.
Definition at line 207 of file Block.h.
References begin(), and end().
Referenced by getPerfectlyNestedLoopsOutsideOf(), and mlir::sortTopologically().