MLIR
22.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 >, ArrayRef< StructType::StructDecorationInfo > > |
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, unsigned numStructDecorations, StructType::StructDecorationInfo const *structDecorationsInfo) | |
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 |
ArrayRef< StructType::StructDecorationInfo > | getStructDecorationsInfo () const |
StringRef | getIdentifier () const |
bool | isIdentified () const |
LogicalResult | mutate (TypeStorageAllocator &allocator, ArrayRef< Type > structMemberTypes, ArrayRef< StructType::OffsetInfo > structOffsetInfo, ArrayRef< StructType::MemberDecorationInfo > structMemberDecorationInfo, ArrayRef< StructType::StructDecorationInfo > structDecorationInfo) |
Sets the struct type content for identified structs. More... | |
![]() | |
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 |
unsigned | numStructDecorations |
StructType::StructDecorationInfo const * | structDecorationsInfo |
StringRef | identifier |
Additional Inherited Members | |
![]() | |
TypeStorage () | |
This constructor is used by derived classes as part of the TypeUniquer. More... | |
![]() | |
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 846 of file SPIRVTypes.cpp.
using mlir::spirv::detail::StructTypeStorage::KeyTy = std::tuple<StringRef, ArrayRef<Type>, ArrayRef<StructType::OffsetInfo>, ArrayRef<StructType::MemberDecorationInfo>, ArrayRef<StructType::StructDecorationInfo> > |
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, 3 and 4) of the key. The identifier field (field 0) must be empty.
Definition at line 886 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 850 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 858 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 912 of file SPIRVTypes.cpp.
References mlir::StorageUniquer::StorageAllocator::allocate(), and mlir::StorageUniquer::StorageAllocator::copyInto().
|
inline |
Definition at line 989 of file SPIRVTypes.cpp.
|
inline |
Definition at line 974 of file SPIRVTypes.cpp.
Definition at line 963 of file SPIRVTypes.cpp.
|
inline |
Definition at line 967 of file SPIRVTypes.cpp.
|
inline |
Definition at line 982 of file SPIRVTypes.cpp.
|
inline |
Definition at line 991 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 1002 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 896 of file SPIRVTypes.cpp.
StringRef mlir::spirv::detail::StructTypeStorage::identifier |
Definition at line 1052 of file SPIRVTypes.cpp.
StructType::MemberDecorationInfo const* mlir::spirv::detail::StructTypeStorage::memberDecorationsInfo |
Definition at line 1049 of file SPIRVTypes.cpp.
llvm::PointerIntPair<Type const *, 1, bool> mlir::spirv::detail::StructTypeStorage::memberTypesAndIsBodySet |
Definition at line 1045 of file SPIRVTypes.cpp.
unsigned mlir::spirv::detail::StructTypeStorage::numMemberDecorations |
Definition at line 1048 of file SPIRVTypes.cpp.
unsigned mlir::spirv::detail::StructTypeStorage::numMembers |
Definition at line 1047 of file SPIRVTypes.cpp.
unsigned mlir::spirv::detail::StructTypeStorage::numStructDecorations |
Definition at line 1050 of file SPIRVTypes.cpp.
StructType::OffsetInfo const* mlir::spirv::detail::StructTypeStorage::offsetInfo |
Definition at line 1046 of file SPIRVTypes.cpp.
StructType::StructDecorationInfo const* mlir::spirv::detail::StructTypeStorage::structDecorationsInfo |
Definition at line 1051 of file SPIRVTypes.cpp.