MLIR  22.0.0git
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
mlir::spirv::detail::StructTypeStorage Struct Reference

Type storage for SPIR-V structure types: More...

+ Inheritance diagram for mlir::spirv::detail::StructTypeStorage:

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< TypegetMemberTypes () const
 
ArrayRef< StructType::OffsetInfogetOffsetInfo () const
 
ArrayRef< StructType::MemberDecorationInfogetMemberDecorationsInfo () const
 
ArrayRef< StructType::StructDecorationInfogetStructDecorationsInfo () 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...
 
- Public Member Functions inherited from mlir::TypeStorage
const AbstractTypegetAbstractType ()
 Return the abstract type descriptor for this type. More...
 

Static Public Member Functions

static StructTypeStorageconstruct (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

- 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
 

Detailed Description

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.

Member Typedef Documentation

◆ KeyTy

A storage key is divided into 2 parts:

  • for identified structs:
    • a StringRef representing the struct identifier;
  • for literal structs:
    • an ArrayRef<Type> for member types;
    • an ArrayRef<StructType::OffsetInfo> for member offset info;
    • an ArrayRef<StructType::MemberDecorationInfo> for member decoration info;
    • an ArrayRef<StructType::StructDecorationInfo> for struct decoration info.

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.

Constructor & Destructor Documentation

◆ StructTypeStorage() [1/2]

mlir::spirv::detail::StructTypeStorage::StructTypeStorage ( StringRef  identifier)
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.

◆ StructTypeStorage() [2/2]

mlir::spirv::detail::StructTypeStorage::StructTypeStorage ( unsigned  numMembers,
Type const *  memberTypes,
StructType::OffsetInfo const *  layoutInfo,
unsigned  numMemberDecorations,
StructType::MemberDecorationInfo const *  memberDecorationsInfo,
unsigned  numStructDecorations,
StructType::StructDecorationInfo const *  structDecorationsInfo 
)
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.

Member Function Documentation

◆ construct()

static StructTypeStorage* mlir::spirv::detail::StructTypeStorage::construct ( TypeStorageAllocator allocator,
const KeyTy key 
)
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().

◆ getIdentifier()

StringRef mlir::spirv::detail::StructTypeStorage::getIdentifier ( ) const
inline

Definition at line 989 of file SPIRVTypes.cpp.

◆ getMemberDecorationsInfo()

ArrayRef<StructType::MemberDecorationInfo> mlir::spirv::detail::StructTypeStorage::getMemberDecorationsInfo ( ) const
inline

Definition at line 974 of file SPIRVTypes.cpp.

◆ getMemberTypes()

ArrayRef<Type> mlir::spirv::detail::StructTypeStorage::getMemberTypes ( ) const
inline

Definition at line 963 of file SPIRVTypes.cpp.

◆ getOffsetInfo()

ArrayRef<StructType::OffsetInfo> mlir::spirv::detail::StructTypeStorage::getOffsetInfo ( ) const
inline

Definition at line 967 of file SPIRVTypes.cpp.

◆ getStructDecorationsInfo()

ArrayRef<StructType::StructDecorationInfo> mlir::spirv::detail::StructTypeStorage::getStructDecorationsInfo ( ) const
inline

Definition at line 982 of file SPIRVTypes.cpp.

◆ isIdentified()

bool mlir::spirv::detail::StructTypeStorage::isIdentified ( ) const
inline

Definition at line 991 of file SPIRVTypes.cpp.

◆ mutate()

LogicalResult mlir::spirv::detail::StructTypeStorage::mutate ( TypeStorageAllocator allocator,
ArrayRef< Type structMemberTypes,
ArrayRef< StructType::OffsetInfo structOffsetInfo,
ArrayRef< StructType::MemberDecorationInfo structMemberDecorationInfo,
ArrayRef< StructType::StructDecorationInfo structDecorationInfo 
)
inline

Sets the struct type content for identified structs.

Calling this method is only valid for identified structs.

Fails under the following conditions:

  • If called for a literal struct;
  • If called for an identified struct whose body was set before (through a call to this method) but with different contents from the passed arguments.

Definition at line 1002 of file SPIRVTypes.cpp.

References mlir::StorageUniquer::StorageAllocator::copyInto().

◆ operator==()

bool mlir::spirv::detail::StructTypeStorage::operator== ( const KeyTy key) const
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.

Member Data Documentation

◆ identifier

StringRef mlir::spirv::detail::StructTypeStorage::identifier

Definition at line 1052 of file SPIRVTypes.cpp.

◆ memberDecorationsInfo

StructType::MemberDecorationInfo const* mlir::spirv::detail::StructTypeStorage::memberDecorationsInfo

Definition at line 1049 of file SPIRVTypes.cpp.

◆ memberTypesAndIsBodySet

llvm::PointerIntPair<Type const *, 1, bool> mlir::spirv::detail::StructTypeStorage::memberTypesAndIsBodySet

Definition at line 1045 of file SPIRVTypes.cpp.

◆ numMemberDecorations

unsigned mlir::spirv::detail::StructTypeStorage::numMemberDecorations

Definition at line 1048 of file SPIRVTypes.cpp.

◆ numMembers

unsigned mlir::spirv::detail::StructTypeStorage::numMembers

Definition at line 1047 of file SPIRVTypes.cpp.

◆ numStructDecorations

unsigned mlir::spirv::detail::StructTypeStorage::numStructDecorations

Definition at line 1050 of file SPIRVTypes.cpp.

◆ offsetInfo

StructType::OffsetInfo const* mlir::spirv::detail::StructTypeStorage::offsetInfo

Definition at line 1046 of file SPIRVTypes.cpp.

◆ structDecorationsInfo

StructType::StructDecorationInfo const* mlir::spirv::detail::StructTypeStorage::structDecorationsInfo

Definition at line 1051 of file SPIRVTypes.cpp.


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