MLIR
20.0.0git
|
This class describes a specific conversion target. More...
#include "mlir/Transforms/DialectConversion.h"
Classes | |
struct | LegalOpDetails |
A structure containing additional information describing a specific legal operation instance. More... | |
Public Types | |
enum class | LegalizationAction { Legal , Dynamic , Illegal } |
This enumeration corresponds to the specific action to take when considering an operation legal for this conversion target. More... | |
using | DynamicLegalityCallbackFn = std::function< std::optional< bool >(Operation *)> |
The signature of the callback used to determine if an operation is dynamically legal on the target. More... | |
Public Member Functions | |
ConversionTarget (MLIRContext &ctx) | |
virtual | ~ConversionTarget ()=default |
void | setOpAction (OperationName op, LegalizationAction action) |
Register a legality action for the given operation. More... | |
template<typename OpT > | |
void | setOpAction (LegalizationAction action) |
void | addLegalOp (OperationName op) |
Register the given operations as legal. More... | |
template<typename OpT > | |
void | addLegalOp () |
template<typename OpT , typename OpT2 , typename... OpTs> | |
void | addLegalOp () |
void | addDynamicallyLegalOp (OperationName op, const DynamicLegalityCallbackFn &callback) |
Register the given operation as dynamically legal and set the dynamic legalization callback to the one provided. More... | |
template<typename OpT > | |
void | addDynamicallyLegalOp (const DynamicLegalityCallbackFn &callback) |
template<typename OpT , typename OpT2 , typename... OpTs> | |
void | addDynamicallyLegalOp (const DynamicLegalityCallbackFn &callback) |
template<typename OpT , class Callable > | |
std::enable_if_t<!std::is_invocable_v< Callable, Operation * > > | addDynamicallyLegalOp (Callable &&callback) |
void | addIllegalOp (OperationName op) |
Register the given operation as illegal, i.e. More... | |
template<typename OpT > | |
void | addIllegalOp () |
template<typename OpT , typename OpT2 , typename... OpTs> | |
void | addIllegalOp () |
void | markOpRecursivelyLegal (OperationName name, const DynamicLegalityCallbackFn &callback) |
Mark an operation, that must have either been set as Legal or DynamicallyLegal , as being recursively legal. More... | |
template<typename OpT > | |
void | markOpRecursivelyLegal (const DynamicLegalityCallbackFn &callback={}) |
template<typename OpT , typename OpT2 , typename... OpTs> | |
void | markOpRecursivelyLegal (const DynamicLegalityCallbackFn &callback={}) |
template<typename OpT , class Callable > | |
std::enable_if_t<!std::is_invocable_v< Callable, Operation * > > | markOpRecursivelyLegal (Callable &&callback) |
void | setDialectAction (ArrayRef< StringRef > dialectNames, LegalizationAction action) |
Register a legality action for the given dialects. More... | |
template<typename... Names> | |
void | addLegalDialect (StringRef name, Names... names) |
Register the operations of the given dialects as legal. More... | |
template<typename... Args> | |
void | addLegalDialect () |
template<typename... Names> | |
void | addDynamicallyLegalDialect (const DynamicLegalityCallbackFn &callback, StringRef name, Names... names) |
Register the operations of the given dialects as dynamically legal, i.e. More... | |
template<typename... Args> | |
void | addDynamicallyLegalDialect (DynamicLegalityCallbackFn callback) |
void | markUnknownOpDynamicallyLegal (const DynamicLegalityCallbackFn &fn) |
Register unknown operations as dynamically legal. More... | |
template<typename... Names> | |
void | addIllegalDialect (StringRef name, Names... names) |
Register the operations of the given dialects as illegal, i.e. More... | |
template<typename... Args> | |
void | addIllegalDialect () |
std::optional< LegalizationAction > | getOpAction (OperationName op) const |
Get the legality action for the given operation. More... | |
std::optional< LegalOpDetails > | isLegal (Operation *op) const |
If the given operation instance is legal on this target, a structure containing legality information is returned. More... | |
bool | isIllegal (Operation *op) const |
Returns true is operation instance is illegal on this target. More... | |
This class describes a specific conversion target.
Definition at line 874 of file DialectConversion.h.
using mlir::ConversionTarget::DynamicLegalityCallbackFn = std::function<std::optional<bool>(Operation *)> |
The signature of the callback used to determine if an operation is dynamically legal on the target.
Definition at line 901 of file DialectConversion.h.
|
strong |
This enumeration corresponds to the specific action to take when considering an operation legal for this conversion target.
Definition at line 878 of file DialectConversion.h.
|
inline |
Definition at line 904 of file DialectConversion.h.
|
virtualdefault |
|
inline |
Register the operations of the given dialects as dynamically legal, i.e.
requiring custom handling by the callback.
Definition at line 1014 of file DialectConversion.h.
References Dynamic, and setDialectAction().
Referenced by addDynamicallyLegalDialect(), and mlir::arith::populateEmulateUnsupportedFloatsLegality().
|
inline |
Definition at line 1021 of file DialectConversion.h.
References addDynamicallyLegalDialect().
|
inline |
Definition at line 951 of file DialectConversion.h.
|
inline |
Definition at line 940 of file DialectConversion.h.
References addDynamicallyLegalOp().
|
inline |
Definition at line 945 of file DialectConversion.h.
References addDynamicallyLegalOp().
|
inline |
Register the given operation as dynamically legal and set the dynamic legalization callback to the one provided.
Definition at line 934 of file DialectConversion.h.
References Dynamic, and setOpAction().
Referenced by addDynamicallyLegalOp(), mlir::configureGpuToROCDLConversionLegality(), mlir::configureOpenMPToLLVMConversionLegality(), mlir::configureParallelLoopToGPULegality(), mlir::amdgpu::populateAmdgpuEmulateAtomicsPatterns(), mlir::populateAsyncFuncToAsyncRuntimeConversionPatterns(), mlir::populateAsyncStructuralTypeConversionsAndLegality(), mlir::arith::populateEmulateUnsupportedFloatsLegality(), and mlir::scf::populateSCFStructuralTypeConversionTarget().
|
inline |
Definition at line 1041 of file DialectConversion.h.
References Illegal, and setDialectAction().
|
inline |
Register the operations of the given dialects as illegal, i.e.
operations of this dialect are not supported by the target.
Definition at line 1036 of file DialectConversion.h.
References Illegal, and setDialectAction().
Referenced by mlir::configureArmSMEToLLVMConversionLegality(), mlir::configureGpuToNVVMConversionLegality(), and mlir::configureGpuToROCDLConversionLegality().
|
inline |
Definition at line 962 of file DialectConversion.h.
Referenced by addIllegalOp().
|
inline |
Definition at line 966 of file DialectConversion.h.
References addIllegalOp().
|
inline |
Register the given operation as illegal, i.e.
this operation is known to not be supported by this target.
Definition at line 958 of file DialectConversion.h.
References Illegal, and setOpAction().
Referenced by mlir::configureAMXLegalizeForExportTarget(), mlir::configureArmSVELegalizeForExportTarget(), mlir::configureGpuToNVVMConversionLegality(), mlir::configureGpuToROCDLConversionLegality(), mlir::configureX86VectorLegalizeForExportTarget(), and mlir::amdgpu::populateAmdgpuEmulateAtomicsPatterns().
|
inline |
Definition at line 1006 of file DialectConversion.h.
References Legal, and setDialectAction().
|
inline |
Register the operations of the given dialects as legal.
Definition at line 1001 of file DialectConversion.h.
References Legal, and setDialectAction().
Referenced by mlir::configureArmSMEToLLVMConversionLegality(), mlir::configureGpuToNVVMConversionLegality(), mlir::configureGpuToROCDLConversionLegality(), and mlir::configureParallelLoopToGPULegality().
|
inline |
Definition at line 923 of file DialectConversion.h.
Referenced by addLegalOp().
|
inline |
Definition at line 927 of file DialectConversion.h.
References addLegalOp().
|
inline |
Register the given operations as legal.
Definition at line 919 of file DialectConversion.h.
References Legal, and setOpAction().
Referenced by mlir::configureAMXLegalizeForExportTarget(), mlir::configureArmSMEToLLVMConversionLegality(), mlir::configureArmSVELegalizeForExportTarget(), mlir::configureGpuToNVVMConversionLegality(), mlir::configureGpuToROCDLConversionLegality(), mlir::configureX86VectorLegalizeForExportTarget(), mlir::bufferization::populateBufferizeMaterializationLegality(), mlir::arith::populateEmulateUnsupportedFloatsLegality(), and mlir::math::populateExtendToSupportedTypesConversionTarget().
auto ConversionTarget::getOpAction | ( | OperationName | op | ) | const |
Get the legality action for the given operation.
Definition at line 3097 of file DialectConversion.cpp.
bool ConversionTarget::isIllegal | ( | Operation * | op | ) | const |
Returns true is operation instance is illegal on this target.
Returns false if operation is legal, operation legality wasn't registered by user or dynamic legality callbacks returned None.
Definition at line 3138 of file DialectConversion.cpp.
References mlir::Operation::getName().
auto ConversionTarget::isLegal | ( | Operation * | op | ) | const |
If the given operation instance is legal on this target, a structure containing legality information is returned.
If the operation is not legal, std::nullopt is returned. Also returns std::nullopt if operation legality wasn't registered by user or dynamic legality callbacks returned None.
Note: Legality is actually a 4-state: Legal(recursive=true), Legal(recursive=false), Illegal or Unknown, where Unknown is treated either as Legal or Illegal depending on context.
Definition at line 3103 of file DialectConversion.cpp.
References mlir::Operation::getName(), and mlir::ConversionTarget::LegalOpDetails::isRecursivelyLegal.
Referenced by mlir::OperationConverter::convertOperations().
|
inline |
Definition at line 990 of file DialectConversion.h.
|
inline |
Definition at line 979 of file DialectConversion.h.
|
inline |
Definition at line 984 of file DialectConversion.h.
void ConversionTarget::markOpRecursivelyLegal | ( | OperationName | name, |
const DynamicLegalityCallbackFn & | callback | ||
) |
Mark an operation, that must have either been set as Legal
or DynamicallyLegal
, as being recursively legal.
This means that in addition to the operation itself, all of the operations nested within are also considered legal. An optional dynamic legality callback may be provided to mark subsets of legal instances as recursively legal.
Definition at line 3181 of file DialectConversion.cpp.
References composeLegalityCallbacks().
|
inline |
Register unknown operations as dynamically legal.
For operations(and dialects) that do not have a set legalization action, treat them as dynamically legal and invoke the given callback.
Definition at line 1029 of file DialectConversion.h.
Referenced by mlir::arith::populateEmulateUnsupportedFloatsLegality(), mlir::math::populateExtendToSupportedTypesConversionTarget(), and mlir::vector::populateVectorLinearizeTypeConversionsAndLegality().
void ConversionTarget::setDialectAction | ( | ArrayRef< StringRef > | dialectNames, |
LegalizationAction | action | ||
) |
Register a legality action for the given dialects.
Definition at line 3091 of file DialectConversion.cpp.
Referenced by addDynamicallyLegalDialect(), addIllegalDialect(), and addLegalDialect().
|
inline |
Definition at line 914 of file DialectConversion.h.
References setOpAction().
void ConversionTarget::setOpAction | ( | OperationName | op, |
LegalizationAction | action | ||
) |
Register a legality action for the given operation.
Definition at line 3086 of file DialectConversion.cpp.
Referenced by addDynamicallyLegalOp(), addIllegalOp(), addLegalOp(), and setOpAction().