MLIR 22.0.0git
mlir::DialectRegistry Class Reference

The DialectRegistry maps a dialect namespace to a constructor for the matching dialect. More...

#include "mlir/IR/DialectRegistry.h"

Public Member Functions

 DialectRegistry ()
 DialectRegistry (const DialectRegistry &)=delete
DialectRegistryoperator= (const DialectRegistry &other)=delete
 DialectRegistry (DialectRegistry &&)=default
DialectRegistryoperator= (DialectRegistry &&other)=default
template<typename ConcreteDialect>
void insert ()
template<typename ConcreteDialect, typename OtherDialect, typename... MoreDialects>
void insert ()
void insert (TypeID typeID, StringRef name, const DialectAllocatorFunction &ctor)
 Add a new dialect constructor to the registry.
void insertDynamic (StringRef name, const DynamicDialectPopulationFunction &ctor)
 Add a new dynamic dialect constructor in the registry.
DialectAllocatorFunctionRef getDialectAllocator (StringRef name) const
 Return an allocation function for constructing the dialect identified by its namespace, or nullptr if the namespace is not in this registry.
void appendTo (DialectRegistry &destination) const
auto getDialectNames () const
 Return the names of dialects known to this registry.
void applyExtensions (Dialect *dialect) const
 Apply any held extensions that require the given dialect.
void applyExtensions (MLIRContext *ctx) const
 Apply any applicable extensions to the given context.
bool addExtension (TypeID extensionID, std::unique_ptr< DialectExtensionBase > extension)
 Add the given extension to the registry.
template<typename... ExtensionsT>
void addExtensions ()
 Add the given extensions to the registry.
template<typename... DialectsT>
bool addExtension (void(*extensionFn)(MLIRContext *, DialectsT *...))
 Add an extension function that requires the given dialects.
bool isSubsetOf (const DialectRegistry &rhs) const
 Returns true if the current registry is a subset of 'rhs', i.e.

Detailed Description

The DialectRegistry maps a dialect namespace to a constructor for the matching dialect.

This allows for decoupling the list of dialects "available" from the dialects loaded in the Context. The parser in particular will lazily load dialects in the Context as operations are encountered.

Definition at line 139 of file DialectRegistry.h.

Constructor & Destructor Documentation

◆ DialectRegistry() [1/3]

DialectRegistry::DialectRegistry ( )
explicit

Definition at line 207 of file Dialect.cpp.

References insert().

Referenced by appendTo(), DialectRegistry(), DialectRegistry(), isSubsetOf(), operator=(), and operator=().

◆ DialectRegistry() [2/3]

mlir::DialectRegistry::DialectRegistry ( const DialectRegistry & )
delete

References DialectRegistry().

◆ DialectRegistry() [3/3]

mlir::DialectRegistry::DialectRegistry ( DialectRegistry && )
default

References DialectRegistry().

Member Function Documentation

◆ addExtension() [1/2]

bool mlir::DialectRegistry::addExtension ( TypeID extensionID,
std::unique_ptr< DialectExtensionBase > extension )
inline

Add the given extension to the registry.

Definition at line 215 of file DialectRegistry.h.

