13 #ifndef MLIR_DIALECT_SPIRV_IR_SPIRVTYPES_H_
14 #define MLIR_DIALECT_SPIRV_IR_SPIRVTYPES_H_
29 struct ArrayTypeStorage;
30 struct CooperativeMatrixTypeStorage;
31 struct ImageTypeStorage;
32 struct JointMatrixTypeStorage;
33 struct MatrixTypeStorage;
34 struct PointerTypeStorage;
35 struct RuntimeArrayTypeStorage;
36 struct SampledImageTypeStorage;
37 struct StructTypeStorage;
59 std::optional<StorageClass> storage = std::nullopt);
71 std::optional<StorageClass> storage = std::nullopt);
82 using SPIRVType::SPIRVType;
89 static bool isValid(IntegerType);
92 std::optional<StorageClass> storage = std::nullopt);
94 std::optional<StorageClass> storage = std::nullopt);
102 using SPIRVType::SPIRVType;
107 static bool isValid(VectorType);
120 std::optional<StorageClass> storage = std::nullopt);
122 std::optional<StorageClass> storage = std::nullopt);
129 detail::ArrayTypeStorage> {
148 std::optional<StorageClass> storage = std::nullopt);
150 std::optional<StorageClass> storage = std::nullopt);
159 :
public Type::TypeBase<ImageType, SPIRVType, detail::ImageTypeStorage> {
165 ImageDepthInfo depth = ImageDepthInfo::DepthUnknown,
166 ImageArrayedInfo arrayed = ImageArrayedInfo::NonArrayed,
167 ImageSamplingInfo samplingInfo = ImageSamplingInfo::SingleSampled,
168 ImageSamplerUseInfo samplerUse = ImageSamplerUseInfo::SamplerUnknown,
169 ImageFormat format = ImageFormat::Unknown) {
171 std::tuple<
Type, Dim, ImageDepthInfo, ImageArrayedInfo,
172 ImageSamplingInfo, ImageSamplerUseInfo, ImageFormat>(
173 elementType, dim, depth, arrayed, samplingInfo, samplerUse,
178 get(std::tuple<
Type, Dim, ImageDepthInfo, ImageArrayedInfo,
179 ImageSamplingInfo, ImageSamplerUseInfo, ImageFormat>);
191 std::optional<StorageClass> storage = std::nullopt);
193 std::optional<StorageClass> storage = std::nullopt);
198 detail::PointerTypeStorage> {
209 std::optional<StorageClass> storage = std::nullopt);
211 std::optional<StorageClass> storage = std::nullopt);
217 detail::RuntimeArrayTypeStorage> {
233 std::optional<StorageClass> storage = std::nullopt);
235 std::optional<StorageClass> storage = std::nullopt);
241 detail::SampledImageTypeStorage> {
256 std::optional<spirv::StorageClass> storage = std::nullopt);
259 std::optional<spirv::StorageClass> storage = std::nullopt);
282 detail::StructTypeStorage, TypeTrait::IsMutable> {
327 static StructType
getIdentified(MLIRContext *context, StringRef identifier);
335 static StructType
getEmpty(MLIRContext *context, StringRef identifier =
"");
351 ElementTypeRange, const Type *, Type, Type, Type> {
353 using RangeBaseT::RangeBaseT;
356 static const Type *offset_base(
const Type *
object, ptrdiff_t index) {
357 return object + index;
360 static Type dereference_iterator(
const Type *
object, ptrdiff_t index) {
361 return object[index];
377 &memberDecorations)
const;
393 std::optional<StorageClass> storage = std::nullopt);
395 std::optional<StorageClass> storage = std::nullopt);
399 hash_value(
const StructType::MemberDecorationInfo &memberDecorationInfo);
404 detail::CooperativeMatrixTypeStorage> {
409 unsigned rows,
unsigned columns);
420 std::optional<StorageClass> storage = std::nullopt);
422 std::optional<StorageClass> storage = std::nullopt);
428 detail::JointMatrixTypeStorage> {
433 unsigned columns, MatrixLayout matrixLayout);
447 std::optional<StorageClass> storage = std::nullopt);
449 std::optional<StorageClass> storage = std::nullopt);
454 detail::MatrixTypeStorage> {
461 Type columnType, uint32_t columnCount);
464 Type columnType, uint32_t columnCount);
484 std::optional<StorageClass> storage = std::nullopt);
486 std::optional<StorageClass> storage = std::nullopt);
This class represents a diagnostic that is inflight and set to be reported.
Instances of the Type class are uniqued, have an immutable identifier and an optional mutable compone...
Utility class for implementing users of storage classes uniqued by a StorageUniquer.
Type getElementType() const
unsigned getArrayStride() const
Returns the array stride in bytes.
unsigned getNumElements() const
static ArrayType get(Type elementType, unsigned elementCount)
std::optional< int64_t > getSizeInBytes()
Returns the array size in bytes.
void getExtensions(SPIRVType::ExtensionArrayRefVector &extensions, std::optional< StorageClass > storage=std::nullopt)
void getCapabilities(SPIRVType::CapabilityArrayRefVector &capabilities, std::optional< StorageClass > storage=std::nullopt)
void getCapabilities(SPIRVType::CapabilityArrayRefVector &capabilities, std::optional< StorageClass > storage=std::nullopt)
std::optional< int64_t > getSizeInBytes()
bool hasCompileTimeKnownNumElements() const
Return true if the number of elements is known at compile time and is not implementation dependent.
void getExtensions(SPIRVType::ExtensionArrayRefVector &extensions, std::optional< StorageClass > storage=std::nullopt)
unsigned getNumElements() const
Return the number of elements of the type.
static bool isValid(VectorType)
Returns true if the given vector type is valid for the SPIR-V dialect.
Type getElementType(unsigned) const
static bool classof(Type type)
unsigned getRows() const
return the number of rows of the matrix.
unsigned getColumns() const
return the number of columns of the matrix.
static CooperativeMatrixNVType get(Type elementType, Scope scope, unsigned rows, unsigned columns)
void getCapabilities(SPIRVType::CapabilityArrayRefVector &capabilities, std::optional< StorageClass > storage=std::nullopt)
Scope getScope() const
Return the scope of the cooperative matrix.
Type getElementType() const
void getExtensions(SPIRVType::ExtensionArrayRefVector &extensions, std::optional< StorageClass > storage=std::nullopt)
static ImageType get(Type elementType, Dim dim, ImageDepthInfo depth=ImageDepthInfo::DepthUnknown, ImageArrayedInfo arrayed=ImageArrayedInfo::NonArrayed, ImageSamplingInfo samplingInfo=ImageSamplingInfo::SingleSampled, ImageSamplerUseInfo samplerUse=ImageSamplerUseInfo::SamplerUnknown, ImageFormat format=ImageFormat::Unknown)
ImageDepthInfo getDepthInfo() const
ImageArrayedInfo getArrayedInfo() const
ImageFormat getImageFormat() const
ImageSamplerUseInfo getSamplerUseInfo() const
Type getElementType() const
ImageSamplingInfo getSamplingInfo() const
void getCapabilities(SPIRVType::CapabilityArrayRefVector &capabilities, std::optional< StorageClass > storage=std::nullopt)
void getExtensions(SPIRVType::ExtensionArrayRefVector &extensions, std::optional< StorageClass > storage=std::nullopt)
Scope getScope() const
Return the scope of the joint matrix.
void getCapabilities(SPIRVType::CapabilityArrayRefVector &capabilities, std::optional< StorageClass > storage=std::nullopt)
void getExtensions(SPIRVType::ExtensionArrayRefVector &extensions, std::optional< StorageClass > storage=std::nullopt)
unsigned getColumns() const
return the number of columns of the matrix.
static JointMatrixINTELType get(Type elementType, Scope scope, unsigned rows, unsigned columns, MatrixLayout matrixLayout)
unsigned getRows() const
return the number of rows of the matrix.
MatrixLayout getMatrixLayout() const
return the layout of the matrix
Type getElementType() const
static MatrixType getChecked(function_ref< InFlightDiagnostic()> emitError, Type columnType, uint32_t columnCount)
unsigned getNumElements() const
Returns total number of elements (rows*columns).
static MatrixType get(Type columnType, uint32_t columnCount)
Type getColumnType() const
unsigned getNumColumns() const
Returns the number of columns.
static bool isValidColumnType(Type columnType)
Returns true if the matrix elements are vectors of float elements.
Type getElementType() const
Returns the elements' type (i.e, single element type).
void getExtensions(SPIRVType::ExtensionArrayRefVector &extensions, std::optional< StorageClass > storage=std::nullopt)
void getCapabilities(SPIRVType::CapabilityArrayRefVector &capabilities, std::optional< StorageClass > storage=std::nullopt)
unsigned getNumRows() const
Returns the number of rows.
static LogicalResult verify(function_ref< InFlightDiagnostic()> emitError, Type columnType, uint32_t columnCount)
void getExtensions(SPIRVType::ExtensionArrayRefVector &extensions, std::optional< StorageClass > storage=std::nullopt)
Type getPointeeType() const
StorageClass getStorageClass() const
void getCapabilities(SPIRVType::CapabilityArrayRefVector &capabilities, std::optional< StorageClass > storage=std::nullopt)
static PointerType get(Type pointeeType, StorageClass storageClass)
Type getElementType() const
void getCapabilities(SPIRVType::CapabilityArrayRefVector &capabilities, std::optional< StorageClass > storage=std::nullopt)
unsigned getArrayStride() const
Returns the array stride in bytes.
void getExtensions(SPIRVType::ExtensionArrayRefVector &extensions, std::optional< StorageClass > storage=std::nullopt)
static RuntimeArrayType get(Type elementType)
SmallVectorImpl< ArrayRef< Capability > > CapabilityArrayRefVector
The capability requirements for each type are following the ((Capability::A OR Extension::B) AND (Cap...
std::optional< int64_t > getSizeInBytes()
Returns the size in bytes for each type.
static bool classof(Type type)
void getCapabilities(CapabilityArrayRefVector &capabilities, std::optional< StorageClass > storage=std::nullopt)
Appends to capabilities the capabilities needed for this type to appear in the given storage class.
SmallVectorImpl< ArrayRef< Extension > > ExtensionArrayRefVector
The extension requirements for each type are following the ((Extension::A OR Extension::B) AND (Exten...
void getExtensions(ExtensionArrayRefVector &extensions, std::optional< StorageClass > storage=std::nullopt)
Appends to extensions the extensions needed for this type to appear in the given storage class.
static LogicalResult verify(function_ref< InFlightDiagnostic()> emitError, Type imageType)
void getCapabilities(SPIRVType::CapabilityArrayRefVector &capabilities, std::optional< spirv::StorageClass > storage=std::nullopt)
static SampledImageType getChecked(function_ref< InFlightDiagnostic()> emitError, Type imageType)
Type getImageType() const
void getExtensions(SPIRVType::ExtensionArrayRefVector &extensions, std::optional< spirv::StorageClass > storage=std::nullopt)
static SampledImageType get(Type imageType)
static bool classof(Type type)
void getExtensions(SPIRVType::ExtensionArrayRefVector &extensions, std::optional< StorageClass > storage=std::nullopt)
static bool isValid(FloatType)
Returns true if the given integer type is valid for the SPIR-V dialect.
void getCapabilities(SPIRVType::CapabilityArrayRefVector &capabilities, std::optional< StorageClass > storage=std::nullopt)
std::optional< int64_t > getSizeInBytes()
Range class for element types.
void getMemberDecorations(SmallVectorImpl< StructType::MemberDecorationInfo > &memberDecorations) const
void getCapabilities(SPIRVType::CapabilityArrayRefVector &capabilities, std::optional< StorageClass > storage=std::nullopt)
static StructType getIdentified(MLIRContext *context, StringRef identifier)
Construct an identified StructType.
void getExtensions(SPIRVType::ExtensionArrayRefVector &extensions, std::optional< StorageClass > storage=std::nullopt)
bool isIdentified() const
Returns true if the StructType is identified.
StringRef getIdentifier() const
For literal structs, return an empty string.
static StructType getEmpty(MLIRContext *context, StringRef identifier="")
Construct a (possibly identified) StructType with no members.
unsigned getNumElements() const
Type getElementType(unsigned) const
LogicalResult trySetBody(ArrayRef< Type > memberTypes, ArrayRef< OffsetInfo > offsetInfo={}, ArrayRef< MemberDecorationInfo > memberDecorations={})
Sets the contents of an incomplete identified StructType.
ElementTypeRange getElementTypes() const
static StructType get(ArrayRef< Type > memberTypes, ArrayRef< OffsetInfo > offsetInfo={}, ArrayRef< MemberDecorationInfo > memberDecorations={})
Construct a literal StructType with at least one member.
uint64_t getMemberOffset(unsigned) const
llvm::hash_code hash_value(const StructType::MemberDecorationInfo &memberDecorationInfo)
Include the generated interface declarations.
InFlightDiagnostic emitError(Location loc)
Utility method to emit an error message using this location.
This class represents an efficient way to signal success or failure.
bool operator==(const MemberDecorationInfo &other) const
MemberDecorationInfo(uint32_t index, uint32_t hasValue, Decoration decoration, uint32_t decorationValue)
bool operator<(const MemberDecorationInfo &other) const