//===- DialectInterface.h - IR Dialect Interfaces ---------------*- 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 // //===----------------------------------------------------------------------===// #ifndef MLIR_IR_DIALECTINTERFACE_H #define MLIR_IR_DIALECTINTERFACE_H #include "mlir/Support/TypeID.h" #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/STLExtras.h" #include <vector> namespace mlir { class Dialect; class MLIRContext; class Operation; //===----------------------------------------------------------------------===// // DialectInterface //===----------------------------------------------------------------------===// namespace detail { /// The base class used for all derived interface types. This class provides /// utilities necessary for registration. template <typename ConcreteType, typename BaseT> class DialectInterfaceBase : public BaseT { … }; } // namespace detail /// This class represents an interface overridden for a single dialect. class DialectInterface { … }; //===----------------------------------------------------------------------===// // DialectInterfaceCollection //===----------------------------------------------------------------------===// namespace detail { /// This class is the base class for a collection of instances for a specific /// interface kind. class DialectInterfaceCollectionBase { … }; } // namespace detail /// A collection of dialect interfaces within a context, for a given concrete /// interface type. template <typename InterfaceType> class DialectInterfaceCollection : public detail::DialectInterfaceCollectionBase { … }; } // namespace mlir #endif