//===- AttributeDetail.h - MLIR Affine Map details Class --------*- 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 holds implementation details of Attribute. // //===----------------------------------------------------------------------===// #ifndef ATTRIBUTEDETAIL_H_ #define ATTRIBUTEDETAIL_H_ #include "mlir/IR/AffineMap.h" #include "mlir/IR/AttributeSupport.h" #include "mlir/IR/BuiltinAttributes.h" #include "mlir/IR/BuiltinTypes.h" #include "mlir/IR/IntegerSet.h" #include "mlir/IR/MLIRContext.h" #include "mlir/Support/StorageUniquer.h" #include "mlir/Support/ThreadLocalCache.h" #include "llvm/ADT/APFloat.h" #include "llvm/ADT/PointerIntPair.h" #include "llvm/Support/TrailingObjects.h" namespace mlir { namespace detail { //===----------------------------------------------------------------------===// // Elements Attributes //===----------------------------------------------------------------------===// /// Return the bit width which DenseElementsAttr should use for this type. inline size_t getDenseElementBitWidth(Type eltType) { … } /// An attribute representing a reference to a dense vector or tensor object. struct DenseElementsAttributeStorage : public AttributeStorage { … }; /// An attribute representing a reference to a dense vector or tensor object. struct DenseIntOrFPElementsAttrStorage : public DenseElementsAttributeStorage { … }; /// An attribute representing a reference to a dense vector or tensor object /// containing strings. struct DenseStringElementsAttrStorage : public DenseElementsAttributeStorage { … }; //===----------------------------------------------------------------------===// // StringAttr //===----------------------------------------------------------------------===// struct StringAttrStorage : public AttributeStorage { … }; //===----------------------------------------------------------------------===// // DistinctAttr //===----------------------------------------------------------------------===// /// An attribute to store a distinct reference to another attribute. struct DistinctAttrStorage : public AttributeStorage { … }; /// A specialized attribute uniquer for distinct attributes that always /// allocates since the distinct attribute instances use the address of their /// storage as unique identifier. class DistinctAttributeUniquer { … }; /// An allocator for distinct attribute storage instances. It uses thread local /// bump pointer allocators stored in a thread local cache to ensure the storage /// is freed after the destruction of the distinct attribute allocator. class DistinctAttributeAllocator { … }; } // namespace detail } // namespace mlir #endif // ATTRIBUTEDETAIL_H_