Referenced by addExtension(), addExtensions(), mlir::memref::registerAllocationOpInterfaceExternalModels(), mlir::registerArmNeonDialectTranslation(), mlir::registerArmSMEDialectTranslation(), mlir::registerArmSVEDialectTranslation(), mlir::arith::registerBufferDeallocationOpInterfaceExternalModels(), mlir::cf::registerBufferDeallocationOpInterfaceExternalModels(), mlir::gpu::registerBufferDeallocationOpInterfaceExternalModels(), mlir::scf::registerBufferDeallocationOpInterfaceExternalModels(), mlir::arith::registerBufferizableOpInterfaceExternalModels(), mlir::bufferization::func_ext::registerBufferizableOpInterfaceExternalModels(), mlir::cf::registerBufferizableOpInterfaceExternalModels(), mlir::linalg::registerBufferizableOpInterfaceExternalModels(), mlir::ml_program::registerBufferizableOpInterfaceExternalModels(), mlir::scf::registerBufferizableOpInterfaceExternalModels(), mlir::shape::registerBufferizableOpInterfaceExternalModels(), mlir::sparse_tensor::registerBufferizableOpInterfaceExternalModels(), mlir::tensor::registerBufferizableOpInterfaceExternalModels(), mlir::vector::registerBufferizableOpInterfaceExternalModels(), mlir::arith::registerBufferViewFlowOpInterfaceExternalModels(), mlir::memref::registerBufferViewFlowOpInterfaceExternalModels(), mlir::registerBuiltinDialectTranslation(), mlir::builtin::registerCastOpInterfaceExternalModels(), mlir::registerConvertAMXToLLVMInterface(), mlir::registerConvertArithToEmitCInterface(), mlir::arith::registerConvertArithToLLVMInterface(), mlir::registerConvertComplexToLLVMInterface(), mlir::cf::registerConvertControlFlowToLLVMInterface(), mlir::registerConvertFuncToEmitCInterface(), mlir::registerConvertFuncToLLVMInterface(), mlir::gpu::registerConvertGpuToLLVMInterface(), mlir::NVVM::registerConvertGpuToNVVMInterface(), mlir::index::registerConvertIndexToLLVMInterface(), mlir::registerConvertMathToLLVMInterface(), mlir::registerConvertMemRefToEmitCInterface(), mlir::registerConvertMemRefToLLVMInterface(), mlir::mpi::registerConvertMPIToLLVMInterface(), mlir::registerConvertNVVMToLLVMInterface(), mlir::registerConvertOpenMPToLLVMInterface(), mlir::ptr::registerConvertPtrToLLVMInterface(), mlir::registerConvertSCFToEmitCInterface(), mlir::ub::registerConvertUBToLLVMInterface(), mlir::vector::registerConvertVectorToLLVMInterface(), mlir::registerConvertXeVMToLLVMInterface(), mlir::tensor::registerFindPayloadReplacementOpInterfaceExternalModels(), mlir::registerGPUDialectTranslation(), mlir::tensor::registerInferTypeOpInterfaceExternalModels(), mlir::func::registerInlinerExtension(), mlir::LLVM::registerInlinerInterface(), mlir::NVVM::registerInlinerInterface(), mlir::registerLLVMDialectImport(), mlir::registerLLVMDialectTranslation(), mlir::memref::registerMemorySlotExternalModels(), mlir::registerNVVMDialectImport(), mlir::registerNVVMDialectTranslation(), mlir::NVVM::registerNVVMTargetInterfaceExternalModels(), mlir::gpu::registerOffloadingLLVMTranslationInterfaceExternalModels(), mlir::registerOpenACCDialectTranslation(), mlir::registerOpenMPDialectTranslation(), mlir::registerPtrDialectTranslation(), mlir::registerROCDLDialectTranslation(), mlir::ROCDL::registerROCDLTargetInterfaceExternalModels(), mlir::linalg::registerRuntimeVerifiableOpInterfaceExternalModels(), mlir::memref::registerRuntimeVerifiableOpInterfaceExternalModels(), mlir::tensor::registerRuntimeVerifiableOpInterfaceExternalModels(), mlir::arith::registerShardingInterfaceExternalModels(), mlir::func::registerShardingInterfaceExternalModels(), mlir::linalg::registerShardingInterfaceExternalModels(), mlir::tensor::registerShardingInterfaceExternalModels(), mlir::tosa::registerShardingInterfaceExternalModels(), mlir::spirv::registerSPIRVTargetInterfaceExternalModels(), mlir::linalg::registerSubsetOpInterfaceExternalModels(), mlir::tensor::registerSubsetOpInterfaceExternalModels(), mlir::vector::registerSubsetOpInterfaceExternalModels(), mlir::linalg::registerTilingInterfaceExternalModels(), mlir::tensor::registerTilingInterfaceExternalModels(), mlir::linalg::registerTilingInterfaceExternalModelsForPackUnPackOps(), mlir::affine::registerValueBoundsOpInterfaceExternalModels(), mlir::arith::registerValueBoundsOpInterfaceExternalModels(), mlir::gpu::registerValueBoundsOpInterfaceExternalModels(), mlir::linalg::registerValueBoundsOpInterfaceExternalModels(), mlir::memref::registerValueBoundsOpInterfaceExternalModels(), mlir::scf::registerValueBoundsOpInterfaceExternalModels(), mlir::tensor::registerValueBoundsOpInterfaceExternalModels(), mlir::vector::registerValueBoundsOpInterfaceExternalModels(), mlir::registerVCIXDialectTranslation(), and mlir::xevm::registerXeVMTargetInterfaceExternalModels().

