MLIR
18.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... | |
![]() | |
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 | |
![]() | |
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 923 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 956 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 927 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 934 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 981 of file SPIRVTypes.cpp.
References mlir::StorageUniquer::StorageAllocator::allocate(), and mlir::StorageUniquer::StorageAllocator::copyInto().
|
inline |
Definition at line 1043 of file SPIRVTypes.cpp.
|
inline |
Definition at line 1035 of file SPIRVTypes.cpp.
Definition at line 1024 of file SPIRVTypes.cpp.
|
inline |
Definition at line 1028 of file SPIRVTypes.cpp.
|
inline |
Definition at line 1045 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 1055 of file SPIRVTypes.cpp.
References mlir::StorageUniquer::StorageAllocator::copyInto(), mlir::failure(), and mlir::success().
|
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 965 of file SPIRVTypes.cpp.
StringRef mlir::spirv::detail::StructTypeStorage::identifier |
Definition at line 1097 of file SPIRVTypes.cpp.
StructType::MemberDecorationInfo const* mlir::spirv::detail::StructTypeStorage::memberDecorationsInfo |
Definition at line 1096 of file SPIRVTypes.cpp.
llvm::PointerIntPair<Type const *, 1, bool> mlir::spirv::detail::StructTypeStorage::memberTypesAndIsBodySet |
Definition at line 1092 of file SPIRVTypes.cpp.
unsigned mlir::spirv::detail::StructTypeStorage::numMemberDecorations |
Definition at line 1095 of file SPIRVTypes.cpp.
unsigned mlir::spirv::detail::StructTypeStorage::numMembers |
Definition at line 1094 of file SPIRVTypes.cpp.
StructType::OffsetInfo const* mlir::spirv::detail::StructTypeStorage::offsetInfo |
Definition at line 1093 of file SPIRVTypes.cpp.