My Project
Public Member Functions | List of all members
mlir::DialectInlinerInterface Class Reference

#include <InliningUtils.h>

Inheritance diagram for mlir::DialectInlinerInterface:
Inheritance graph
[legend]
Collaboration diagram for mlir::DialectInlinerInterface:
Collaboration graph
[legend]

Public Member Functions

 DialectInlinerInterface (Dialect *dialect)
 
virtual bool isLegalToInline (Region *dest, Region *src, BlockAndValueMapping &valueMapping) const
 
virtual bool isLegalToInline (Operation *op, Region *dest, BlockAndValueMapping &valueMapping) const
 
virtual bool shouldAnalyzeRecursively (Operation *op) const
 
virtual void handleTerminator (Operation *op, Block *newDest) const
 
virtual void handleTerminator (Operation *op, ArrayRef< Value > valuesToReplace) const
 
virtual OperationmaterializeCallConversion (OpBuilder &builder, Value input, Type resultType, Location conversionLoc) const
 

Additional Inherited Members

- Public Types inherited from mlir::detail::DialectInterfaceBase< ConcreteType, BaseT >
using Base = DialectInterfaceBase< ConcreteType, BaseT >
 
- Static Public Member Functions inherited from mlir::detail::DialectInterfaceBase< ConcreteType, BaseT >
static ClassIDgetInterfaceID ()
 Get a unique id for the derived interface type. More...
 
- Protected Member Functions inherited from mlir::detail::DialectInterfaceBase< ConcreteType, BaseT >
 DialectInterfaceBase (Dialect *dialect)
 

Detailed Description

This is the interface that must be implemented by the dialects of operations to be inlined. This interface should only handle the operations of the given dialect.

Constructor & Destructor Documentation

◆ DialectInlinerInterface()

mlir::DialectInlinerInterface::DialectInlinerInterface ( Dialect dialect)
inline

Member Function Documentation

◆ handleTerminator() [1/2]

virtual void mlir::DialectInlinerInterface::handleTerminator ( Operation op,
Block newDest 
) const
inlinevirtual

Handle the given inlined terminator by replacing it with a new operation as necessary. This overload is called when the inlined region has more than one block. The 'newDest' block represents the new final branching destination of blocks within this region, i.e. operations that release control to the parent operation will likely now branch to this block. Its block arguments correspond to any values that need to be replaced by terminators within the inlined region.

◆ handleTerminator() [2/2]

virtual void mlir::DialectInlinerInterface::handleTerminator ( Operation op,
ArrayRef< Value valuesToReplace 
) const
inlinevirtual

Handle the given inlined terminator by replacing it with a new operation as necessary. This overload is called when the inlined region only contains one block. 'valuesToReplace' contains the previously returned values of the call site before inlining. These values must be replaced by this callback if they had any users (for example for traditional function calls, these are directly replaced with the operands of the return operation). The given 'op' will be removed by the caller, after this function has been called.

◆ isLegalToInline() [1/2]

virtual bool mlir::DialectInlinerInterface::isLegalToInline ( Region dest,
Region src,
BlockAndValueMapping valueMapping 
) const
inlinevirtual

Returns true if the given region 'src' can be inlined into the region 'dest' that is attached to an operation registered to the current dialect. 'valueMapping' contains any remapped values from within the 'src' region. This can be used to examine what values will replace entry arguments into the 'src' region for example.

◆ isLegalToInline() [2/2]

virtual bool mlir::DialectInlinerInterface::isLegalToInline ( Operation op,
Region dest,
BlockAndValueMapping valueMapping 
) const
inlinevirtual

Returns true if the given operation 'op', that is registered to this dialect, can be inlined into the given region, false otherwise. 'valueMapping' contains any remapped values from within the 'src' region. This can be used to examine what values may potentially replace the operands to 'op'.

◆ materializeCallConversion()

virtual Operation* mlir::DialectInlinerInterface::materializeCallConversion ( OpBuilder builder,
Value  input,
Type  resultType,
Location  conversionLoc 
) const
inlinevirtual

Attempt to materialize a conversion for a type mismatch between a call from this dialect, and a callable region. This method should generate an operation that takes 'input' as the only operand, and produces a single result of 'resultType'. If a conversion can not be generated, nullptr should be returned. For example, this hook may be invoked in the following scenarios: func (i32) -> i32 { ... }

// Mismatched input operand ... = foo.call (input : i16) -> i32

// Mismatched result type. ... = foo.call (input : i32) -> i16

NOTE: This hook may be invoked before the 'isLegal' checks above.

◆ shouldAnalyzeRecursively()

virtual bool mlir::DialectInlinerInterface::shouldAnalyzeRecursively ( Operation op) const
inlinevirtual

This hook is invoked on an operation that contains regions. It should return true if the analyzer should recurse within the regions of this operation when computing legality and cost, false otherwise. The default implementation returns true.


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