/*===- 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::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 mlir::irdl
MLIR_DECLARE_EXPLICIT_TYPE_ID(::mlir::irdl::AttributeType)
MLIR_DECLARE_EXPLICIT_TYPE_ID(::mlir::irdl::RegionType)

#endif // GET_TYPEDEF_CLASSES

