//===- AttributeSupport.h ---------------------------------------*- 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 defines support types for registering dialect extended attributes. // //===----------------------------------------------------------------------===// #ifndef MLIR_IR_ATTRIBUTESUPPORT_H #define MLIR_IR_ATTRIBUTESUPPORT_H #include "mlir/IR/MLIRContext.h" #include "mlir/IR/StorageUniquerSupport.h" #include "mlir/IR/Types.h" #include "llvm/ADT/PointerIntPair.h" #include "llvm/ADT/Twine.h" namespace mlir { //===----------------------------------------------------------------------===// // AbstractAttribute //===----------------------------------------------------------------------===// /// This class contains all of the static information common to all instances of /// a registered Attribute. class AbstractAttribute { … }; //===----------------------------------------------------------------------===// // AttributeStorage //===----------------------------------------------------------------------===// namespace detail { class AttributeUniquer; class DistinctAttributeUniquer; } // namespace detail /// Base storage class appearing in an attribute. Derived storage classes should /// only be constructed within the context of the AttributeUniquer. class alignas(8) AttributeStorage : public StorageUniquer::BaseStorage { … }; /// Default storage type for attributes that require no additional /// initialization or storage. DefaultAttributeStorage; //===----------------------------------------------------------------------===// // AttributeStorageAllocator //===----------------------------------------------------------------------===// // This is a utility allocator used to allocate memory for instances of derived // Attributes. AttributeStorageAllocator; //===----------------------------------------------------------------------===// // AttributeUniquer //===----------------------------------------------------------------------===// namespace detail { // A utility class to get, or create, unique instances of attributes within an // MLIRContext. This class manages all creation and uniquing of attributes. class AttributeUniquer { … }; // Internal function called by ODS generated code. // Default initializes the type within a FailureOr<T> if T is default // constructible and returns a reference to the instance. // Otherwise, returns a reference to the FailureOr<T>. template <class T> decltype(auto) unwrapForCustomParse(FailureOr<T> &failureOr) { … } } // namespace detail } // namespace mlir #endif