MLIR
20.0.0git
|
A rewriter that keeps track of erased ops and blocks. More...
Public Member Functions | |
SingleEraseRewriter (MLIRContext *context) | |
void | eraseOp (Operation *op) override |
Erase the given op (unless it was already erased). More... | |
void | eraseBlock (Block *block) override |
Erase the given block (unless it was already erased). More... | |
bool | wasErased (void *ptr) const |
void | notifyOperationErased (Operation *op) override |
Notify the listener that the specified operation is about to be erased. More... | |
void | notifyBlockErased (Block *block) override |
Notify the listener that the specified block is about to be erased. More... | |
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) |
virtual void | replaceOp (Operation *op, ValueRange newValues) |
Replace the results of the given (original) operation with the specified list of values (replacements). More... | |
virtual void | replaceOp (Operation *op, Operation *newOp) |
Replace the results of the given (original) operation with the specified new op (replacement). More... | |
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... | |
virtual void | inlineBlockBefore (Block *source, Block *dest, Block::iterator before, ValueRange argValues=std::nullopt) |
Inline the operations of block 'source' into block 'dest' before the given position. 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... | |
virtual void | startOpModification (Operation *op) |
This method is used to notify the rewriter that an in-place operation modification is about to happen. More... | |
virtual void | finalizeOpModification (Operation *op) |
This method is used to signal the end of an in-place modification of the given operation. More... | |
virtual void | cancelOpModification (Operation *op) |
This method cancels a pending in-place modification. 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... | |
Public Member Functions inherited from mlir::RewriterBase::Listener | |
Listener () | |
virtual void | notifyOperationModified (Operation *op) |
Notify the listener that the specified operation was modified in-place. More... | |
virtual void | notifyOperationReplaced (Operation *op, Operation *replacement) |
Notify the listener that all uses of the specified operation's results are about to be replaced with the results of another operation. More... | |
virtual void | notifyOperationReplaced (Operation *op, ValueRange replacement) |
Notify the listener that all uses of the specified operation's results are about to be replaced with the a range of values, potentially produced by other operations. More... | |
virtual void | notifyPatternBegin (const Pattern &pattern, Operation *op) |
Notify the listener that the specified pattern is about to be applied at the specified root operation. More... | |
virtual void | notifyPatternEnd (const Pattern &pattern, LogicalResult status) |
Notify the listener that a pattern application finished with the specified status. More... | |
virtual void | notifyMatchFailure (Location loc, function_ref< void(Diagnostic &)> reasonCallback) |
Notify the listener that the pattern failed to match, and provide a callback to populate a diagnostic with the reason why the failure occurred. More... | |
Public Member Functions inherited from mlir::OpBuilder::Listener | |
Listener () | |
virtual | ~Listener ()=default |
virtual void | notifyOperationInserted (Operation *op, InsertPoint previous) |
Notify the listener that the specified operation was inserted. More... | |
virtual void | notifyBlockInserted (Block *block, Region *previous, Region::iterator previousIt) |
Notify the listener that the specified block was inserted. More... | |
Public Member Functions inherited from mlir::OpBuilder::ListenerBase | |
Kind | getKind () const |
Additional Inherited Members | |
Public Types inherited from mlir::OpBuilder::ListenerBase | |
enum class | Kind { OpBuilderListener = 0 , RewriterBaseListener = 1 } |
The kind of listener. More... | |
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... | |
Static Public Member Functions inherited from mlir::RewriterBase::Listener | |
static bool | classof (const OpBuilder::Listener *base) |
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 Member Functions inherited from mlir::OpBuilder::Listener | |
Listener (Kind kind) | |
Protected Member Functions inherited from mlir::OpBuilder::ListenerBase | |
ListenerBase (Kind kind) | |
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 |
A rewriter that keeps track of erased ops and blocks.
It ensures that no operation or block is erased multiple times. This rewriter assumes that no new IR is created between calls to eraseOp
/eraseBlock
.
Definition at line 909 of file DialectConversion.cpp.
|
inline |
Definition at line 911 of file DialectConversion.cpp.
|
inlineoverridevirtual |
Erase the given block (unless it was already erased).
Reimplemented from mlir::RewriterBase.
Definition at line 923 of file DialectConversion.cpp.
References mlir::Block::dropAllDefinedValueUses(), mlir::Block::empty(), and mlir::RewriterBase::eraseBlock().
|
inlineoverridevirtual |
Erase the given op (unless it was already erased).
Reimplemented from mlir::RewriterBase.
Definition at line 915 of file DialectConversion.cpp.
References mlir::Operation::dropAllUses(), and mlir::RewriterBase::eraseOp().
|
inlineoverridevirtual |
Notify the listener that the specified block is about to be erased.
At this point, the block has zero uses.
Reimplemented from mlir::RewriterBase::Listener.
Definition at line 935 of file DialectConversion.cpp.
|
inlineoverridevirtual |
Notify the listener that the specified operation is about to be erased.
At this point, the operation has zero uses.
Note: This notification is not triggered when unlinking an operation.
Reimplemented from mlir::RewriterBase::Listener.
Definition at line 933 of file DialectConversion.cpp.
|
inline |
Definition at line 931 of file DialectConversion.cpp.
Referenced by mlir::OperationConverter::convertOperations().