//===- Interfaces.h - Interface wrapper classes -----------------*- 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_TABLEGEN_INTERFACES_H_ #define MLIR_TABLEGEN_INTERFACES_H_ #include "mlir/Support/LLVM.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" namespace llvm { class Init; class Record; } // end namespace llvm namespace mlir { namespace tblgen { // Wrapper class with helper methods for accessing InterfaceMethod defined // in TableGen. class InterfaceMethod { public: // This struct represents a single method argument. struct Argument { StringRef type; StringRef name; }; explicit InterfaceMethod(const llvm::Record *def); // Return the return type of this method. StringRef getReturnType() const; // Return the name of this method. StringRef getName() const; // Return if this method is static. bool isStatic() const; // Return the body for this method if it has one. llvm::Optional getBody() const; // Return the default implementation for this method if it has one. llvm::Optional getDefaultImplementation() const; // Return the description of this method if it has one. llvm::Optional getDescription() const; // Arguments. ArrayRef getArguments() const; bool arg_empty() const; private: // The TableGen definition of this method. const llvm::Record *def; // The arguments of this method. SmallVector arguments; }; //===----------------------------------------------------------------------===// // Interface //===----------------------------------------------------------------------===// // Wrapper class with helper methods for accessing Interfaces defined in // TableGen. class Interface { public: explicit Interface(const llvm::Record *def); // Return the name of this interface. StringRef getName() const; // Return the C++ namespace of this interface. StringRef getCppNamespace() const; // Return the methods of this interface. ArrayRef getMethods() const; // Return the description of this method if it has one. llvm::Optional getDescription() const; // Return the interfaces extra class declaration code. llvm::Optional getExtraClassDeclaration() const; // Return the traits extra class declaration code. llvm::Optional getExtraTraitClassDeclaration() const; // Return the verify method body if it has one. llvm::Optional getVerify() const; // Returns the Tablegen definition this interface was constructed from. const llvm::Record &getDef() const { return *def; } private: // The TableGen definition of this interface. const llvm::Record *def; // The methods of this interface. SmallVector methods; }; // An interface that is registered to an Attribute. struct AttrInterface : public Interface { using Interface::Interface; static bool classof(const Interface *interface); }; // An interface that is registered to an Operation. struct OpInterface : public Interface { using Interface::Interface; static bool classof(const Interface *interface); }; // An interface that is registered to a Type. struct TypeInterface : public Interface { using Interface::Interface; static bool classof(const Interface *interface); }; } // end namespace tblgen } // end namespace mlir #endif // MLIR_TABLEGEN_INTERFACES_H_