| //===- Type.h - Type 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 |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // Type wrapper to simplify using TableGen Record defining a MLIR Type. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef MLIR_TABLEGEN_TYPE_H_ |
| #define MLIR_TABLEGEN_TYPE_H_ |
| |
| #include "mlir/Support/LLVM.h" |
| #include "mlir/TableGen/Constraint.h" |
| #include "mlir/TableGen/Dialect.h" |
| |
| namespace llvm { |
| class DefInit; |
| class Record; |
| } // end namespace llvm |
| |
| namespace mlir { |
| namespace tblgen { |
| |
| // Wrapper class with helper methods for accessing Type constraints defined in |
| // TableGen. |
| class TypeConstraint : public Constraint { |
| public: |
| using Constraint::Constraint; |
| |
| TypeConstraint(const llvm::DefInit *record); |
| |
| static bool classof(const Constraint *c) { return c->getKind() == CK_Type; } |
| |
| // Returns true if this is an optional type constraint. |
| bool isOptional() const; |
| |
| // Returns true if this is a variadic type constraint. |
| bool isVariadic() const; |
| |
| // Returns true if this is a nested variadic type constraint. |
| bool isVariadicOfVariadic() const; |
| |
| // Return the segment size attribute used if this is a variadic of variadic |
| // constraint. Asserts isVariadicOfVariadic() is true. |
| StringRef getVariadicOfVariadicSegmentSizeAttr() const; |
| |
| // Returns true if this is a variable length type constraint. This is either |
| // variadic or optional. |
| bool isVariableLength() const { return isOptional() || isVariadic(); } |
| |
| // Returns the builder call for this constraint if this is a buildable type, |
| // returns None otherwise. |
| Optional<StringRef> getBuilderCall() const; |
| |
| // Return the C++ class name for this type (which may just be ::mlir::Type). |
| std::string getCPPClassName() const; |
| }; |
| |
| // Wrapper class with helper methods for accessing Types defined in TableGen. |
| class Type : public TypeConstraint { |
| public: |
| explicit Type(const llvm::Record *record); |
| |
| // Returns the description of the type. |
| StringRef getDescription() const; |
| |
| // Returns the dialect for the type if defined. |
| Dialect getDialect() const; |
| }; |
| |
| } // end namespace tblgen |
| } // end namespace mlir |
| |
| #endif // MLIR_TABLEGEN_TYPE_H_ |