13#ifndef MLIR_TRANSFORMS_INLININGUTILS_H
14#define MLIR_TRANSFORMS_INLININGUTILS_H
27class CallableOpInterface;
60 bool wouldBeCloned)
const {
107 llvm_unreachable(
"must implement handleTerminator in the case of multiple "
122 "must implement handleTerminator in the case of one inlined block");
156 DictionaryAttr argumentAttrs)
const {
171 DictionaryAttr resultAttrs)
const {
197 bool shouldCloneInlinedRegion);
216 bool wouldBeCloned)
const;
232 DictionaryAttr argumentAttrs)
const;
235 DictionaryAttr resultAttrs)
const;
265 Region *src, Operation *inlinePoint, IRMapping &mapper,
267 std::optional<Location> inlineLoc = std::nullopt,
268 bool shouldCloneInlinedRegion =
true);
273 IRMapping &mapper,
ValueRange resultsToReplace,
275 std::optional<Location> inlineLoc = std::nullopt,
276 bool shouldCloneInlinedRegion =
true);
284 Region *src, Operation *inlinePoint,
ValueRange inlinedOperands,
286 std::optional<Location> inlineLoc = std::nullopt,
287 bool shouldCloneInlinedRegion =
true);
293 std::optional<Location> inlineLoc = std::nullopt,
294 bool shouldCloneInlinedRegion =
true);
305 CallOpInterface call, CallableOpInterface callable, Region *src,
306 bool shouldCloneInlinedRegion =
true);
Block represents an ordered list of Operations.
OpListType::iterator iterator
virtual Value handleResult(OpBuilder &builder, Operation *call, Operation *callable, Value result, DictionaryAttr resultAttrs) const
Hook to transform the callee results before using them to replace the call results.
virtual bool isLegalToInline(Operation *call, Operation *callable, bool wouldBeCloned) const
Returns true if the given operation 'callable', that implements the 'CallableOpInterface',...
virtual Operation * materializeCallConversion(OpBuilder &builder, Value input, Type resultType, Location conversionLoc) const
Attempt to materialize a conversion for a type mismatch between a call from this dialect,...
virtual bool shouldAnalyzeRecursively(Operation *op) const
This hook is invoked on an operation that contains regions.
virtual bool isLegalToInline(Region *dest, Region *src, bool wouldBeCloned, IRMapping &valueMapping) const
Returns true if the given region 'src' can be inlined into the region 'dest' that is attached to an o...
virtual Value handleArgument(OpBuilder &builder, Operation *call, Operation *callable, Value argument, DictionaryAttr argumentAttrs) const
Hook to transform the call arguments before using them to replace the callee arguments.
DialectInlinerInterface(Dialect *dialect)
virtual void processInlinedCallBlocks(Operation *call, iterator_range< Region::iterator > inlinedBlocks) const
Process a set of blocks that have been inlined for a call.
virtual bool allowSingleBlockOptimization(iterator_range< Region::iterator > inlinedBlocks) const
Returns true if the inliner can assume a fast path of not creating a new block, if there is only one ...
virtual void handleTerminator(Operation *op, ValueRange valuesToReplace) const
Handle the given inlined terminator by replacing it with a new operation as necessary.
virtual void handleTerminator(Operation *op, Block *newDest) const
Handle the given inlined terminator by replacing it with a new operation as necessary.
virtual bool isLegalToInline(Operation *op, Region *dest, bool wouldBeCloned, IRMapping &valueMapping) const
Returns true if the given operation 'op', that is registered to this dialect, can be inlined into the...
DialectInterfaceCollection< DialectInlinerInterface > Base
DialectInterfaceCollection(MLIRContext *ctx)
detail::DialectInterfaceBase< ConcreteType, DialectInterface > Base
The base class used for all derived interface types.
Dialects are groups of MLIR operations, types and attributes, as well as behavior associated with the...
This is a utility class for mapping one set of IR entities to another.
This interface provides the hooks into the inlining interface.
virtual Value handleResult(OpBuilder &builder, Operation *call, Operation *callable, Value result, DictionaryAttr resultAttrs) const
virtual Value handleArgument(OpBuilder &builder, Operation *call, Operation *callable, Value argument, DictionaryAttr argumentAttrs) const
virtual bool shouldAnalyzeRecursively(Operation *op) const
std::function< CloneCallbackSigTy > CloneCallbackTy
void(OpBuilder &builder, Region *src, Block *inlineBlock, Block *postInsertBlock, IRMapping &mapper, bool shouldCloneInlinedRegion) CloneCallbackSigTy
virtual bool allowSingleBlockOptimization(iterator_range< Region::iterator > inlinedBlocks) const
Returns true if the inliner can assume a fast path of not creating a new block, if there is only one ...
virtual void handleTerminator(Operation *op, Block *newDest) const
Handle the given inlined terminator by replacing it with a new operation as necessary.
virtual void processInlinedCallBlocks(Operation *call, iterator_range< Region::iterator > inlinedBlocks) const
virtual void processInlinedBlocks(iterator_range< Region::iterator > inlinedBlocks)
Process a set of blocks that have been inlined.
virtual bool isLegalToInline(Operation *call, Operation *callable, bool wouldBeCloned) const
These hooks mirror the hooks for the DialectInlinerInterface, with default implementations that call ...
This class defines the main interface for locations in MLIR and acts as a non-nullable wrapper around...
This class helps build Operations.
Operation is the basic unit of execution within MLIR.
This class contains a list of basic blocks and a link to the parent operation it is attached to.
This class provides an abstraction over the various different ranges of value types.
Instances of the Type class are uniqued, have an immutable identifier and an optional mutable compone...
This class provides an abstraction over the different types of ranges over Values.
This class represents an instance of an SSA value in the MLIR system, representing a computable value...
DialectInterfaceBase< ConcreteType, DialectInterface > Base
Include the generated interface declarations.
LogicalResult inlineCall(InlinerInterface &interface, function_ref< InlinerInterface::CloneCallbackSigTy > cloneCallback, CallOpInterface call, CallableOpInterface callable, Region *src, bool shouldCloneInlinedRegion=true)
This function inlines a given region, 'src', of a callable operation, 'callable', into the location d...
LogicalResult inlineRegion(InlinerInterface &interface, function_ref< InlinerInterface::CloneCallbackSigTy > cloneCallback, Region *src, Operation *inlinePoint, IRMapping &mapper, ValueRange resultsToReplace, TypeRange regionResultTypes, std::optional< Location > inlineLoc=std::nullopt, bool shouldCloneInlinedRegion=true)
This function inlines a region, 'src', into another.
llvm::function_ref< Fn > function_ref