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

#ifdef GET_ATTRDEF_CLASSES
#undef GET_ATTRDEF_CLASSES


namespace mlir {
class AsmParser;
class AsmPrinter;
} // namespace mlir
namespace cuf {
/// CUDA Fortran variable attributes
class DataAttributeAttr;
/// CUDA Fortran procedure attributes
class ProcAttributeAttr;
class LaunchBoundsAttr;
class ClusterDimsAttr;
/// CUDA Fortran data transfer kind
class DataTransferKindAttr;
namespace detail {
struct DataAttributeAttrStorage;
} // namespace detail
class DataAttributeAttr : public ::mlir::Attribute::AttrBase<DataAttributeAttr, ::mlir::Attribute, detail::DataAttributeAttrStorage> {
public:
  using Base::Base;
  static constexpr ::llvm::StringLiteral name = "cuf.cuda";
  static constexpr ::llvm::StringLiteral dialectName = "cuf";
  static DataAttributeAttr get(::mlir::MLIRContext *context, ::cuf::DataAttribute value);
  static constexpr ::llvm::StringLiteral getMnemonic() {
    return {"cuda"};
  }

  static ::mlir::Attribute parse(::mlir::AsmParser &odsParser, ::mlir::Type odsType);
  void print(::mlir::AsmPrinter &odsPrinter) const;
  ::cuf::DataAttribute getValue() const;
};
namespace detail {
struct ProcAttributeAttrStorage;
} // namespace detail
class ProcAttributeAttr : public ::mlir::Attribute::AttrBase<ProcAttributeAttr, ::mlir::Attribute, detail::ProcAttributeAttrStorage> {
public:
  using Base::Base;
  static constexpr ::llvm::StringLiteral name = "cuf.cuda_proc";
  static constexpr ::llvm::StringLiteral dialectName = "cuf";
  static ProcAttributeAttr get(::mlir::MLIRContext *context, ::cuf::ProcAttribute value);
  static constexpr ::llvm::StringLiteral getMnemonic() {
    return {"cuda_proc"};
  }

  static ::mlir::Attribute parse(::mlir::AsmParser &odsParser, ::mlir::Type odsType);
  void print(::mlir::AsmPrinter &odsPrinter) const;
  ::cuf::ProcAttribute getValue() const;
};
namespace detail {
struct LaunchBoundsAttrStorage;
} // namespace detail
class LaunchBoundsAttr : public ::mlir::Attribute::AttrBase<LaunchBoundsAttr, ::mlir::Attribute, detail::LaunchBoundsAttrStorage> {
public:
  using Base::Base;
  static constexpr ::llvm::StringLiteral name = "cuf.launch_bounds";
  static constexpr ::llvm::StringLiteral dialectName = "cuf";
  static LaunchBoundsAttr get(::mlir::MLIRContext *context, mlir::IntegerAttr maxTPB, mlir::IntegerAttr minBPM, mlir::IntegerAttr upperBoundClusterSize);
  static constexpr ::llvm::StringLiteral getMnemonic() {
    return {"launch_bounds"};
  }

  static ::mlir::Attribute parse(::mlir::AsmParser &odsParser, ::mlir::Type odsType);
  void print(::mlir::AsmPrinter &odsPrinter) const;
  mlir::IntegerAttr getMaxTPB() const;
  mlir::IntegerAttr getMinBPM() const;
  mlir::IntegerAttr getUpperBoundClusterSize() const;
};
namespace detail {
struct ClusterDimsAttrStorage;
} // namespace detail
class ClusterDimsAttr : public ::mlir::Attribute::AttrBase<ClusterDimsAttr, ::mlir::Attribute, detail::ClusterDimsAttrStorage> {
public:
  using Base::Base;
  static constexpr ::llvm::StringLiteral name = "cuf.cluster_dims";
  static constexpr ::llvm::StringLiteral dialectName = "cuf";
  static ClusterDimsAttr get(::mlir::MLIRContext *context, mlir::IntegerAttr x, mlir::IntegerAttr y, mlir::IntegerAttr z);
  static constexpr ::llvm::StringLiteral getMnemonic() {
    return {"cluster_dims"};
  }

  static ::mlir::Attribute parse(::mlir::AsmParser &odsParser, ::mlir::Type odsType);
  void print(::mlir::AsmPrinter &odsPrinter) const;
  mlir::IntegerAttr getX() const;
  mlir::IntegerAttr getY() const;
  mlir::IntegerAttr getZ() const;
};
namespace detail {
struct DataTransferKindAttrStorage;
} // namespace detail
class DataTransferKindAttr : public ::mlir::Attribute::AttrBase<DataTransferKindAttr, ::mlir::Attribute, detail::DataTransferKindAttrStorage> {
public:
  using Base::Base;
  static constexpr ::llvm::StringLiteral name = "cuf.cuda_transfer";
  static constexpr ::llvm::StringLiteral dialectName = "cuf";
  static DataTransferKindAttr get(::mlir::MLIRContext *context, ::cuf::DataTransferKind value);
  static constexpr ::llvm::StringLiteral getMnemonic() {
    return {"cuda_transfer"};
  }

  static ::mlir::Attribute parse(::mlir::AsmParser &odsParser, ::mlir::Type odsType);
  void print(::mlir::AsmPrinter &odsPrinter) const;
  ::cuf::DataTransferKind getValue() const;
};
} // namespace cuf
MLIR_DECLARE_EXPLICIT_TYPE_ID(::cuf::DataAttributeAttr)
MLIR_DECLARE_EXPLICIT_TYPE_ID(::cuf::ProcAttributeAttr)
MLIR_DECLARE_EXPLICIT_TYPE_ID(::cuf::LaunchBoundsAttr)
MLIR_DECLARE_EXPLICIT_TYPE_ID(::cuf::ClusterDimsAttr)
MLIR_DECLARE_EXPLICIT_TYPE_ID(::cuf::DataTransferKindAttr)

#endif  // GET_ATTRDEF_CLASSES

