MLIR  20.0.0git
Classes | Public Member Functions | Public Attributes | List of all members
mlir::detail::ConversionPatternRewriterImpl Struct Reference
+ Inheritance diagram for mlir::detail::ConversionPatternRewriterImpl:

Classes

struct  SingleEraseRewriter
 A rewriter that keeps track of erased ops and blocks. More...
 

Public Member Functions

 ConversionPatternRewriterImpl (MLIRContext *ctx, const ConversionConfig &config)
 
RewriterState getCurrentState ()
 Return the current state of the rewriter. More...
 
void applyRewrites ()
 Apply all requested operation rewrites. More...
 
void resetState (RewriterState state)
 Reset the state of the rewriter to a previously saved point. More...
 
template<typename RewriteTy , typename... Args>
void appendRewrite (Args &&...args)
 Append a rewrite. More...
 
void undoRewrites (unsigned numRewritesToKeep=0)
 Undo the rewrites (motions, splits) one by one in reverse order until "numRewritesToKeep" rewrites 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
 Return "true" if the given operation is ignored, and does not need to be converted. More...
 
bool wasOpReplaced (Operation *op) const
 Return "true" if the given operation was replaced or erased. More...
 
FailureOr< Block * > convertRegionTypes (ConversionPatternRewriter &rewriter, Region *region, const TypeConverter &converter, TypeConverter::SignatureConversion *entryConversion)
 Convert the types of block arguments within the given region. More...
 
BlockapplySignatureConversion (ConversionPatternRewriter &rewriter, Block *block, const TypeConverter *converter, TypeConverter::SignatureConversion &signatureConversion)
 Apply the given signature conversion on the given block. More...
 
Value buildUnresolvedMaterialization (MaterializationKind kind, OpBuilder::InsertPoint ip, Location loc, ValueRange inputs, Type outputType, Type originalType, const TypeConverter *converter)
 Build an unresolved materialization operation given an output type and set of input operands. More...
 
void insertNTo1Materialization (OpBuilder::InsertPoint ip, Location loc, ValueRange replacements, Value originalValue, const TypeConverter *converter)
 Build an N:1 materialization for the given original value that was replaced with the given replacement values. More...
 
Value findOrBuildReplacementValue (Value value, const TypeConverter *converter)
 Find a replacement value for the given SSA value in the conversion value mapping. More...
 
void notifyOperationInserted (Operation *op, OpBuilder::InsertPoint previous) override
 Notify the listener that the specified operation was inserted. More...
 
void notifyOpReplaced (Operation *op, ArrayRef< ReplacementValues > newValues)
 Notifies that an op is about to be replaced with the given values. More...
 
void notifyBlockIsBeingErased (Block *block)
 Notifies that a block is about to be erased. More...
 
void notifyBlockInserted (Block *block, Region *previous, Region::iterator previousIt) override
 Notifies that a block was inserted. More...
 
void notifyBlockBeingInlined (Block *block, Block *srcBlock, Block::iterator before)
 Notifies that a block is being inlined into another block. More...
 
void notifyMatchFailure (Location loc, function_ref< void(Diagnostic &)> reasonCallback) override
 Notifies that a pattern match failed for the given reason. More...
 
- Public Member Functions inherited from mlir::RewriterBase::Listener
 Listener ()
 
virtual void notifyBlockErased (Block *block)
 Notify the listener that the specified block is about to be erased. More...
 
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 notifyOperationErased (Operation *op)
 Notify the listener that the specified operation is about to be erased. 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...
 
- Public Member Functions inherited from mlir::OpBuilder::Listener
 Listener ()
 
virtual ~Listener ()=default
 
- Public Member Functions inherited from mlir::OpBuilder::ListenerBase
Kind getKind () const
 

Public Attributes

MLIRContextcontext
 MLIR context. More...
 
SingleEraseRewriter eraseRewriter
 A rewriter that keeps track of ops/block that were already erased and skips duplicate op/block erasures. More...
 
ConversionValueMapping mapping
 
SmallVector< std::unique_ptr< IRRewrite > > rewrites
 Ordered list of block operations (creations, splits, motions). More...
 
SetVector< Operation * > ignoredOps
 A set of operations that should no longer be considered for legalization. More...
 
