MLIR 22.0.0git
SPIRVAttributes.h
Go to the documentation of this file.
1//===- SPIRVAttributes.h - SPIR-V attribute declarations -------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file declares SPIR-V dialect specific attributes.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef MLIR_DIALECT_SPIRV_IR_SPIRVATTRIBUTES_H
14#define MLIR_DIALECT_SPIRV_IR_SPIRVATTRIBUTES_H
15
19
20namespace mlir {
21namespace spirv {
23}
24} // namespace mlir
25
26// Pull in TableGen'erated SPIR-V attribute definitions for target and ABI.
27#define GET_ATTRDEF_CLASSES
28#include "mlir/Dialect/SPIRV/IR/SPIRVAttributes.h.inc"
29
30namespace mlir {
31namespace spirv {
32enum class Capability : uint32_t;
33enum class DeviceType : uint32_t;
34enum class Extension : uint32_t;
35enum class Vendor : uint32_t;
36enum class Version : uint32_t;
37
42} // namespace detail
43
44// TableGen'erated helper functions.
45//
46// Get the name used in the Op to refer to an enum value of the given
47// `EnumClass`.
48// template <typename EnumClass> StringRef attributeName();
49//
50#include "mlir/Dialect/SPIRV/IR/SPIRVAttrUtils.inc"
51
52/// An attribute that specifies the information regarding the interface
53/// variable: descriptor set, binding, storage class.
55 : public Attribute::AttrBase<InterfaceVarABIAttr, Attribute,
56 detail::InterfaceVarABIAttributeStorage> {
57public:
58 using Base::Base;
59
60 /// Gets a InterfaceVarABIAttr.
61 static InterfaceVarABIAttr get(uint32_t descriptorSet, uint32_t binding,
62 std::optional<StorageClass> storageClass,
63 MLIRContext *context);
64 static InterfaceVarABIAttr get(IntegerAttr descriptorSet, IntegerAttr binding,
65 IntegerAttr storageClass);
67 /// Returns the attribute kind's name (without the 'spirv.' prefix).
68 static StringRef getKindName();
69
70 /// Returns descriptor set.
71 uint32_t getDescriptorSet();
72
73 /// Returns binding.
74 uint32_t getBinding();
75
76 /// Returns `spirv::StorageClass`.
77 std::optional<StorageClass> getStorageClass();
79 static LogicalResult
81 IntegerAttr descriptorSet, IntegerAttr binding,
82 IntegerAttr storageClass);
83
84 static constexpr StringLiteral name = "spirv.interface_var_abi";
85};
87/// An attribute that specifies the SPIR-V (version, capabilities, extensions)
88/// triple.
90 : public Attribute::AttrBase<VerCapExtAttr, Attribute,
91 detail::VerCapExtAttributeStorage> {
92public:
93 using Base::Base;
95 /// Gets a VerCapExtAttr instance.
96 static VerCapExtAttr get(Version version, ArrayRef<Capability> capabilities,
97 ArrayRef<Extension> extensions,
98 MLIRContext *context);
99 static VerCapExtAttr get(IntegerAttr version, ArrayAttr capabilities,
100 ArrayAttr extensions);
101
102 /// Returns the attribute kind's name (without the 'spirv.' prefix).
103 static StringRef getKindName();
104
105 /// Returns the version.
106 Version getVersion();
107
108 struct ext_iterator final
109 : public llvm::mapped_iterator<ArrayAttr::iterator,
110 Extension (*)(Attribute)> {
111 explicit ext_iterator(ArrayAttr::iterator it);
112 };
115 /// Returns the extensions.
117 /// Returns the extensions as a string array attribute.
119
120 struct cap_iterator final
121 : public llvm::mapped_iterator<ArrayAttr::iterator,
122 Capability (*)(Attribute)> {
123 explicit cap_iterator(ArrayAttr::iterator it);
124 };
127 /// Returns the capabilities.
129 /// Returns the capabilities as an integer array attribute.
134 IntegerAttr version, ArrayAttr capabilities,
135 ArrayAttr extensions);
136
137 static constexpr StringLiteral name = "spirv.ver_cap_ext";
139
140/// An attribute that specifies the target version, allowed extensions and
141/// capabilities, and resource limits. These information describes a SPIR-V
142/// target environment.
144 : public Attribute::AttrBase<TargetEnvAttr, Attribute,
145 detail::TargetEnvAttributeStorage> {
146public:
147 /// ID for unknown devices.
148 static constexpr uint32_t kUnknownDeviceID = 0x7FFFFFFF;
149
150 using Base::Base;
151
152 /// Gets a TargetEnvAttr instance.
153 static TargetEnvAttr get(VerCapExtAttr triple, ResourceLimitsAttr limits,
154 ClientAPI clientAPI = ClientAPI::Unknown,
155 Vendor vendorID = Vendor::Unknown,
156 DeviceType deviceType = DeviceType::Unknown,
157 uint32_t deviceId = kUnknownDeviceID);
159 /// Returns the attribute kind's name (without the 'spirv.' prefix).
160 static StringRef getKindName();
161
162 /// Returns the (version, capabilities, extensions) triple attribute.
164
165 /// Returns the target version.
166 Version getVersion() const;
167
168 /// Returns the target extensions.
170 /// Returns the target extensions as a string array attribute.
172
173 /// Returns the target capabilities.
175 /// Returns the target capabilities as an integer array attribute.
177
178 /// Returns the client API.
179 ClientAPI getClientAPI() const;
180
181 /// Returns the vendor ID.
182 Vendor getVendorID() const;
183
184 /// Returns the device type.
185 DeviceType getDeviceType() const;
186
187 /// Returns the device ID.
188 uint32_t getDeviceID() const;
189
190 /// Returns the target resource limits.
191 ResourceLimitsAttr getResourceLimits() const;
192
193 static constexpr StringLiteral name = "spirv.target_env";
194};
195} // namespace spirv
196} // namespace mlir
197
198#endif // MLIR_DIALECT_SPIRV_IR_SPIRVATTRIBUTES_H
ArrayAttr()
detail::StorageUserBase< ConcreteType, BaseType, StorageType, detail::AttributeUniquer, Traits... > AttrBase
Utility class for implementing attributes.
Definition Attributes.h:30
This class represents a diagnostic that is inflight and set to be reported.
MLIRContext is the top-level object for a collection of MLIR operations.
Definition MLIRContext.h:63
An attribute that specifies the information regarding the interface variable: descriptor set,...
uint32_t getBinding()
Returns binding.
static StringRef getKindName()
Returns the attribute kind's name (without the 'spirv.' prefix).
static constexpr StringLiteral name
uint32_t getDescriptorSet()
Returns descriptor set.
static InterfaceVarABIAttr get(uint32_t descriptorSet, uint32_t binding, std::optional< StorageClass > storageClass, MLIRContext *context)
Gets a InterfaceVarABIAttr.
static LogicalResult verifyInvariants(function_ref< InFlightDiagnostic()> emitError, IntegerAttr descriptorSet, IntegerAttr binding, IntegerAttr storageClass)
std::optional< StorageClass > getStorageClass()
Returns spirv::StorageClass.
An attribute that specifies the target version, allowed extensions and capabilities,...
Version getVersion() const
Returns the target version.
VerCapExtAttr::cap_range getCapabilities()
Returns the target capabilities.
ResourceLimitsAttr getResourceLimits() const
Returns the target resource limits.
static StringRef getKindName()
Returns the attribute kind's name (without the 'spirv.' prefix).
VerCapExtAttr getTripleAttr() const
Returns the (version, capabilities, extensions) triple attribute.
ArrayAttr getCapabilitiesAttr()
Returns the target capabilities as an integer array attribute.
VerCapExtAttr::ext_range getExtensions()
Returns the target extensions.
static constexpr StringLiteral name
Vendor getVendorID() const
Returns the vendor ID.
DeviceType getDeviceType() const
Returns the device type.
ClientAPI getClientAPI() const
Returns the client API.
ArrayAttr getExtensionsAttr()
Returns the target extensions as a string array attribute.
uint32_t getDeviceID() const
Returns the device ID.
static constexpr uint32_t kUnknownDeviceID
ID for unknown devices.
static TargetEnvAttr get(VerCapExtAttr triple, ResourceLimitsAttr limits, ClientAPI clientAPI=ClientAPI::Unknown, Vendor vendorID=Vendor::Unknown, DeviceType deviceType=DeviceType::Unknown, uint32_t deviceId=kUnknownDeviceID)
Gets a TargetEnvAttr instance.
An attribute that specifies the SPIR-V (version, capabilities, extensions) triple.
cap_range getCapabilities()
Returns the capabilities.
static LogicalResult verifyInvariants(function_ref< InFlightDiagnostic()> emitError, IntegerAttr version, ArrayAttr capabilities, ArrayAttr extensions)
Version getVersion()
Returns the version.
static StringRef getKindName()
Returns the attribute kind's name (without the 'spirv.' prefix).
static VerCapExtAttr get(Version version, ArrayRef< Capability > capabilities, ArrayRef< Extension > extensions, MLIRContext *context)
Gets a VerCapExtAttr instance.
ArrayAttr getCapabilitiesAttr()
Returns the capabilities as an integer array attribute.
llvm::iterator_range< ext_iterator > ext_range
static constexpr StringLiteral name
ext_range getExtensions()
Returns the extensions.
ArrayAttr getExtensionsAttr()
Returns the extensions as a string array attribute.
llvm::iterator_range< cap_iterator > cap_range
Include the generated interface declarations.
InFlightDiagnostic emitError(Location loc)
Utility method to emit an error message using this location.
llvm::function_ref< Fn > function_ref
Definition LLVM.h:152