MLIR
20.0.0git
|
This class implements a pattern rewriter for use with ConversionPatterns. More...
#include "mlir/Transforms/DialectConversion.h"
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... | |
Value | 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, ArrayRef< ValueRange > newValues) |
Replace the given operation with the new value ranges. More... | |
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<typename CallableT > | |
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<typename CallbackT > | |
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<typename CallbackT > | |
std::enable_if_t<!std::is_convertible< CallbackT, Twine >::value, LogicalResult > | notifyMatchFailure (Operation *op, CallbackT &&reasonCallback) |
template<typename ArgT > | |
LogicalResult | notifyMatchFailure (ArgT &&arg, const Twine &msg) |
template<typename ArgT > | |
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 | clearInsertionPoint () |
Reset the insertion point to no location. More... | |
InsertPoint | 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... | |
Block::iterator | 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... | |
Operation * | insert (Operation *op) |
Insert the given operation at the current insertion point and return it. More... | |
Operation * | create (const OperationState &state) |
Creates an operation given the fields represented as an OperationState. More... | |
Operation * | 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) |
Attempts to fold the given operation and places new results within results . More... | |
Operation * | 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... | |
Operation * | clone (Operation &op) |
Operation * | cloneWithoutRegions (Operation &op, IRMapping &mapper) |
Creates a deep copy of this operation but keep the operation regions empty. More... | |
Operation * | cloneWithoutRegions (Operation &op) |
template<typename OpT > | |
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) | |
Builder (Operation *op) | |
MLIRContext * | getContext () const |
Location | getUnknownLoc () |
Location | getFusedLoc (ArrayRef< Location > locs, Attribute metadata=Attribute()) |
FloatType | getFloat4E2M1FNType () |
FloatType | getFloat6E2M3FNType () |
FloatType | getFloat6E3M2FNType () |
FloatType | getFloat8E5M2Type () |
FloatType | getFloat8E4M3Type () |
FloatType | getFloat8E4M3FNType () |
FloatType | getFloat8E5M2FNUZType () |
FloatType | getFloat8E4M3FNUZType () |
FloatType | getFloat8E4M3B11FNUZType () |
FloatType | getFloat8E3M4Type () |
FloatType | getFloat8E8M0FNUType () |
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... | |
NamedAttribute | getNamedAttr (StringRef name, Attribute val) |
UnitAttr | getUnitAttr () |
BoolAttr | 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) |
DenseIntElementsAttr | getBoolVectorAttr (ArrayRef< bool > values) |
Vector-typed DenseIntElementsAttr getters. values must not be empty. More... | |
DenseIntElementsAttr | getI32VectorAttr (ArrayRef< int32_t > values) |
DenseIntElementsAttr | getI64VectorAttr (ArrayRef< int64_t > values) |
DenseIntElementsAttr | getIndexVectorAttr (ArrayRef< int64_t > values) |
DenseFPElementsAttr | getF32VectorAttr (ArrayRef< float > values) |
DenseFPElementsAttr | getF64VectorAttr (ArrayRef< double > values) |
DenseIntElementsAttr | getI32TensorAttr (ArrayRef< int32_t > values) |
Tensor-typed DenseIntElementsAttr getters. More... | |
DenseIntElementsAttr | getI64TensorAttr (ArrayRef< int64_t > values) |
DenseIntElementsAttr | getIndexTensorAttr (ArrayRef< int64_t > values) |
DenseBoolArrayAttr | getDenseBoolArrayAttr (ArrayRef< bool > values) |
Tensor-typed DenseArrayAttr getters. More... | |
DenseI8ArrayAttr | getDenseI8ArrayAttr (ArrayRef< int8_t > values) |
DenseI16ArrayAttr | getDenseI16ArrayAttr (ArrayRef< int16_t > values) |
DenseI32ArrayAttr | getDenseI32ArrayAttr (ArrayRef< int32_t > values) |
DenseI64ArrayAttr | getDenseI64ArrayAttr (ArrayRef< int64_t > values) |
DenseF32ArrayAttr | getDenseF32ArrayAttr (ArrayRef< float > values) |
DenseF64ArrayAttr | 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) |
AffineExpr | getAffineDimExpr (unsigned position) |
AffineExpr | getAffineSymbolExpr (unsigned position) |
AffineExpr | getAffineConstantExpr (int64_t constant) |
AffineMap | getEmptyAffineMap () |
Returns a zero result affine map with no dimensions or symbols: () -> (). More... | |
AffineMap | getConstantAffineMap (int64_t val) |
Returns a single constant result affine map with 0 dimensions and 0 symbols. More... | |
AffineMap | getDimIdentityMap () |
AffineMap | getMultiDimIdentityMap (unsigned rank) |
AffineMap | getSymbolIdentityMap () |
AffineMap | getSingleDimShiftAffineMap (int64_t shift) |
Returns a map that shifts its (single) input dimension by 'shift'. More... | |
AffineMap | getShiftedAffineMap (AffineMap map, int64_t shift) |
Returns an affine map that is a translation (shift) of all result expressions in 'map' by 'shift'. More... | |
Friends | |
struct | OperationConverter |
Additional Inherited Members | |
Static Public Member Functions inherited from mlir::OpBuilder | |
static OpBuilder | atBlockBegin (Block *block, Listener *listener=nullptr) |
Create a builder and set the insertion point to before the first operation in the block but still inside the block. More... | |
static OpBuilder | atBlockEnd (Block *block, Listener *listener=nullptr) |
Create a builder and set the insertion point to after the last operation in the block but still inside the block. More... | |
static OpBuilder | atBlockTerminator (Block *block, Listener *listener=nullptr) |
Create a builder and set the insertion point to before the block terminator. More... | |
Protected Member Functions inherited from mlir::RewriterBase | |
RewriterBase (MLIRContext *ctx, OpBuilder::Listener *listener=nullptr) | |
Initialize the builder. More... | |
RewriterBase (const OpBuilder &otherBuilder) | |
RewriterBase (Operation *op, OpBuilder::Listener *listener=nullptr) | |
virtual | ~RewriterBase () |
Protected Attributes inherited from mlir::OpBuilder | |
Listener * | listener |
The optional listener for events of this builder. More... | |
Protected Attributes inherited from mlir::Builder | |
MLIRContext * | context |
This class implements a pattern rewriter for use with ConversionPatterns.
It extends the base PatternRewriter and provides special conversion specific hooks.
Definition at line 735 of file DialectConversion.h.
|
overridedefault |
Block * ConversionPatternRewriter::applySignatureConversion | ( | Block * | block, |
TypeConverter::SignatureConversion & | conversion, | ||
const TypeConverter * | converter = nullptr |
||
) |
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 argument/target materialization rules, the dialect conversion may fail to legalize unresolved materializations.
Definition at line 1617 of file DialectConversion.cpp.
References mlir::Block::getParentOp().
|
overridevirtual |
PatternRewriter hook for updating the given operation in-place.
Reimplemented from mlir::RewriterBase.
Definition at line 1731 of file DialectConversion.cpp.
References rewrite().
|
inlineoverridevirtual |
Indicate that the conversion rewriter can recover from rewrite failure.
Recovery is supported via rollback, allowing for continued processing of patterns even if a failure is encountered during the rewrite step.
Reimplemented from mlir::PatternRewriter.
Definition at line 796 of file DialectConversion.h.
FailureOr< Block * > ConversionPatternRewriter::convertRegionTypes | ( | Region * | region, |
const TypeConverter & | converter, | ||
TypeConverter::SignatureConversion * | entryConversion = nullptr |
||
) |
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 1626 of file DialectConversion.cpp.
References mlir::Region::getParentOp().
Referenced by mlir::convertFuncOpToLLVMFuncOp(), convertFuncOpTypes(), lowerAsEntryFunction(), and mlir::GPUFuncOpLowering::matchAndRewrite().
|
overridevirtual |
PatternRewriter hook for erase all operations in a block.
This is not yet implemented for dialect conversion.
Reimplemented from mlir::RewriterBase.
Definition at line 1601 of file DialectConversion.cpp.
References mlir::Region::getBlocks(), mlir::Block::getParent(), and mlir::Block::getParentOp().
Referenced by mlir::detail::ConversionPatternRewriterImpl::applySignatureConversion().
|
overridevirtual |
PatternRewriter hook for erasing a dead operation.
The uses of this operation must be made dead by the end of the conversion process, otherwise an assert will be issued.
Reimplemented from mlir::RewriterBase.
Definition at line 1592 of file DialectConversion.cpp.
References mlir::Operation::getName(), and mlir::Operation::getNumResults().
Referenced by lowerAsEntryFunction(), YieldOpLowering::matchAndRewrite(), AssertOpLowering::matchAndRewrite(), mlir::GPUFuncOpLowering::matchAndRewrite(), mlir::GPUPrintfOpToHIPLowering::matchAndRewrite(), mlir::GPUPrintfOpToLLVMCallLowering::matchAndRewrite(), mlir::GPUPrintfOpToVPrintfLowering::matchAndRewrite(), ConvertVariable::matchAndRewrite(), and mlir::LLVM::detail::oneToOneRewrite().
|
overridevirtual |
PatternRewriter hook for updating the given operation in-place.
Reimplemented from mlir::RewriterBase.
Definition at line 1719 of file DialectConversion.cpp.
References mlir::RewriterBase::finalizeOpModification().
detail::ConversionPatternRewriterImpl & ConversionPatternRewriter::getImpl | ( | ) |
Return a reference to the internal implementation.
Definition at line 1748 of file DialectConversion.cpp.
Referenced by mlir::OperationConverter::convertOperations().
Return the converted value of 'key' with a type defined by the type converter of the currently executing pattern.
Return nullptr in the case of failure, the remapped value otherwise.
Definition at line 1648 of file DialectConversion.cpp.
LogicalResult ConversionPatternRewriter::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.
Returns failure if the remap failed, success otherwise.
Definition at line 1657 of file DialectConversion.cpp.
Referenced by pdllConvertValues().
|
overridevirtual |
PatternRewriter hook for inlining the ops of a block into another block.
Reimplemented from mlir::RewriterBase.
Definition at line 1665 of file DialectConversion.cpp.
References mlir::Block::empty(), mlir::Block::front(), mlir::Block::getArguments(), mlir::Block::getNumArguments(), mlir::Block::getOperations(), mlir::Block::getParentOp(), and mlir::IRObjectWithUseList< OperandType >::getUsers().
Replace the given operation with the results of the new op.
The number of op results must match. The types may differ: the dialect conversion driver will reconcile any surviving type mismatches at the end of the conversion process with source materializations. The original operation is erased.
Reimplemented from mlir::RewriterBase.
Definition at line 1559 of file DialectConversion.cpp.
References mlir::Operation::getResults().
|
overridevirtual |
Replace the given operation with the new values.
The number of op results and replacement values must match. The types may differ: the dialect conversion driver will reconcile any surviving type mismatches at the end of the conversion process with source materializations. The given operation is erased.
Reimplemented from mlir::RewriterBase.
Definition at line 1564 of file DialectConversion.cpp.
References mlir::detail::enumerate(), mlir::Operation::getName(), and mlir::Operation::getNumResults().
Referenced by emitElementwiseComputation(), mlir::LLVM::detail::handleMultidimensionalVectors(), GPUAllReduceConversion::matchAndRewrite(), mlir::GPUDynamicSharedMemoryOpLowering::matchAndRewrite(), GPUSubgroupReduceConversion::matchAndRewrite(), mlir::gpu::index_lowering::OpLowering< Op, XOp, YOp, ZOp >::matchAndRewrite(), SpecifierGetterSetterOpConverter< Base, SourceOp >::matchAndRewrite(), mlir::OpToFuncCallLowering< SourceOp >::matchAndRewrite(), ConvertLoad::matchAndRewrite(), StorageSpecifierInitOpConverter::matchAndRewrite(), mlir::LLVM::detail::oneToOneRewrite(), and mlir::impl::scalarizeVectorOp().
void ConversionPatternRewriter::replaceOpWithMultiple | ( | Operation * | op, |
ArrayRef< ValueRange > | newValues | ||
) |
Replace the given operation with the new value ranges.
The number of op results and value ranges must match. If an original SSA value is replaced by multiple SSA values (i.e., a value range has more than 1 element), the conversion driver will insert an argument materialization to convert the N SSA values back into 1 SSA value of the original type. The given operation is erased.
Note: The argument materialization is a workaround until we have full 1:N support in the dialect conversion. (It is going to disappear from both replaceOpWithMultiple
and applySignatureConversion
.)
Definition at line 1578 of file DialectConversion.cpp.
References mlir::detail::enumerate(), mlir::Operation::getName(), and mlir::Operation::getNumResults().
void ConversionPatternRewriter::replaceUsesOfBlockArgument | ( | BlockArgument | from, |
Value | to | ||
) |
Replace all the uses of the block argument from
with value to
.
Definition at line 1635 of file DialectConversion.cpp.
References mlir::Operation::getName(), mlir::BlockArgument::getOwner(), and mlir::Block::getParentOp().
Referenced by restoreByValRefArgumentType().
|
overridevirtual |
PatternRewriter hook for updating the given operation in-place.
Note: These methods only track updates to the given operation itself, and not nested regions. Updates to regions will still require notification through other more specific hooks above.
Reimplemented from mlir::RewriterBase.
Definition at line 1710 of file DialectConversion.cpp.
|
friend |
Definition at line 855 of file DialectConversion.h.