/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|*                                                                            *|
|* TypeDef Declarations                                                       *|
|*                                                                            *|
|* Automatically generated file, do not edit!                                 *|
|*                                                                            *|
\*===----------------------------------------------------------------------===*/

#ifdef GET_TYPEDEF_CLASSES
#undef GET_TYPEDEF_CLASSES


namespace mlir {
class AsmParser;
class AsmPrinter;
} // namespace mlir
namespace mlir {
namespace irdl {
/// IRDL handle to an `mlir::Attribute`
/// This type represents a handle to an instance of an `mlir::Attribute`,
///     so it can be used in an IRDL operation, type, or attribute definition.
///     This type can also represent a handle to an instance of an `mlir::Type`,
///     by wrapping it in a `mlir::TypeAttr`. 
/// 
///     Example:
/// 
///     ```mlir
///     irdl.dialect @cmath {
/// 
///       irdl.type @complex { /* ... */ }
/// 
///       irdl.operation @norm {
///         %0 = irdl.any
///         %1 = irdl.parametric @cmath::@complex<%0>
///         irdl.operands(%1)
///         irdl.results(%0)
///       }
///     }
///     ```
/// 
///     Here, `%0` and `%1` are both of type `!irdl.attribute`. Note that in
///     particular, `%1` will be a handle to a `mlir::TypeAttr` wrapping an
///     instance of a `cmath.complex` type.
class AttributeType;
/// IRDL handle to a region definition
/// This type represents a region constraint. It is produced by
///     the `irdl.region` operation and consumed by the `irdl.regions` operation.
///     The region can be constrained on the number of arguments
///     and the number of blocks.
/// 
///     Example:
///     ```mlir
///     irdl.dialect @example {
///       irdl.operation @op_with_regions {
///         %r1 = irdl.region with size 3
///         %0 = irdl.any
///         %r2 = irdl.region(%0)
///         irdl.regions(%r1, %r2)
///       }
///     }
///     ```
/// 
///     Here we have `%r1` and `%r2`, both of which have the type `!irdl.region`.
class RegionType;
class AttributeType : public ::mlir::Type::TypeBase<AttributeType, ::mlir::Type, ::mlir::TypeStorage> {
public:
  using Base::Base;
  static constexpr ::llvm::StringLiteral name = "irdl.attribute";
  static constexpr ::llvm::StringLiteral dialectName = "irdl";
  static constexpr ::llvm::StringLiteral getMnemonic() {
    return {"attribute"};
  }

};
class RegionType : public ::mlir::Type::TypeBase<RegionType, ::mlir::Type, ::mlir::TypeStorage> {
public:
  using Base::Base;
  static constexpr ::llvm::StringLiteral name = "irdl.region";
  static constexpr ::llvm::StringLiteral dialectName = "irdl";
  static constexpr ::llvm::StringLiteral getMnemonic() {
    return {"region"};
  }

};
} // namespace irdl
} // namespace mlir
MLIR_DECLARE_EXPLICIT_TYPE_ID(::mlir::irdl::AttributeType)
MLIR_DECLARE_EXPLICIT_TYPE_ID(::mlir::irdl::RegionType)

#endif  // GET_TYPEDEF_CLASSES

