//===- SPIRVAttributes.h - SPIR-V attribute declarations -------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file declares SPIR-V dialect specific attributes. // //===----------------------------------------------------------------------===// #ifndef MLIR_DIALECT_SPIRV_IR_SPIRVATTRIBUTES_H #define MLIR_DIALECT_SPIRV_IR_SPIRVATTRIBUTES_H #include "mlir/Dialect/SPIRV/IR/SPIRVTypes.h" #include "mlir/IR/BuiltinAttributes.h" #include "mlir/Support/LLVM.h" namespace mlir { namespace spirv { class VerCapExtAttr; } } // namespace mlir // Pull in TableGen'erated SPIR-V attribute definitions for target and ABI. #define GET_ATTRDEF_CLASSES #include "mlir/Dialect/SPIRV/IR/SPIRVAttributes.h.inc" namespace mlir { namespace spirv { enum class Capability : uint32_t; enum class DeviceType : uint32_t; enum class Extension : uint32_t; enum class Vendor : uint32_t; enum class Version : uint32_t; namespace detail { struct InterfaceVarABIAttributeStorage; struct TargetEnvAttributeStorage; struct VerCapExtAttributeStorage; } // namespace detail // TableGen'erated helper functions. // // Get the name used in the Op to refer to an enum value of the given // `EnumClass`. // template <typename EnumClass> StringRef attributeName(); // #include "mlir/Dialect/SPIRV/IR/SPIRVAttrUtils.inc" /// An attribute that specifies the information regarding the interface /// variable: descriptor set, binding, storage class. class InterfaceVarABIAttr : public Attribute::AttrBase<InterfaceVarABIAttr, Attribute, detail::InterfaceVarABIAttributeStorage> { … }; /// An attribute that specifies the SPIR-V (version, capabilities, extensions) /// triple. class VerCapExtAttr : public Attribute::AttrBase<VerCapExtAttr, Attribute, detail::VerCapExtAttributeStorage> { … }; /// An attribute that specifies the target version, allowed extensions and /// capabilities, and resource limits. These information describes a SPIR-V /// target environment. class TargetEnvAttr : public Attribute::AttrBase<TargetEnvAttr, Attribute, detail::TargetEnvAttributeStorage> { … }; } // namespace spirv } // namespace mlir #endif // MLIR_DIALECT_SPIRV_IR_SPIRVATTRIBUTES_H