MLIR: mlir::ConversionPatternRewriter Class Reference (original) (raw)
This class implements a pattern rewriter for use with ConversionPatterns. More...
Public Member Functions
~ConversionPatternRewriter () override
Block *
applySignatureConversion (Block *block, TypeConverter::SignatureConversion &conversion, const TypeConverter *converter=nullptr)
Apply a signature conversion to given block. More...
FailureOr< Block * >
convertRegionTypes (Region *region, const TypeConverter &converter, TypeConverter::SignatureConversion *entryConversion=nullptr)
Apply a signature conversion to each block in the given region. More...
void
replaceUsesOfBlockArgument (BlockArgument from, Value to)
Replace all the uses of the block argument from
with value to
. More...
getRemappedValue (Value key)
Return the converted value of 'key' with a type defined by the type converter of the currently executing pattern. More...
LogicalResult
getRemappedValues (ValueRange keys, SmallVectorImpl< Value > &results)
Return the converted values that replace 'keys' with types defined by the type converter of the currently executing pattern. More...
bool
canRecoverFromRewriteFailure () const override
Indicate that the conversion rewriter can recover from rewrite failure. More...
void
replaceOp (Operation *op, ValueRange newValues) override
Replace the given operation with the new values. More...
void
replaceOp (Operation *op, Operation *newOp) override
Replace the given operation with the results of the new op. More...
void
replaceOpWithMultiple (Operation *op, SmallVector< SmallVector< Value >> &&newValues)
Replace the given operation with the new value ranges. More...
template
void
replaceOpWithMultiple (Operation *op, ArrayRef< RangeT > newValues)
template
void
replaceOpWithMultiple (Operation *op, RangeT &&newValues)
void
eraseOp (Operation *op) override
PatternRewriter hook for erasing a dead operation. More...
void
eraseBlock (Block *block) override
PatternRewriter hook for erase all operations in a block. More...
void
inlineBlockBefore (Block *source, Block *dest, Block::iterator before, ValueRange argValues=std::nullopt) override
PatternRewriter hook for inlining the ops of a block into another block. More...
void
startOpModification (Operation *op) override
PatternRewriter hook for updating the given operation in-place. More...
void
finalizeOpModification (Operation *op) override
PatternRewriter hook for updating the given operation in-place. More...
void
cancelOpModification (Operation *op) override
PatternRewriter hook for updating the given operation in-place. More...
detail::ConversionPatternRewriterImpl &
getImpl ()
Return a reference to the internal implementation. More...
Public Member Functions inherited from mlir::PatternRewriter
PatternRewriter (MLIRContext *ctx)
RewriterBase (MLIRContext *ctx, OpBuilder::Listener *listener=nullptr)
Initialize the builder. More...
RewriterBase (const OpBuilder &otherBuilder)
RewriterBase (Operation *op, OpBuilder::Listener *listener=nullptr)
Public Member Functions inherited from mlir::RewriterBase
void
inlineRegionBefore (Region ®ion, Region &parent, Region::iterator before)
Move the blocks that belong to "region" before the given position in another region "parent". More...
void
inlineRegionBefore (Region ®ion, Block *before)
template<typename OpTy , typename... Args>
OpTy
replaceOpWithNewOp (Operation *op, Args &&...args)
Replace the results of the given (original) op with a new op that is created without verification (replacement). More...
void
inlineBlockBefore (Block *source, Operation *op, ValueRange argValues=std::nullopt)
Inline the operations of block 'source' before the operation 'op'. More...
void
mergeBlocks (Block *source, Block *dest, ValueRange argValues=std::nullopt)
Inline the operations of block 'source' into the end of block 'dest'. More...
Block *
splitBlock (Block *block, Block::iterator before)
Split the operations starting at "before" (inclusive) out of the given block into a new block, and return it. More...
void
moveOpBefore (Operation *op, Operation *existingOp)
Unlink this operation from its current block and insert it right before existingOp
which may be in the same or another block in the same function. More...
void
moveOpBefore (Operation *op, Block *block, Block::iterator iterator)
Unlink this operation from its current block and insert it right before iterator
in the specified block. More...
void
moveOpAfter (Operation *op, Operation *existingOp)
Unlink this operation from its current block and insert it right after existingOp
which may be in the same or another block in the same function. More...
void
moveOpAfter (Operation *op, Block *block, Block::iterator iterator)
Unlink this operation from its current block and insert it right after iterator
in the specified block. More...
void
moveBlockBefore (Block *block, Block *anotherBlock)
Unlink this block and insert it right before existingBlock
. More...
void
moveBlockBefore (Block *block, Region *region, Region::iterator iterator)
Unlink this block and insert it right before the location that the given iterator points to in the given region. More...
template
void
modifyOpInPlace (Operation *root, CallableT &&callable)
This method is a utility wrapper around an in-place modification of an operation. More...
void
replaceAllUsesWith (Value from, Value to)
Find uses of from
and replace them with to
. More...
void
replaceAllUsesWith (Block *from, Block *to)
void
replaceAllUsesWith (ValueRange from, ValueRange to)
void
replaceAllOpUsesWith (Operation *from, ValueRange to)
Find uses of from
and replace them with to
. More...
void
replaceAllOpUsesWith (Operation *from, Operation *to)
void
replaceUsesWithIf (Value from, Value to, function_ref< bool(OpOperand &)> functor, bool *allUsesReplaced=nullptr)
Find uses of from
and replace them with to
if the functor
returns true. More...
void
replaceUsesWithIf (ValueRange from, ValueRange to, function_ref< bool(OpOperand &)> functor, bool *allUsesReplaced=nullptr)
void
replaceOpUsesWithIf (Operation *from, ValueRange to, function_ref< bool(OpOperand &)> functor, bool *allUsesReplaced=nullptr)
void
replaceOpUsesWithinBlock (Operation *op, ValueRange newValues, Block *block, bool *allUsesReplaced=nullptr)
Find uses of from
within block
and replace them with to
. More...
void
replaceAllUsesExcept (Value from, Value to, Operation *exceptedUser)
Find uses of from
and replace them with to
except if the user is exceptedUser
. More...
void
replaceAllUsesExcept (Value from, Value to, const SmallPtrSetImpl< Operation * > &preservedUsers)
template
std::enable_if_t<!std::is_convertible< CallbackT, Twine >::value, LogicalResult >
notifyMatchFailure (Location loc, CallbackT &&reasonCallback)
Used to notify the listener that the IR failed to be rewritten because of a match failure, and provide a callback to populate a diagnostic with the reason why the failure occurred. More...
template
std::enable_if_t<!std::is_convertible< CallbackT, Twine >::value, LogicalResult >
notifyMatchFailure (Operation *op, CallbackT &&reasonCallback)
template
LogicalResult
notifyMatchFailure (ArgT &&arg, const Twine &msg)
template
LogicalResult
notifyMatchFailure (ArgT &&arg, const char *msg)
Public Member Functions inherited from mlir::OpBuilder
OpBuilder (MLIRContext *ctx, Listener *listener=nullptr)
Create a builder with the given context. More...
OpBuilder (Region *region, Listener *listener=nullptr)
Create a builder and set the insertion point to the start of the region. More...
OpBuilder (Region ®ion, Listener *listener=nullptr)
OpBuilder (Operation *op, Listener *listener=nullptr)
Create a builder and set insertion point to the given operation, which will cause subsequent insertions to go right before it. More...
OpBuilder (Block *block, Block::iterator insertPoint, Listener *listener=nullptr)
void
setListener (Listener *newListener)
Sets the listener of this builder to the one provided. More...
Listener *
getListener () const
Returns the current listener of this builder, or nullptr if this builder doesn't have a listener. More...
void
Reset the insertion point to no location. More...
saveInsertionPoint () const
Return a saved insertion point. More...
void
restoreInsertionPoint (InsertPoint ip)
Restore the insert point to a previously saved point. More...
void
setInsertionPoint (Block *block, Block::iterator insertPoint)
Set the insertion point to the specified location. More...
void
setInsertionPoint (Operation *op)
Sets the insertion point to the specified operation, which will cause subsequent insertions to go right before it. More...
void
setInsertionPointAfter (Operation *op)
Sets the insertion point to the node after the specified operation, which will cause subsequent insertions to go right after it. More...
void
setInsertionPointAfterValue (Value val)
Sets the insertion point to the node after the specified value. More...
void
setInsertionPointToStart (Block *block)
Sets the insertion point to the start of the specified block. More...
void
setInsertionPointToEnd (Block *block)
Sets the insertion point to the end of the specified block. More...
Block *
getInsertionBlock () const
Return the block the current insertion point belongs to. More...
getInsertionPoint () const
Returns the current insertion point of the builder. More...
Block *
getBlock () const
Returns the current block of the builder. More...
Block *
createBlock (Region *parent, Region::iterator insertPt={}, TypeRange argTypes=std::nullopt, ArrayRef< Location > locs=std::nullopt)
Add new block with 'argTypes' arguments and set the insertion point to the end of it. More...
Block *
createBlock (Block *insertBefore, TypeRange argTypes=std::nullopt, ArrayRef< Location > locs=std::nullopt)
Add new block with 'argTypes' arguments and set the insertion point to the end of it. More...
Insert the given operation at the current insertion point and return it. More...
create (const OperationState &state)
Creates an operation given the fields represented as an OperationState. More...
create (Location loc, StringAttr opName, ValueRange operands, TypeRange types={}, ArrayRef< NamedAttribute > attributes={}, BlockRange successors={}, MutableArrayRef< std::unique_ptr< Region >> regions={})
Creates an operation with the given fields. More...
template<typename OpTy , typename... Args>
OpTy
create (Location location, Args &&...args)
Create an operation of specific op type at the current insertion point. More...
template<typename OpTy , typename... Args>
void
createOrFold (SmallVectorImpl< Value > &results, Location location, Args &&...args)
Create an operation of specific op type at the current insertion point, and immediately try to fold it. More...
template<typename OpTy , typename... Args>
std::enable_if_t< OpTy::template hasTrait< OpTrait::OneResult >), Value >
createOrFold (Location location, Args &&...args)
Overload to create or fold a single result operation. More...
template<typename OpTy , typename... Args>
std::enable_if_t< OpTy::template hasTrait< OpTrait::ZeroResults >), OpTy >
createOrFold (Location location, Args &&...args)
Overload to create or fold a zero result operation. More...
LogicalResult
tryFold (Operation *op, SmallVectorImpl< Value > &results, SmallVectorImpl< Operation * > *materializedConstants=nullptr)
Attempts to fold the given operation and places new results within results
. More...
clone (Operation &op, IRMapping &mapper)
Creates a deep copy of the specified operation, remapping any operands that use values outside of the operation using the map that is provided ( leaving them alone if no entry is present). More...
cloneWithoutRegions (Operation &op, IRMapping &mapper)
Creates a deep copy of this operation but keep the operation regions empty. More...
cloneWithoutRegions (Operation &op)
template
OpT
cloneWithoutRegions (OpT op)
void
cloneRegionBefore (Region ®ion, Region &parent, Region::iterator before, IRMapping &mapping)
Clone the blocks that belong to "region" before the given position in another region "parent". More...
void
cloneRegionBefore (Region ®ion, Region &parent, Region::iterator before)
void
cloneRegionBefore (Region ®ion, Block *before)
Public Member Functions inherited from mlir::Builder
Builder (MLIRContext *context)
getContext () const
getFusedLoc (ArrayRef< Location > locs, Attribute metadata=Attribute())
FloatType
FloatType
getBF16Type ()
FloatType
getF16Type ()
FloatType
getTF32Type ()
FloatType
getF32Type ()
FloatType
getF64Type ()
FloatType
getF80Type ()
FloatType
getF128Type ()
IndexType
getIndexType ()
IntegerType
getI1Type ()
IntegerType
getI2Type ()
IntegerType
getI4Type ()
IntegerType
getI8Type ()
IntegerType
getI16Type ()
IntegerType
getI32Type ()
IntegerType
getI64Type ()
IntegerType
getIntegerType (unsigned width)
IntegerType
getIntegerType (unsigned width, bool isSigned)
FunctionType
getFunctionType (TypeRange inputs, TypeRange results)
TupleType
getTupleType (TypeRange elementTypes)
NoneType
getNoneType ()
template<typename Ty , typename... Args>
Ty
getType (Args &&...args)
Get or construct an instance of the type Ty
with provided arguments. More...
template<typename Attr , typename... Args>
Attr
getAttr (Args &&...args)
Get or construct an instance of the attribute Attr
with provided arguments. More...
getNamedAttr (StringRef name, Attribute val)
UnitAttr
getUnitAttr ()
getBoolAttr (bool value)
DictionaryAttr
getDictionaryAttr (ArrayRef< NamedAttribute > value)
IntegerAttr
getIntegerAttr (Type type, int64_t value)
IntegerAttr
getIntegerAttr (Type type, const APInt &value)
FloatAttr
getFloatAttr (Type type, double value)
FloatAttr
getFloatAttr (Type type, const APFloat &value)
StringAttr
getStringAttr (const Twine &bytes)
ArrayAttr
getArrayAttr (ArrayRef< Attribute > value)
TypedAttr
getZeroAttr (Type type)
TypedAttr
getOneAttr (Type type)
FloatAttr
getF16FloatAttr (float value)
FloatAttr
getF32FloatAttr (float value)
FloatAttr
getF64FloatAttr (double value)
IntegerAttr
getI8IntegerAttr (int8_t value)
IntegerAttr
getI16IntegerAttr (int16_t value)
IntegerAttr
getI32IntegerAttr (int32_t value)
IntegerAttr
getI64IntegerAttr (int64_t value)
IntegerAttr
getIndexAttr (int64_t value)
IntegerAttr
getSI32IntegerAttr (int32_t value)
Signed and unsigned integer attribute getters. More...
IntegerAttr
getUI32IntegerAttr (uint32_t value)
getBoolVectorAttr (ArrayRef< bool > values)
Vector-typed DenseIntElementsAttr getters. values
must not be empty. More...
getI32VectorAttr (ArrayRef< int32_t > values)
getI64VectorAttr (ArrayRef< int64_t > values)
getIndexVectorAttr (ArrayRef< int64_t > values)
getF32VectorAttr (ArrayRef< float > values)
getF64VectorAttr (ArrayRef< double > values)
getI32TensorAttr (ArrayRef< int32_t > values)
Tensor-typed DenseIntElementsAttr getters. More...
getI64TensorAttr (ArrayRef< int64_t > values)
getIndexTensorAttr (ArrayRef< int64_t > values)
getDenseBoolArrayAttr (ArrayRef< bool > values)
Tensor-typed DenseArrayAttr getters. More...
getDenseI8ArrayAttr (ArrayRef< int8_t > values)
getDenseI16ArrayAttr (ArrayRef< int16_t > values)
getDenseI32ArrayAttr (ArrayRef< int32_t > values)
getDenseI64ArrayAttr (ArrayRef< int64_t > values)
getDenseF32ArrayAttr (ArrayRef< float > values)
getDenseF64ArrayAttr (ArrayRef< double > values)
ArrayAttr
getAffineMapArrayAttr (ArrayRef< AffineMap > values)
ArrayAttr
getBoolArrayAttr (ArrayRef< bool > values)
ArrayAttr
getI32ArrayAttr (ArrayRef< int32_t > values)
ArrayAttr
getI64ArrayAttr (ArrayRef< int64_t > values)
ArrayAttr
getIndexArrayAttr (ArrayRef< int64_t > values)
ArrayAttr
getF32ArrayAttr (ArrayRef< float > values)
ArrayAttr
getF64ArrayAttr (ArrayRef< double > values)
ArrayAttr
getStrArrayAttr (ArrayRef< StringRef > values)
ArrayAttr
getTypeArrayAttr (TypeRange values)
getAffineDimExpr (unsigned position)
getAffineSymbolExpr (unsigned position)
getAffineConstantExpr (int64_t constant)
Returns a zero result affine map with no dimensions or symbols: () -> (). More...
getConstantAffineMap (int64_t val)
Returns a single constant result affine map with 0 dimensions and 0 symbols. More...
getMultiDimIdentityMap (unsigned rank)
getSingleDimShiftAffineMap (int64_t shift)
Returns a map that shifts its (single) input dimension by 'shift'. More...
getShiftedAffineMap (AffineMap map, int64_t shift)
Returns an affine map that is a translation (shift) of all result expressions in 'map' by 'shift'. More...
This class implements a pattern rewriter for use with ConversionPatterns.
It extends the base PatternRewriter and provides special conversion specific hooks.
Definition at line 726 of file DialectConversion.h.
Apply a signature conversion to given block.
This replaces the block with a new block containing the updated signature. The operations of the given block are inlined into the newly-created block, which is returned.
If no block argument types are changing, the original block will be left in place and returned.
A signature converison must be provided. (Type converters can construct a signature conversion with convertBlockSignature
.)
Optionally, a type converter can be provided to build materializations. Note: If no type converter was provided or the type converter does not specify any suitable source/target materialization rules, the dialect conversion may fail to legalize unresolved materializations.
Definition at line 1705 of file DialectConversion.cpp.
References mlir::Block::getParentOp().
Referenced by mlir::convertFuncOpToLLVMFuncOp().
Apply a signature conversion to each block in the given region.
This replaces each block with a new block containing the updated signature. If an updated signature would match the current signature, the respective block is left in place as is. (See applySignatureConversion
for details.) The new entry block of the region is returned.
SignatureConversions are computed with the specified type converter. This function returns "failure" if the type converter failed to compute a SignatureConversion for at least one block.
Optionally, a special SignatureConversion can be specified for the entry block. This is because the types of the entry block arguments are often tied semantically to the operation.
Definition at line 1714 of file DialectConversion.cpp.
References mlir::Region::getParentOp().
Referenced by convertFuncOpTypes(), lowerAsEntryFunction(), and mlir::GPUFuncOpLowering::matchAndRewrite().