SetVector< Operation * > replacedOps
 A set of operations that were replaced/erased. More...
 
DenseMap< UnrealizedConversionCastOp, UnresolvedMaterializationRewrite * > unresolvedMaterializations
 A mapping of all unresolved materializations (UnrealizedConversionCastOp) to the corresponding rewrite objects. More...
 
const TypeConvertercurrentTypeConverter = nullptr
 The current type converter, or nullptr if no type converter is currently active. More...
 
DenseMap< Region *, const TypeConverter * > regionToConverter
 A mapping of regions to type converters that should be used when converting the arguments of blocks within that region. More...
 
const ConversionConfigconfig
 Dialect conversion configuration. 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...
 

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::RewriterBase::Listener
static bool classof (const OpBuilder::Listener *base)
 
- Protected Member Functions inherited from mlir::OpBuilder::Listener
 Listener (Kind kind)
 
- Protected Member Functions inherited from mlir::OpBuilder::ListenerBase
 ListenerBase (Kind kind)
 

Detailed Description

Definition at line 729 of file DialectConversion.cpp.

Constructor & Destructor Documentation

◆ ConversionPatternRewriterImpl()

mlir::detail::ConversionPatternRewriterImpl::ConversionPatternRewriterImpl ( MLIRContext ctx,
const ConversionConfig config 
)
inlineexplicit

Definition at line 730 of file DialectConversion.cpp.

Member Function Documentation

◆ appendRewrite()

template<typename RewriteTy , typename... Args>
void mlir::detail::ConversionPatternRewriterImpl::appendRewrite ( Args &&...  args)
inline

Append a rewrite.

Rewrites are committed upon success and rolled back upon failure.

Definition at line 751 of file DialectConversion.cpp.

◆ applyRewrites()

void ConversionPatternRewriterImpl::applyRewrites ( )

Apply all requested operation rewrites.

This method is invoked when the conversion process succeeds.

Definition at line 1074 of file DialectConversion.cpp.

References config, context, eraseRewriter, mlir::ConversionConfig::listener, rewrite(), and rewrites.

Referenced by mlir::OperationConverter::convertOperations().

◆ applySignatureConversion()

Block * ConversionPatternRewriterImpl::applySignatureConversion ( ConversionPatternRewriter rewriter,
Block block,
const TypeConverter converter,
TypeConverter::SignatureConversion signatureConversion 
)

◆ buildUnresolvedMaterialization()

Value ConversionPatternRewriterImpl::buildUnresolvedMaterialization ( MaterializationKind  kind,
OpBuilder::InsertPoint  ip,
Location  loc,
ValueRange  inputs,
Type  outputType,
Type  originalType,
const TypeConverter converter 
)

◆ convertRegionTypes()

FailureOr< Block * > ConversionPatternRewriterImpl::convertRegionTypes ( ConversionPatternRewriter rewriter,
Region region,
const TypeConverter converter,
TypeConverter::SignatureConversion entryConversion 
)

Convert the types of block arguments within the given region.

Definition at line 1189 of file DialectConversion.cpp.

References applySignatureConversion(), mlir::TypeConverter::convertBlockSignature(), mlir::Region::empty(), mlir::Region::front(), and regionToConverter.

◆ findOrBuildReplacementValue()

Value ConversionPatternRewriterImpl::findOrBuildReplacementValue ( Value  value,
const TypeConverter converter 
)

Find a replacement value for the given SSA value in the conversion value mapping.

The replacement value must have the same type as the given SSA value. If there is no replacement value with the correct type, find the latest replacement value (regardless of the type) and build a source materialization.

Definition at line 1381 of file DialectConversion.cpp.

References buildUnresolvedMaterialization(), computeInsertPoint(), mlir::Value::getLoc(), mlir::Value::getType(), mlir::Value::getUsers(), and mapping.

◆ getCurrentState()

RewriterState ConversionPatternRewriterImpl::getCurrentState ( )

Return the current state of the rewriter.

Definition at line 1090 of file DialectConversion.cpp.

References ignoredOps, replacedOps, and rewrites.

◆ insertNTo1Materialization()

void ConversionPatternRewriterImpl::insertNTo1Materialization ( OpBuilder::InsertPoint  ip,
Location  loc,
ValueRange  replacements,
Value  originalValue,
const TypeConverter converter 
)

