| //===-- AttrOrTypeDef.h - Wrapper for attr and type definitions -*- 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 |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // AttrOrTypeDef, AttrDef, and TypeDef wrappers to simplify using TableGen |
| // Record defining a MLIR attributes and types. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef MLIR_TABLEGEN_ATTRORTYPEDEF_H |
| #define MLIR_TABLEGEN_ATTRORTYPEDEF_H |
| |
| #include "mlir/Support/LLVM.h" |
| #include "mlir/TableGen/Builder.h" |
| #include "mlir/TableGen/Trait.h" |
| |
| namespace llvm { |
| class DagInit; |
| class Record; |
| class SMLoc; |
| } // namespace llvm |
| |
| namespace mlir { |
| namespace tblgen { |
| class Dialect; |
| class AttrOrTypeParameter; |
| |
| //===----------------------------------------------------------------------===// |
| // AttrOrTypeBuilder |
| //===----------------------------------------------------------------------===// |
| |
| /// Wrapper class that represents a Tablegen AttrOrTypeBuilder. |
| class AttrOrTypeBuilder : public Builder { |
| public: |
| using Builder::Builder; |
| |
| /// Returns true if this builder is able to infer the MLIRContext parameter. |
| bool hasInferredContextParameter() const; |
| }; |
| |
| //===----------------------------------------------------------------------===// |
| // AttrOrTypeDef |
| //===----------------------------------------------------------------------===// |
| |
| /// Wrapper class that contains a TableGen AttrOrTypeDef's record and provides |
| /// helper methods for accessing them. |
| class AttrOrTypeDef { |
| public: |
| explicit AttrOrTypeDef(const llvm::Record *def); |
| |
| // Get the dialect for which this def belongs. |
| Dialect getDialect() const; |
| |
| // Returns the name of this AttrOrTypeDef record. |
| StringRef getName() const; |
| |
| // Query functions for the documentation of the def. |
| bool hasDescription() const; |
| StringRef getDescription() const; |
| bool hasSummary() const; |
| StringRef getSummary() const; |
| |
| // Returns the name of the C++ class to generate. |
| StringRef getCppClassName() const; |
| |
| // Returns the name of the C++ base class to use when generating this def. |
| StringRef getCppBaseClassName() const; |
| |
| // Returns the name of the storage class for this def. |
| StringRef getStorageClassName() const; |
| |
| // Returns the C++ namespace for this def's storage class. |
| StringRef getStorageNamespace() const; |
| |
| // Returns true if we should generate the storage class. |
| bool genStorageClass() const; |
| |
| // Indicates whether or not to generate the storage class constructor. |
| bool hasStorageCustomConstructor() const; |
| |
| // Fill a list with this def's parameters. See AttrOrTypeDef in OpBase.td for |
| // documentation of parameter usage. |
| void getParameters(SmallVectorImpl<AttrOrTypeParameter> &) const; |
| |
| // Return the number of parameters |
| unsigned getNumParameters() const; |
| |
| // Return the keyword/mnemonic to use in the printer/parser methods if we are |
| // supposed to auto-generate them. |
| Optional<StringRef> getMnemonic() const; |
| |
| // Returns the code to use as the types printer method. If not specified, |
| // return a non-value. Otherwise, return the contents of that code block. |
| Optional<StringRef> getPrinterCode() const; |
| |
| // Returns the code to use as the parser method. If not specified, returns |
| // None. Otherwise, returns the contents of that code block. |
| Optional<StringRef> getParserCode() const; |
| |
| // Returns the custom assembly format, if one was specified. |
| Optional<StringRef> getAssemblyFormat() const; |
| |
| // Returns true if the accessors based on the parameters should be generated. |
| bool genAccessors() const; |
| |
| // Return true if we need to generate the verify declaration and getChecked |
| // method. |
| bool genVerifyDecl() const; |
| |
| // Returns the def's extra class declaration code. |
| Optional<StringRef> getExtraDecls() const; |
| |
| // Get the code location (for error printing). |
| ArrayRef<llvm::SMLoc> getLoc() const; |
| |
| // Returns true if the default get/getChecked methods should be skipped during |
| // generation. |
| bool skipDefaultBuilders() const; |
| |
| // Returns the builders of this def. |
| ArrayRef<AttrOrTypeBuilder> getBuilders() const { return builders; } |
| |
| // Returns the traits of this def. |
| ArrayRef<Trait> getTraits() const { return traits; } |
| |
| // Returns whether two AttrOrTypeDefs are equal by checking the equality of |
| // the underlying record. |
| bool operator==(const AttrOrTypeDef &other) const; |
| |
| // Compares two AttrOrTypeDefs by comparing the names of the dialects. |
| bool operator<(const AttrOrTypeDef &other) const; |
| |
| // Returns whether the AttrOrTypeDef is defined. |
| operator bool() const { return def != nullptr; } |
| |
| // Return the underlying def. |
| const llvm::Record *getDef() const { return def; } |
| |
| protected: |
| const llvm::Record *def; |
| |
| // The builders of this definition. |
| SmallVector<AttrOrTypeBuilder> builders; |
| |
| // The traits of this definition. |
| SmallVector<Trait> traits; |
| }; |
| |
| //===----------------------------------------------------------------------===// |
| // AttrDef |
| //===----------------------------------------------------------------------===// |
| |
| /// This class represents a wrapper around a tablegen AttrDef record. |
| class AttrDef : public AttrOrTypeDef { |
| public: |
| using AttrOrTypeDef::AttrOrTypeDef; |
| |
| // Returns the attributes value type builder code block, or None if it doesn't |
| // have one. |
| Optional<StringRef> getTypeBuilder() const; |
| |
| static bool classof(const AttrOrTypeDef *def); |
| }; |
| |
| //===----------------------------------------------------------------------===// |
| // TypeDef |
| //===----------------------------------------------------------------------===// |
| |
| /// This class represents a wrapper around a tablegen TypeDef record. |
| class TypeDef : public AttrOrTypeDef { |
| public: |
| using AttrOrTypeDef::AttrOrTypeDef; |
| }; |
| |
| //===----------------------------------------------------------------------===// |
| // AttrOrTypeParameter |
| //===----------------------------------------------------------------------===// |
| |
| // A wrapper class for tblgen AttrOrTypeParameter, arrays of which belong to |
| // AttrOrTypeDefs to parameterize them. |
| class AttrOrTypeParameter { |
| public: |
| explicit AttrOrTypeParameter(const llvm::DagInit *def, unsigned index) |
| : def(def), index(index) {} |
| |
| // Get the parameter name. |
| StringRef getName() const; |
| |
| // If specified, get the custom allocator code for this parameter. |
| Optional<StringRef> getAllocator() const; |
| |
| // If specified, get the custom comparator code for this parameter. |
| Optional<StringRef> getComparator() const; |
| |
| // Get the C++ type of this parameter. |
| StringRef getCppType() const; |
| |
| // Get the C++ accessor type of this parameter. |
| StringRef getCppAccessorType() const; |
| |
| // Get the C++ storage type of this parameter. |
| StringRef getCppStorageType() const; |
| |
| // Get an optional C++ parameter parser. |
| Optional<StringRef> getParser() const; |
| |
| // Get an optional C++ parameter printer. |
| Optional<StringRef> getPrinter() const; |
| |
| // Get a description of this parameter for documentation purposes. |
| Optional<StringRef> getSummary() const; |
| |
| // Get the assembly syntax documentation. |
| StringRef getSyntax() const; |
| |
| // Return the underlying def of this parameter. |
| const llvm::Init *getDef() const; |
| |
| private: |
| /// The underlying tablegen parameter list this parameter is a part of. |
| const llvm::DagInit *def; |
| /// The index of the parameter within the parameter list (`def`). |
| unsigned index; |
| }; |
| |
| //===----------------------------------------------------------------------===// |
| // AttributeSelfTypeParameter |
| //===----------------------------------------------------------------------===// |
| |
| // A wrapper class for the AttributeSelfTypeParameter tblgen class. This |
| // represents a parameter of mlir::Type that is the value type of an AttrDef. |
| class AttributeSelfTypeParameter : public AttrOrTypeParameter { |
| public: |
| static bool classof(const AttrOrTypeParameter *param); |
| }; |
| |
| } // end namespace tblgen |
| } // end namespace mlir |
| |
| #endif // MLIR_TABLEGEN_ATTRORTYPEDEF_H |