◆ addExtension() [2/2]

template<typename... DialectsT>
bool mlir::DialectRegistry::addExtension ( void(* extensionFn )(MLIRContext *, DialectsT *...))
inline

Add an extension function that requires the given dialects.

Note: This bare functor overload is provided in addition to the std::function variant to enable dialect type deduction, e.g.: registry.addExtension(+[](MLIRContext *ctx, MyDialect *dialect) { ... })

is equivalent to: registry.addExtension<MyDialect>( [](MLIRContext *ctx, MyDialect *dialect){ ... } )

Definition at line 238 of file DialectRegistry.h.

References addExtension(), and mlir::TypeID::getFromOpaquePointer().

◆ addExtensions()

◆ appendTo()

void mlir::DialectRegistry::appendTo ( DialectRegistry & destination) const
inline

◆ applyExtensions() [1/2]

void DialectRegistry::applyExtensions ( Dialect * dialect) const

Apply any held extensions that require the given dialect.

Users are not expected to call this directly.

Definition at line 246 of file Dialect.cpp.

References mlir::Dialect::getContext(), mlir::MLIRContext::getLoadedDialect(), and mlir::Dialect::getNamespace().

Referenced by mlir::MLIRContext::appendDialectRegistry().

◆ applyExtensions() [2/2]

void DialectRegistry::applyExtensions ( MLIRContext * ctx) const

Apply any applicable extensions to the given context.

Users are not expected to call this directly.

Definition at line 295 of file Dialect.cpp.

References mlir::MLIRContext::getLoadedDialect(), and mlir::MLIRContext::getLoadedDialects().

◆ getDialectAllocator()

DialectAllocatorFunctionRef DialectRegistry::getDialectAllocator ( StringRef name) const

Return an allocation function for constructing the dialect identified by its namespace, or nullptr if the namespace is not in this registry.

Definition at line 210 of file Dialect.cpp.

◆ getDialectNames()

auto mlir::DialectRegistry::getDialectNames ( ) const
inline

Return the names of dialects known to this registry.

Definition at line 200 of file DialectRegistry.h.

Referenced by printRegisteredDialects(), mlir::registerAndParseCLIOptions(), mlir::linalg::registerShardingInterfaceExternalModels(), and mlir::PassManager::run().

◆ insert() [1/3]

◆ insert() [2/3]

template<typename ConcreteDialect, typename OtherDialect, typename... MoreDialects>
void mlir::DialectRegistry::insert ( )
inline

Definition at line 164 of file DialectRegistry.h.

References insert().

◆ insert() [3/3]

void DialectRegistry::insert ( TypeID typeID,
StringRef name,
const DialectAllocatorFunction & ctor )

Add a new dialect constructor to the registry.

The constructor must be calling MLIRContext::getOrLoadDialect in order for the context to take ownership of the dialect and for delayed interface registration to happen.

Definition at line 217 of file Dialect.cpp.

References inserted().

◆ insertDynamic()

void DialectRegistry::insertDynamic ( StringRef name,
const DynamicDialectPopulationFunction & ctor )

Add a new dynamic dialect constructor in the registry.

The constructor provides as argument the created dynamic dialect, and is expected to register the dialect types, attributes, and ops, using the methods defined in ExtensibleDialect such as registerDynamicOperation.

Definition at line 228 of file Dialect.cpp.

References mlir::TypeID::get(), and insert().

◆ isSubsetOf()

bool DialectRegistry::isSubsetOf ( const DialectRegistry & rhs) const

Returns true if the current registry is a subset of 'rhs', i.e.

if 'rhs' contains all of the components of this registry.

Definition at line 320 of file Dialect.cpp.

References DialectRegistry(), and rhs.

Referenced by mlir::MLIRContext::appendDialectRegistry().

◆ operator=() [1/2]

DialectRegistry & mlir::DialectRegistry::operator= ( const DialectRegistry & other)
delete

References DialectRegistry().

◆ operator=() [2/2]

DialectRegistry & mlir::DialectRegistry::operator= ( DialectRegistry && other)
default

References DialectRegistry().


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