MLIR
17.0.0git
|
Public Member Functions | |
ConversionPatternRewriterImpl (PatternRewriter &rewriter) | |
void | discardRewrites () |
Cleanup and destroy any generated rewrite operations. More... | |
void | applyRewrites () |
Apply all requested operation rewrites. More... | |
RewriterState | getCurrentState () |
Return the current state of the rewriter. More... | |
void | resetState (RewriterState state) |
Reset the state of the rewriter to a previously saved point. More... | |
void | eraseDanglingBlocks () |
Erase any blocks that were unlinked from their regions and stored in block actions. More... | |
void | undoBlockActions (unsigned numActionsToKeep=0) |
Undo the block actions (motions, splits) one by one in reverse order until "numActionsToKeep" actions remains. More... | |
LogicalResult | remapValues (StringRef valueDiagTag, std::optional< Location > inputLoc, PatternRewriter &rewriter, ValueRange values, SmallVectorImpl< Value > &remapped) |
Remap the given values to those with potentially different types. More... | |
bool | isOpIgnored (Operation *op) const |
Returns true if the given operation is ignored, and does not need to be converted. More... | |
void | markNestedOpsIgnored (Operation *op) |
Recursively marks the nested operations under 'op' as ignored. More... | |
FailureOr< Block * > | convertBlockSignature (Block *block, TypeConverter *converter, TypeConverter::SignatureConversion *conversion=nullptr) |
Convert the signature of the given block. More... | |
Block * | applySignatureConversion (Region *region, TypeConverter::SignatureConversion &conversion, TypeConverter *converter) |
Apply a signature conversion on the given region, using converter for materializations if not null. More... | |
FailureOr< Block * > | convertRegionTypes (Region *region, TypeConverter &converter, TypeConverter::SignatureConversion *entryConversion) |
Convert the types of block arguments within the given region. More... | |
LogicalResult | convertNonEntryRegionTypes (Region *region, TypeConverter &converter, ArrayRef< TypeConverter::SignatureConversion > blockConversions={}) |
Convert the types of non-entry block arguments within the given region. More... | |
void | notifyOpReplaced (Operation *op, ValueRange newValues) |
PatternRewriter hook for replacing the results of an operation. More... | |
void | notifyBlockIsBeingErased (Block *block) |
Notifies that a block is about to be erased. More... | |
void | notifyCreatedBlock (Block *block) |
Notifies that a block was created. More... | |
void | notifySplitBlock (Block *block, Block *continuation) |
Notifies that a block was split. More... | |
void | notifyBlockBeingInlined (Block *block, Block *srcBlock, Block::iterator before) |
Notifies that a block is being inlined into another block. More... | |
void | notifyRegionIsBeingInlinedBefore (Region ®ion, Region &parent, Region::iterator before) |
Notifies that the blocks of a region are about to be moved. More... | |
LogicalResult | notifyMatchFailure (Location loc, function_ref< void(Diagnostic &)> reasonCallback) |
Notifies that a pattern match failed for the given reason. More... | |
Public Attributes | |
ConversionValueMapping | mapping |
ArgConverter | argConverter |
Utility used to convert block arguments. More... | |
SmallVector< Operation * > | createdOps |
Ordered vector of all of the newly created operations during conversion. More... | |
SmallVector< UnresolvedMaterialization > | unresolvedMaterializations |
Ordered vector of all unresolved type conversion materializations during conversion. More... | |
llvm::MapVector< Operation *, OpReplacement > | replacements |
Ordered map of requested operation replacements. More... | |
SmallVector< BlockArgument, 4 > | argReplacements |
Ordered vector of any requested block argument replacements. More... | |
SmallVector< BlockAction, 4 > | blockActions |
Ordered list of block operations (creations, splits, motions). More... | |
SetVector< Operation * > | ignoredOps |
A set of operations that should no longer be considered for legalization, but were not directly replace/erased/etc. More... | |
SmallVector< OperationTransactionState, 4 > | rootUpdates |
A transaction state for each of operations that were updated in-place. More... | |
SmallVector< unsigned, 4 > | operationsWithChangedResults |
A vector of indices into replacements of operations that were replaced with values with different result types than the original operation, e.g. More... | |
TypeConverter * | currentTypeConverter = nullptr |
The current type converter, or nullptr if no type converter is currently active. More... | |
function_ref< void(Diagnostic &)> | notifyCallback |
This allows the user to collect the match failure message. More... | |
SmallPtrSet< Operation *, 1 > | pendingRootUpdates |
A set of operations that have pending updates. More... | |
llvm::ScopedPrinter | logger {llvm::dbgs()} |
A logger used to emit diagnostics during the conversion process. More... | |
Definition at line 814 of file DialectConversion.cpp.
|
inlineexplicit |
Definition at line 815 of file DialectConversion.cpp.
void ConversionPatternRewriterImpl::applyRewrites | ( | ) |
Apply all requested operation rewrites.
This method is invoked when the conversion process succeeds.
Definition at line 1017 of file DialectConversion.cpp.
References argConverter, argReplacements, mlir::IRObjectWithUseList< OperandType >::dropAllUses(), eraseDanglingBlocks(), mlir::Operation::getBlock(), mlir::detail::IROperandBase::getOwner(), mlir::Value::getType(), mlir::Operation::isBeforeInBlock(), mapping, mlir::Value::replaceAllUsesWith(), replacements, and unresolvedMaterializations.
Block * ConversionPatternRewriterImpl::applySignatureConversion | ( | Region * | region, |
TypeConverter::SignatureConversion & | conversion, | ||
TypeConverter * | converter | ||
) |
Apply a signature conversion on the given region, using converter
for materializations if not null.
Definition at line 1302 of file DialectConversion.cpp.
References convertBlockSignature(), mlir::Region::empty(), and mlir::Region::front().
FailureOr< Block * > ConversionPatternRewriterImpl::convertBlockSignature | ( | Block * | block, |
TypeConverter * | converter, | ||
TypeConverter::SignatureConversion * | conversion = nullptr |
||
) |
Convert the signature of the given block.
Definition at line 1285 of file DialectConversion.cpp.
References argConverter, argReplacements, blockActions, mlir::failed(), mlir::failure(), and mapping.
Referenced by applySignatureConversion(), convertNonEntryRegionTypes(), and convertRegionTypes().
LogicalResult ConversionPatternRewriterImpl::convertNonEntryRegionTypes | ( | Region * | region, |
TypeConverter & | converter, | ||
ArrayRef< TypeConverter::SignatureConversion > | blockConversions = {} |
||
) |
Convert the types of non-entry block arguments within the given region.
Definition at line 1325 of file DialectConversion.cpp.
References argConverter, convertBlockSignature(), mlir::Region::empty(), mlir::failed(), mlir::failure(), mlir::Region::getBlocks(), and mlir::success().
Referenced by convertRegionTypes().
FailureOr< Block * > ConversionPatternRewriterImpl::convertRegionTypes | ( | Region * | region, |
TypeConverter & | converter, | ||
TypeConverter::SignatureConversion * | entryConversion | ||
) |
Convert the types of block arguments within the given region.
Definition at line 1310 of file DialectConversion.cpp.
References argConverter, convertBlockSignature(), convertNonEntryRegionTypes(), mlir::Region::empty(), mlir::failed(), mlir::failure(), and mlir::Region::front().
void ConversionPatternRewriterImpl::discardRewrites | ( | ) |
Cleanup and destroy any generated rewrite operations.
This method is invoked when the conversion process fails.
Definition at line 1003 of file DialectConversion.cpp.
References detachNestedAndErase(), rootUpdates, undoBlockActions(), and unresolvedMaterializations.
void ConversionPatternRewriterImpl::eraseDanglingBlocks | ( | ) |
Erase any blocks that were unlinked from their regions and stored in block actions.
Definition at line 1137 of file DialectConversion.cpp.
References blockActions.
Referenced by applyRewrites().
RewriterState ConversionPatternRewriterImpl::getCurrentState | ( | ) |
Return the current state of the rewriter.
Definition at line 1078 of file DialectConversion.cpp.
References argReplacements, blockActions, createdOps, ignoredOps, replacements, rootUpdates, and unresolvedMaterializations.
bool ConversionPatternRewriterImpl::isOpIgnored | ( | Operation * | op | ) | const |
Returns true if the given operation is ignored, and does not need to be converted.
Definition at line 1264 of file DialectConversion.cpp.
Referenced by computeNecessaryMaterializations(), and legalizeUnresolvedMaterialization().
void ConversionPatternRewriterImpl::markNestedOpsIgnored | ( | Operation * | op | ) |
Recursively marks the nested operations under 'op' as ignored.
This removes them from being considered for legalization.
Definition at line 1269 of file DialectConversion.cpp.
void ConversionPatternRewriterImpl::notifyBlockBeingInlined | ( | Block * | block, |
Block * | srcBlock, | ||
Block::iterator | before | ||
) |
Notifies that a block is being inlined into another block.
Definition at line 1400 of file DialectConversion.cpp.
References blockActions.
void ConversionPatternRewriterImpl::notifyBlockIsBeingErased | ( | Block * | block | ) |
Notifies that a block is about to be erased.
Definition at line 1385 of file DialectConversion.cpp.
References blockActions, and mlir::Block::getParent().
void ConversionPatternRewriterImpl::notifyCreatedBlock | ( | Block * | block | ) |
Notifies that a block was created.
Definition at line 1391 of file DialectConversion.cpp.
References blockActions.
LogicalResult ConversionPatternRewriterImpl::notifyMatchFailure | ( | Location | loc, |
function_ref< void(Diagnostic &)> | reasonCallback | ||
) |
Notifies that a pattern match failed for the given reason.
Definition at line 1418 of file DialectConversion.cpp.
References diag(), mlir::failure(), logger, notifyCallback, and mlir::Remark.
Referenced by remapValues().
void ConversionPatternRewriterImpl::notifyOpReplaced | ( | Operation * | op, |
ValueRange | newValues | ||
) |
PatternRewriter hook for replacing the results of an operation.
Definition at line 1356 of file DialectConversion.cpp.
void ConversionPatternRewriterImpl::notifyRegionIsBeingInlinedBefore | ( | Region & | region, |
Region & | parent, | ||
Region::iterator | before | ||
) |
Notifies that the blocks of a region are about to be moved.
Definition at line 1405 of file DialectConversion.cpp.
References mlir::Region::back(), blockActions, and mlir::Region::empty().
Notifies that a block was split.
Definition at line 1395 of file DialectConversion.cpp.
References blockActions.
LogicalResult ConversionPatternRewriterImpl::remapValues | ( | StringRef | valueDiagTag, |
std::optional< Location > | inputLoc, | ||
PatternRewriter & | rewriter, | ||
ValueRange | values, | ||
SmallVectorImpl< Value > & | remapped | ||
) |
Remap the given values to those with potentially different types.
Returns success if the values could be remapped, failure otherwise. valueDiagTag
is the tag used when describing a value within a diagnostic, e.g. "operand".
Definition at line 1210 of file DialectConversion.cpp.
References buildUnresolvedTargetMaterialization(), mlir::TypeConverter::convertType(), currentTypeConverter, diag(), mlir::detail::enumerate(), mlir::failed(), mlir::Value::getLoc(), mlir::Value::getType(), mapping, notifyMatchFailure(), mlir::success(), and unresolvedMaterializations.
void ConversionPatternRewriterImpl::resetState | ( | RewriterState | state | ) |
Reset the state of the rewriter to a previously saved point.
Definition at line 1085 of file DialectConversion.cpp.
References argReplacements, mapping, replacements, rootUpdates, undoBlockActions(), and unresolvedMaterializations.
void ConversionPatternRewriterImpl::undoBlockActions | ( | unsigned | numActionsToKeep = 0 | ) |
Undo the block actions (motions, splits) one by one in reverse order until "numActionsToKeep" actions remains.
Definition at line 1143 of file DialectConversion.cpp.
References argConverter, mlir::Block::begin(), blockActions, mlir::Region::end(), mlir::Region::getBlocks(), and mlir::Block::getOperations().
Referenced by discardRewrites(), and resetState().
ArgConverter mlir::detail::ConversionPatternRewriterImpl::argConverter |
Utility used to convert block arguments.
Definition at line 926 of file DialectConversion.cpp.
Referenced by applyRewrites(), convertBlockSignature(), convertNonEntryRegionTypes(), convertRegionTypes(), and undoBlockActions().
SmallVector<BlockArgument, 4> mlir::detail::ConversionPatternRewriterImpl::argReplacements |
Ordered vector of any requested block argument replacements.
Definition at line 939 of file DialectConversion.cpp.
Referenced by applyRewrites(), convertBlockSignature(), getCurrentState(), and resetState().
SmallVector<BlockAction, 4> mlir::detail::ConversionPatternRewriterImpl::blockActions |
Ordered list of block operations (creations, splits, motions).
Definition at line 942 of file DialectConversion.cpp.
Referenced by convertBlockSignature(), eraseDanglingBlocks(), getCurrentState(), notifyBlockBeingInlined(), notifyBlockIsBeingErased(), notifyCreatedBlock(), notifyRegionIsBeingInlinedBefore(), notifySplitBlock(), and undoBlockActions().
SmallVector<Operation *> mlir::detail::ConversionPatternRewriterImpl::createdOps |
Ordered vector of all of the newly created operations during conversion.
Definition at line 929 of file DialectConversion.cpp.
Referenced by getCurrentState().
TypeConverter* mlir::detail::ConversionPatternRewriterImpl::currentTypeConverter = nullptr |
The current type converter, or nullptr if no type converter is currently active.
Definition at line 965 of file DialectConversion.cpp.
Referenced by mlir::PDLConversionConfig::notifyRewriteBegin(), mlir::PDLConversionConfig::notifyRewriteEnd(), mlir::registerConversionPDLFunctions(), and remapValues().
A set of operations that should no longer be considered for legalization, but were not directly replace/erased/etc.
by a pattern. These are generally child operations of other operations who were replaced/erased/etc. This is not meant to be an exhaustive list of all operations, but the minimal set that can be used to detect if a given operation should be ignored
. For example, we may add the operations that define non-empty regions to the set, but not any of the others. This simplifies the amount of memory needed as we can query if the parent operation was ignored.
Definition at line 953 of file DialectConversion.cpp.
Referenced by getCurrentState().
llvm::ScopedPrinter mlir::detail::ConversionPatternRewriterImpl::logger {llvm::dbgs()} |
A logger used to emit diagnostics during the conversion process.
Definition at line 977 of file DialectConversion.cpp.
Referenced by notifyMatchFailure().
ConversionValueMapping mlir::detail::ConversionPatternRewriterImpl::mapping |
Definition at line 923 of file DialectConversion.cpp.
Referenced by applyRewrites(), computeNecessaryMaterializations(), convertBlockSignature(), legalizeUnresolvedMaterialization(), remapValues(), replaceMaterialization(), and resetState().
function_ref<void(Diagnostic &)> mlir::detail::ConversionPatternRewriterImpl::notifyCallback |
This allows the user to collect the match failure message.
Definition at line 968 of file DialectConversion.cpp.
Referenced by notifyMatchFailure().
SmallVector<unsigned, 4> mlir::detail::ConversionPatternRewriterImpl::operationsWithChangedResults |
A vector of indices into replacements
of operations that were replaced with values with different result types than the original operation, e.g.
1->N conversion of some kind.
Definition at line 961 of file DialectConversion.cpp.
SmallPtrSet<Operation *, 1> mlir::detail::ConversionPatternRewriterImpl::pendingRootUpdates |
A set of operations that have pending updates.
This tracking isn't strictly necessary, and is thus only active during debug builds for extra verification.
Definition at line 974 of file DialectConversion.cpp.
llvm::MapVector<Operation *, OpReplacement> mlir::detail::ConversionPatternRewriterImpl::replacements |
Ordered map of requested operation replacements.
Definition at line 936 of file DialectConversion.cpp.
Referenced by applyRewrites(), getCurrentState(), and resetState().
SmallVector<OperationTransactionState, 4> mlir::detail::ConversionPatternRewriterImpl::rootUpdates |
A transaction state for each of operations that were updated in-place.
Definition at line 956 of file DialectConversion.cpp.
Referenced by discardRewrites(), getCurrentState(), and resetState().
SmallVector<UnresolvedMaterialization> mlir::detail::ConversionPatternRewriterImpl::unresolvedMaterializations |
Ordered vector of all unresolved type conversion materializations during conversion.
Definition at line 933 of file DialectConversion.cpp.
Referenced by applyRewrites(), computeNecessaryMaterializations(), discardRewrites(), getCurrentState(), remapValues(), and resetState().