MLIR 24.0.0git
mlir::detail::StorageUniquerImpl Struct Reference

This is the implementation of the StorageUniquer class. More...

Classes

struct  TransientState
 Bundled state dynamically allocated when entering a transient scope. More...

Public Types

using BaseStorage = StorageUniquer::BaseStorage
using StorageAllocator = StorageUniquer::StorageAllocator

Public Member Functions

bool hasParametricStorage (TypeID id)
 Check if an instance of a parametric storage class exists.
BaseStoragegetOrCreate (TypeID id, unsigned hashValue, function_ref< bool(const BaseStorage *)> isEqual, function_ref< BaseStorage *(StorageAllocator &)> ctorFn)
 Get or create an instance of a parametric type.
LogicalResult mutate (TypeID id, BaseStorage *storage, function_ref< LogicalResult(StorageAllocator &)> mutationFn)
 Run a mutation function on the provided storage object in a thread-safe way.
StorageAllocatorgetThreadSafeAllocator ()
 Return an allocator that can be used to safely allocate instances on the current thread.
void beginTransientScope ()
void endTransientScope ()
bool isInTransientScope () const
BaseStoragegetSingleton (TypeID id)
 Get or create an instance of a singleton storage class.
bool hasSingleton (TypeID id) const
 Check if an instance of a singleton storage class exists.

Public Attributes

StorageAllocator allocator
 Main allocator used for uniquing singleton instances, and other state when thread safety is guaranteed.
std::unique_ptr< TransientStatetransientState
 Transient state bundled into a unique pointer (nullptr when inactive).
DenseMap< TypeID, std::unique_ptr< ParametricStorageUniquer > > parametricUniquers
 Map of type ids to the storage uniquer to use for registered objects.
DenseMap< TypeID, BaseStorage * > singletonInstances
 Map of type ids to a singleton instance when the storage class is a singleton.
bool threadingIsEnabled = true
 Flag specifying if multi-threading is enabled within the uniquer.

Detailed Description

This is the implementation of the StorageUniquer class.

Definition at line 343 of file StorageUniquer.cpp.

Member Typedef Documentation

◆ BaseStorage

◆ StorageAllocator

Member Function Documentation

◆ beginTransientScope()

void mlir::detail::StorageUniquerImpl::beginTransientScope ( )
inline

Definition at line 449 of file StorageUniquer.cpp.

References parametricUniquers, and transientState.

◆ endTransientScope()

void mlir::detail::StorageUniquerImpl::endTransientScope ( )
inline

Definition at line 457 of file StorageUniquer.cpp.

References parametricUniquers, and transientState.

◆ getOrCreate()

BaseStorage * mlir::detail::StorageUniquerImpl::getOrCreate ( TypeID id,
unsigned hashValue,
function_ref< bool(const BaseStorage *)> isEqual,
function_ref< BaseStorage *(StorageAllocator &)> ctorFn )
inline

Get or create an instance of a parametric type.

Definition at line 376 of file StorageUniquer.cpp.

References getThreadSafeAllocator(), parametricUniquers, and threadingIsEnabled.

◆ getSingleton()

BaseStorage * mlir::detail::StorageUniquerImpl::getSingleton ( TypeID id)
inline

Get or create an instance of a singleton storage class.

Definition at line 473 of file StorageUniquer.cpp.

References singletonInstances, and transientState.

◆ getThreadSafeAllocator()

StorageAllocator & mlir::detail::StorageUniquerImpl::getThreadSafeAllocator ( )
inline

Return an allocator that can be used to safely allocate instances on the current thread.

Definition at line 402 of file StorageUniquer.cpp.

References allocator, threadingIsEnabled, and transientState.

Referenced by getOrCreate(), and mutate().

◆ hasParametricStorage()

bool mlir::detail::StorageUniquerImpl::hasParametricStorage ( TypeID id)
inline

Check if an instance of a parametric storage class exists.

Definition at line 372 of file StorageUniquer.cpp.

References parametricUniquers.

◆ hasSingleton()

bool mlir::detail::StorageUniquerImpl::hasSingleton ( TypeID id) const
inline

Check if an instance of a singleton storage class exists.

Definition at line 485 of file StorageUniquer.cpp.

References singletonInstances, and transientState.

◆ isInTransientScope()

bool mlir::detail::StorageUniquerImpl::isInTransientScope ( ) const
inline

Definition at line 466 of file StorageUniquer.cpp.

References transientState.

◆ mutate()

LogicalResult mlir::detail::StorageUniquerImpl::mutate ( TypeID id,
BaseStorage * storage,
function_ref< LogicalResult(StorageAllocator &)> mutationFn )
inline

Run a mutation function on the provided storage object in a thread-safe way.

Definition at line 390 of file StorageUniquer.cpp.

References getThreadSafeAllocator(), parametricUniquers, and threadingIsEnabled.

Member Data Documentation

◆ allocator

StorageAllocator mlir::detail::StorageUniquerImpl::allocator

Main allocator used for uniquing singleton instances, and other state when thread safety is guaranteed.

Definition at line 509 of file StorageUniquer.cpp.

Referenced by getThreadSafeAllocator().

◆ parametricUniquers

DenseMap<TypeID, std::unique_ptr<ParametricStorageUniquer> > mlir::detail::StorageUniquerImpl::parametricUniquers

Map of type ids to the storage uniquer to use for registered objects.

Definition at line 516 of file StorageUniquer.cpp.

Referenced by beginTransientScope(), endTransientScope(), getOrCreate(), hasParametricStorage(), and mutate().

◆ singletonInstances

DenseMap<TypeID, BaseStorage *> mlir::detail::StorageUniquerImpl::singletonInstances

Map of type ids to a singleton instance when the storage class is a singleton.

Definition at line 520 of file StorageUniquer.cpp.

Referenced by getSingleton(), and hasSingleton().

◆ threadingIsEnabled

bool mlir::detail::StorageUniquerImpl::threadingIsEnabled = true

Flag specifying if multi-threading is enabled within the uniquer.

Definition at line 523 of file StorageUniquer.cpp.

Referenced by getOrCreate(), getThreadSafeAllocator(), and mutate().

◆ transientState

std::unique_ptr<TransientState> mlir::detail::StorageUniquerImpl::transientState

Transient state bundled into a unique pointer (nullptr when inactive).

Definition at line 512 of file StorageUniquer.cpp.

Referenced by beginTransientScope(), endTransientScope(), getSingleton(), getThreadSafeAllocator(), hasSingleton(), and isInTransientScope().


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