MLIR
20.0.0git
|
Type storage for SPIR-V structure types: More...
Public Types | |
using | KeyTy = std::tuple< StringRef, ArrayRef< Type >, ArrayRef< StructType::OffsetInfo >, ArrayRef< StructType::MemberDecorationInfo > > |
A storage key is divided into 2 parts: More... | |
Public Member Functions | |
StructTypeStorage (StringRef identifier) | |
Construct a storage object for an identified struct type. More... | |
StructTypeStorage (unsigned numMembers, Type const *memberTypes, StructType::OffsetInfo const *layoutInfo, unsigned numMemberDecorations, StructType::MemberDecorationInfo const *memberDecorationsInfo) | |
Construct a storage object for a literal struct type. More... | |
bool | operator== (const KeyTy &key) const |
For identified structs, return true if the given key contains the same identifier. More... | |
ArrayRef< Type > | getMemberTypes () const |
ArrayRef< StructType::OffsetInfo > | getOffsetInfo () const |
ArrayRef< StructType::MemberDecorationInfo > | getMemberDecorationsInfo () const |
StringRef | getIdentifier () const |
bool | isIdentified () const |
LogicalResult | mutate (TypeStorageAllocator &allocator, ArrayRef< Type > structMemberTypes, ArrayRef< StructType::OffsetInfo > structOffsetInfo, ArrayRef< StructType::MemberDecorationInfo > structMemberDecorationInfo) |
Sets the struct type content for identified structs. More... | |
Public Member Functions inherited from mlir::TypeStorage | |
const AbstractType & | getAbstractType () |
Return the abstract type descriptor for this type. More... | |
Static Public Member Functions | |
static StructTypeStorage * | construct (TypeStorageAllocator &allocator, const KeyTy &key) |
If the given key contains a non-empty identifier, this method constructs an identified struct and leaves the rest of the struct type data to be set through a later call to StructType::trySetBody(...). More... | |
Public Attributes | |
llvm::PointerIntPair< Type const *, 1, bool > | memberTypesAndIsBodySet |
StructType::OffsetInfo const * | offsetInfo |
unsigned | numMembers |
unsigned | numMemberDecorations |
StructType::MemberDecorationInfo const * | memberDecorationsInfo |
StringRef | identifier |
Additional Inherited Members | |
Protected Member Functions inherited from mlir::TypeStorage | |
TypeStorage () | |
This constructor is used by derived classes as part of the TypeUniquer. More... | |
Protected Member Functions inherited from mlir::StorageUniquer::BaseStorage | |
BaseStorage ()=default | |
Type storage for SPIR-V structure types:
Structures are uniqued using:
Identified structures only have a mutable component consisting of:
Definition at line 783 of file SPIRVTypes.cpp.
using mlir::spirv::detail::StructTypeStorage::KeyTy = std::tuple<StringRef, ArrayRef<Type>, ArrayRef<StructType::OffsetInfo>, ArrayRef<StructType::MemberDecorationInfo> > |
A storage key is divided into 2 parts:
An identified struct type is uniqued only by the first part (field 0) of the key.
A literal struct type is uniqued only by the second part (fields 1, 2, and 3) of the key. The identifier field (field 0) must be empty.
Definition at line 816 of file SPIRVTypes.cpp.
|
inline |
Construct a storage object for an identified struct type.
A struct type associated with such storage must call StructType::trySetBody(...) later in order to mutate the storage object providing the actual content.
Definition at line 787 of file SPIRVTypes.cpp.
|
inline |
Construct a storage object for a literal struct type.
A struct type associated with such storage is immutable.
Definition at line 794 of file SPIRVTypes.cpp.
|
inlinestatic |
If the given key contains a non-empty identifier, this method constructs an identified struct and leaves the rest of the struct type data to be set through a later call to StructType::trySetBody(...).
If, on the other hand, the key contains an empty identifier, a literal struct is constructed using the other fields of the key.
Definition at line 841 of file SPIRVTypes.cpp.
References mlir::StorageUniquer::StorageAllocator::allocate(), and mlir::StorageUniquer::StorageAllocator::copyInto().
|
inline |
Definition at line 903 of file SPIRVTypes.cpp.
|
inline |
Definition at line 895 of file SPIRVTypes.cpp.
Definition at line 884 of file SPIRVTypes.cpp.
|
inline |
Definition at line 888 of file SPIRVTypes.cpp.
|
inline |
Definition at line 905 of file SPIRVTypes.cpp.
|
inline |
Sets the struct type content for identified structs.
Calling this method is only valid for identified structs.
Fails under the following conditions:
Definition at line 915 of file SPIRVTypes.cpp.
References mlir::StorageUniquer::StorageAllocator::copyInto().
|
inline |
For identified structs, return true if the given key contains the same identifier.
For literal structs, return true if the given key contains a matching list of member types + offset info + decoration info.
Definition at line 825 of file SPIRVTypes.cpp.
StringRef mlir::spirv::detail::StructTypeStorage::identifier |
Definition at line 957 of file SPIRVTypes.cpp.
StructType::MemberDecorationInfo const* mlir::spirv::detail::StructTypeStorage::memberDecorationsInfo |
Definition at line 956 of file SPIRVTypes.cpp.
llvm::PointerIntPair<Type const *, 1, bool> mlir::spirv::detail::StructTypeStorage::memberTypesAndIsBodySet |
Definition at line 952 of file SPIRVTypes.cpp.
unsigned mlir::spirv::detail::StructTypeStorage::numMemberDecorations |
Definition at line 955 of file SPIRVTypes.cpp.
unsigned mlir::spirv::detail::StructTypeStorage::numMembers |
Definition at line 954 of file SPIRVTypes.cpp.
StructType::OffsetInfo const* mlir::spirv::detail::StructTypeStorage::offsetInfo |
Definition at line 953 of file SPIRVTypes.cpp.