OpInterface definitions
ConversionPatternDescriptorOpInterface (ConversionPatternDescriptorOpInterface
) ¶
This interface should be implemented by ops that select conversion patterns
of a transform.apply_patterns
op. It provides a method to populate a
rewrite pattern set with conversion patterns.
Note: Non-conversion rewrite patterns should not be populated with
ConversionPatternDescriptorOpInterface
because it is not generally safe
to use non-conversion rewrite patterns as part of a dialect conversion.
Methods: ¶
populatePatterns
¶
void populatePatterns(::mlir::TypeConverter &typeConverter, ::mlir::RewritePatternSet &patterns);
Populate conversion patterns into the given pattern set with the given type converter.
NOTE: This method must be implemented by the user.
populateConversionTargetRules
¶
void populateConversionTargetRules(const ::mlir::TypeConverter &typeConverter, ::mlir::ConversionTarget &conversionTarget);
Populate the ConversionTarget using the final TypeConverter. The default implementation is to do nothing. Overriding this method can be useful in order to setup the ConversionTarget for structural type conversions. In such a situation, an op’s legality depends on using the TypeConverter to determine whether the op’s operand and result types are legal (defined as converting to themselves).
NOTE: This method must be implemented by the user.
getTypeConverter
¶
std::unique_ptr<::mlir::TypeConverter> getTypeConverter();
Return the type converter to be used with this pattern set. If no type converter is specified, the default type converter of the enclosing “apply_conversion_patterns” op is used.
NOTE: This method must be implemented by the user.
verifyTypeConverter
¶
::mlir::LogicalResult verifyTypeConverter(TypeConverterBuilderOpInterface builder);
Verify the default type converter that is provided by the enclosing “apply_conversion_patterns” op.
NOTE: This method must be implemented by the user.
FindPayloadReplacementOpInterface (FindPayloadReplacementOpInterface
) ¶
This interface is queried by the TrackingListener
and can be implemented
by payload ops to indicate that the lookup should be continue with its
operands when looking for payload op replacements.
Example: Consider the case where a tracked “test.foo” payload op is replaced
with a new “test.foo” op, but wrapped in a “tensor.reshape” op. In that
case, the mapping of the original “test.foo” op should be updated with the
new “test.foo” op. A “tensor.reshape” is a metadata-only op that should be
skipped when inspecting the replacement values of the original “test.foo”
op. More details can be found at TrackingListener
documentation.
Note: Ops that implement CastOpInterface
do not need to implement this
interface. Such ops are skipped by default. This interface should be
implemented by cast-like/metadata-only ops that cannot implement
CastOpInterface
.
Methods: ¶
getNextOperands
¶
::llvm::SmallVector<::mlir::Value> getNextOperands();
Return the operands at which the lookup for replacement payload ops should continue.
NOTE: This method must be implemented by the user.
PatternDescriptorOpInterface (PatternDescriptorOpInterface
) ¶
This interface should be implemented by ops that select rewrite patterns of
a transform.apply_patterns
op. It provides a method to populate a rewrite
pattern set with patterns.
Note: Conversion patterns are rewrite patterns in MLIR, but they should not
be populated with PatternDescriptorOpInterface
because they cannot be
used in a greedy pattern rewrite.
Methods: ¶
populatePatterns
¶
void populatePatterns(::mlir::RewritePatternSet &patterns);
Populate rewrite patterns into the given pattern set.
NOTE: This method must be implemented by the user.
populatePatternsWithState
¶
void populatePatternsWithState(::mlir::RewritePatternSet &patterns, ::mlir::transform::TransformState &state);
Populate rewrite patterns into the given pattern set taking into account the transform state.
NOTE: This method must be implemented by the user.
TransformOpInterface (TransformOpInterface
) ¶
This interface is to be implemented by operations that identify transformations to be performed on other operations. The former are referred to as transform IR operations. The latter are referred to as payload IR operations. Such transform IR operations provide a fine-grain control mechanism over how transformations are applied by using and defining transform IR values, referred to as handles, that correspond to sets of operations in the payload IR. Transformations are applied starting from the operations identified by handles, but may affect other operations as well. Further restrictions may be imposed by flows that rely on transform IR operations to control transformations.
Methods: ¶
apply
¶
::mlir::DiagnosedSilenceableFailure apply(::mlir::transform::TransformRewriter &rewriter, ::mlir::transform::TransformResults &transformResults, ::mlir::transform::TransformState &state);
Applies the transformation represented by the current operation. This accepts as arguments the object that must be populated with results of the current transformation and a transformation state object that can be used for queries, e.g., to obtain the list of operations on which the transformation represented by the current op is targeted. Returns a special status object indicating whether the transformation succeeded or failed, and, if it failed, whether the failure is recoverable or not.
IR must be created, modified and deleted with the provided rewriter. implementations are responsible for setting the insertion point of the rewriter to the desired location.
NOTE: This method must be implemented by the user.
allowsRepeatedHandleOperands
¶
bool allowsRepeatedHandleOperands();
Indicates whether the op instance allows its handle operands to be associated with the same payload operations.
NOTE: This method must be implemented by the user.
TypeConverterBuilderOpInterface (TypeConverterBuilderOpInterface
) ¶
This interface should be implemented by ops that specify a type converter for a dialect conversion. Such ops can be used with “apply_conversion_patterns”.
Methods: ¶
getTypeConverter
¶
std::unique_ptr<::mlir::TypeConverter> getTypeConverter();
Return the type converter to be used with a dialect conversion.
NOTE: This method must be implemented by the user.
getTypeConverterType
¶
static StringRef getTypeConverterType();
Return the type of type converter that this getTypeConverter
returns.
This function is used for op verification.
NOTE: This method must be implemented by the user.