Build an N:1 materialization for the given original value that was replaced with the given replacement values.

This is a workaround around incomplete 1:N support in the dialect conversion driver. The conversion mapping can store only 1:1 replacements and the conversion patterns only support single Value replacements in the adaptor, so N values must be converted back to a single value. This function will be deleted when full 1:N support has been added.

This function inserts an argument materialization back to the original type, followed by a target materialization to the legalized type (if applicable).

Definition at line 1348 of file DialectConversion.cpp.

References buildUnresolvedMaterialization(), computeInsertPoint(), mlir::TypeConverter::convertType(), mlir::Value::getType(), mlir::ValueRange::getType(), and mapping.

Referenced by applySignatureConversion(), and notifyOpReplaced().

◆ isOpIgnored()

bool ConversionPatternRewriterImpl::isOpIgnored ( Operation op) const

Return "true" if the given operation is ignored, and does not need to be converted.

Definition at line 1176 of file DialectConversion.cpp.

References ignoredOps, and replacedOps.

◆ notifyBlockBeingInlined()

void ConversionPatternRewriterImpl::notifyBlockBeingInlined ( Block block,
Block srcBlock,
Block::iterator  before 
)

Notifies that a block is being inlined into another block.

Definition at line 1530 of file DialectConversion.cpp.

◆ notifyBlockInserted()

void ConversionPatternRewriterImpl::notifyBlockInserted ( Block block,
Region previous,
Region::iterator  previousIt 
)
overridevirtual

Notifies that a block was inserted.

Reimplemented from mlir::OpBuilder::Listener.

Definition at line 1505 of file DialectConversion.cpp.

References mlir::Region::end(), mlir::Operation::getName(), mlir::Block::getParentOp(), logger, and wasOpReplaced().

◆ notifyBlockIsBeingErased()

void ConversionPatternRewriterImpl::notifyBlockIsBeingErased ( Block block)

Notifies that a block is about to be erased.

Definition at line 1501 of file DialectConversion.cpp.

◆ notifyMatchFailure()

void ConversionPatternRewriterImpl::notifyMatchFailure ( Location  loc,
function_ref< void(Diagnostic &)>  reasonCallback 
)
overridevirtual

Notifies that a pattern match failed for the given reason.

Reimplemented from mlir::RewriterBase::Listener.

Definition at line 1535 of file DialectConversion.cpp.

References config, diag(), logger, mlir::ConversionConfig::notifyCallback, and mlir::Remark.

Referenced by remapValues().

◆ notifyOperationInserted()

void ConversionPatternRewriterImpl::notifyOperationInserted ( Operation op,
OpBuilder::InsertPoint  previous 
)
overridevirtual

Notify the listener that the specified operation was inserted.

  • If the operation was moved, then previous is the previous location of the op.
  • If the operation was unlinked before it was inserted, then previous is empty.

Note: Creating an (unlinked) op does not trigger this notification.

Reimplemented from mlir::OpBuilder::Listener.

Definition at line 1420 of file DialectConversion.cpp.

References mlir::Block::end(), mlir::OpBuilder::InsertPoint::getBlock(), mlir::Operation::getName(), mlir::Operation::getParentOp(), mlir::OpBuilder::InsertPoint::getPoint(), mlir::OpBuilder::InsertPoint::isSet(), logger, and wasOpReplaced().

◆ notifyOpReplaced()

void ConversionPatternRewriterImpl::notifyOpReplaced ( Operation op,
ArrayRef< ReplacementValues newValues 
)

◆ remapValues()

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 1113 of file DialectConversion.cpp.

References buildUnresolvedMaterialization(), computeInsertPoint(), mlir::TypeConverter::convertType(), currentTypeConverter, diag(), mlir::detail::enumerate(), mlir::Value::getLoc(), mlir::Value::getType(), mapping, and notifyMatchFailure().

Referenced by mlir::ConversionPattern::matchAndRewrite().

◆ resetState()

void ConversionPatternRewriterImpl::resetState ( RewriterState  state)

Reset the state of the rewriter to a previously saved point.

Definition at line 1094 of file DialectConversion.cpp.

◆ undoRewrites()

void ConversionPatternRewriterImpl::undoRewrites ( unsigned  numRewritesToKeep = 0)

