//===- DialectResourceBlobManager.h - Dialect Blob Management ---*- 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 utility classes for referencing and managing asm resource // blobs. These classes are intended to more easily facilitate the sharing of // large blobs, and their definition. // //===----------------------------------------------------------------------===// #ifndef MLIR_IR_DIALECTRESOURCEBLOBMANAGER_H #define MLIR_IR_DIALECTRESOURCEBLOBMANAGER_H #include "mlir/IR/AsmState.h" #include "mlir/IR/OpImplementation.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/Twine.h" #include "llvm/Support/RWMutex.h" #include "llvm/Support/SMLoc.h" #include <optional> namespace mlir { //===----------------------------------------------------------------------===// // DialectResourceBlobManager //===---------------------------------------------------------------------===// /// This class defines a manager for dialect resource blobs. Blobs are uniqued /// by a given key, and represented using AsmResourceBlobs. class DialectResourceBlobManager { … }; //===----------------------------------------------------------------------===// // ResourceBlobManagerDialectInterface //===---------------------------------------------------------------------===// /// This class implements a dialect interface that provides common functionality /// for interacting with a resource blob manager. class ResourceBlobManagerDialectInterface : public DialectInterface::Base<ResourceBlobManagerDialectInterface> { … }; /// This class provides a base class for dialects implementing the resource blob /// interface. It provides several additional dialect specific utilities on top /// of the generic interface. `HandleT` is the type of the handle used to /// reference a resource blob. template <typename HandleT> class ResourceBlobManagerDialectInterfaceBase : public ResourceBlobManagerDialectInterface { … }; //===----------------------------------------------------------------------===// // DialectResourceBlobHandle //===----------------------------------------------------------------------===// /// This class defines a dialect specific handle to a resource blob. These /// handles utilize a StringRef for the internal key, and an AsmResourceBlob as /// the underlying data. template <typename DialectT> struct DialectResourceBlobHandle : public AsmDialectResourceHandleBase<DialectResourceBlobHandle<DialectT>, DialectResourceBlobManager::BlobEntry, DialectT> { … }; } // namespace mlir #endif // MLIR_IR_DIALECTRESOURCEBLOBMANAGER_H