Files
gps/tools/local/circt/include/mlir/Dialect/LLVMIR/NVVMRequiresSMTraits.h.inc
T
2026-07-12 11:01:51 +03:00

78 lines
3.2 KiB
C++

/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|* *|
|* Interface Declarations *|
|* *|
|* Automatically generated file, do not edit! *|
|* *|
\*===----------------------------------------------------------------------===*/
namespace mlir::NVVM {
class RequiresSMInterface;
} // namespace mlir::NVVM
namespace mlir::NVVM {
namespace detail {
struct RequiresSMInterfaceInterfaceTraits {
struct Concept {
/// The methods defined by the interface.
mlir::NVVM::NVVMCheckSMVersion (*getRequiredMinSMVersion)(const Concept *impl, ::mlir::Operation *);
};
template<typename ConcreteOp>
class Model : public Concept {
public:
using Interface = ::mlir::NVVM::RequiresSMInterface;
Model() : Concept{getRequiredMinSMVersion} {}
static inline mlir::NVVM::NVVMCheckSMVersion getRequiredMinSMVersion(const Concept *impl, ::mlir::Operation *tablegen_opaque_val);
};
template<typename ConcreteOp>
class FallbackModel : public Concept {
public:
using Interface = ::mlir::NVVM::RequiresSMInterface;
FallbackModel() : Concept{getRequiredMinSMVersion} {}
static inline mlir::NVVM::NVVMCheckSMVersion getRequiredMinSMVersion(const Concept *impl, ::mlir::Operation *tablegen_opaque_val);
};
template<typename ConcreteModel, typename ConcreteOp>
class ExternalModel : public FallbackModel<ConcreteModel> {
public:
using ConcreteEntity = ConcreteOp;
};
};
template <typename ConcreteOp>
struct RequiresSMInterfaceTrait;
} // namespace detail
class RequiresSMInterface : public ::mlir::OpInterface<RequiresSMInterface, detail::RequiresSMInterfaceInterfaceTraits> {
public:
using ::mlir::OpInterface<RequiresSMInterface, detail::RequiresSMInterfaceInterfaceTraits>::OpInterface;
template <typename ConcreteOp>
struct Trait : public detail::RequiresSMInterfaceTrait<ConcreteOp> {};
/// Get the SM version required by the op from the trait
mlir::NVVM::NVVMCheckSMVersion getRequiredMinSMVersion();
};
} // namespace mlir::NVVM
namespace mlir::NVVM::detail {
template <typename ConcreteOp>
struct RequiresSMInterfaceTrait : public ::mlir::OpInterface<RequiresSMInterface, detail::RequiresSMInterfaceInterfaceTraits>::Trait<ConcreteOp> {
};
} // namespace mlir::NVVM::detail
namespace mlir::NVVM {
template<typename ConcreteOp>
mlir::NVVM::NVVMCheckSMVersion detail::RequiresSMInterfaceInterfaceTraits::Model<ConcreteOp>::getRequiredMinSMVersion(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) {
return (llvm::cast<ConcreteOp>(tablegen_opaque_val)).getRequiredMinSMVersion();
}
template<typename ConcreteOp>
mlir::NVVM::NVVMCheckSMVersion detail::RequiresSMInterfaceInterfaceTraits::FallbackModel<ConcreteOp>::getRequiredMinSMVersion(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) {
return static_cast<const ConcreteOp *>(impl)->getRequiredMinSMVersion(tablegen_opaque_val);
}
} // namespace mlir::NVVM