Undo the rewrites (motions, splits) one by one in reverse order until "numRewritesToKeep" rewrites remains.

Definition at line 1106 of file DialectConversion.cpp.

References rewrite(), and rewrites.

Referenced by mlir::OperationConverter::convertOperations().

◆ wasOpReplaced()

bool ConversionPatternRewriterImpl::wasOpReplaced ( Operation op) const

Return "true" if the given operation was replaced or erased.

Definition at line 1181 of file DialectConversion.cpp.

References replacedOps.

Referenced by notifyBlockInserted(), and notifyOperationInserted().

Member Data Documentation

◆ config

const ConversionConfig& mlir::detail::ConversionPatternRewriterImpl::config

Dialect conversion configuration.

Definition at line 944 of file DialectConversion.cpp.

Referenced by applyRewrites(), applySignatureConversion(), and notifyMatchFailure().

◆ context

MLIRContext* mlir::detail::ConversionPatternRewriterImpl::context

MLIR context.

Definition at line 905 of file DialectConversion.cpp.

Referenced by applyRewrites(), and mlir::OperationConverter::convertOperations().

◆ currentTypeConverter

const TypeConverter* mlir::detail::ConversionPatternRewriterImpl::currentTypeConverter = nullptr

◆ eraseRewriter

SingleEraseRewriter mlir::detail::ConversionPatternRewriterImpl::eraseRewriter

A rewriter that keeps track of ops/block that were already erased and skips duplicate op/block erasures.

This rewriter is used during the "cleanup" phase.

Definition at line 910 of file DialectConversion.cpp.

Referenced by applyRewrites(), and mlir::OperationConverter::convertOperations().

◆ ignoredOps

SetVector<Operation *> mlir::detail::ConversionPatternRewriterImpl::ignoredOps

A set of operations that should no longer be considered for legalization.

E.g., ops that are recursively legal. Ops that were replaced/erased are tracked separately.

Definition at line 922 of file DialectConversion.cpp.

Referenced by getCurrentState(), isOpIgnored(), and notifyOpReplaced().

◆ logger

llvm::ScopedPrinter mlir::detail::ConversionPatternRewriterImpl::logger {llvm::dbgs()}

A logger used to emit diagnostics during the conversion process.

Definition at line 953 of file DialectConversion.cpp.

Referenced by notifyBlockInserted(), notifyMatchFailure(), and notifyOperationInserted().

◆ mapping

ConversionValueMapping mlir::detail::ConversionPatternRewriterImpl::mapping

◆ pendingRootUpdates

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 950 of file DialectConversion.cpp.

◆ regionToConverter

DenseMap<Region *, const TypeConverter *> mlir::detail::ConversionPatternRewriterImpl::regionToConverter

A mapping of regions to type converters that should be used when converting the arguments of blocks within that region.

Definition at line 941 of file DialectConversion.cpp.

Referenced by convertRegionTypes().

◆ replacedOps

SetVector<Operation *> mlir::detail::ConversionPatternRewriterImpl::replacedOps

A set of operations that were replaced/erased.

Such ops are not erased immediately but only when the dialect conversion succeeds. In the mean time, they should no longer be considered for legalization and any attempt to modify/access them is invalid rewriter API usage.

Definition at line 928 of file DialectConversion.cpp.

Referenced by getCurrentState(), isOpIgnored(), notifyOpReplaced(), and wasOpReplaced().

◆ rewrites

SmallVector<std::unique_ptr<IRRewrite> > mlir::detail::ConversionPatternRewriterImpl::rewrites

Ordered list of block operations (creations, splits, motions).

Definition at line 917 of file DialectConversion.cpp.

Referenced by applyRewrites(), getCurrentState(), and undoRewrites().

◆ unresolvedMaterializations

DenseMap<UnrealizedConversionCastOp, UnresolvedMaterializationRewrite *> mlir::detail::ConversionPatternRewriterImpl::unresolvedMaterializations

A mapping of all unresolved materializations (UnrealizedConversionCastOp) to the corresponding rewrite objects.

Definition at line 933 of file DialectConversion.cpp.

Referenced by mlir::OperationConverter::convertOperations(), and notifyOpReplaced().


The documentation for this struct was generated from the following file: