/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ |* *| |* Interface Declarations *| |* *| |* Automatically generated file, do not edit! *| |* *| \*===----------------------------------------------------------------------===*/ namespace mlir { /// Allows operations to participate in integer divisibility analysis. class InferIntDivisibilityOpInterface; } // namespace mlir namespace mlir { /// Allows operations to participate in integer divisibility analysis. namespace detail { struct InferIntDivisibilityOpInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. void (*inferResultDivisibility)(const Concept *impl, ::mlir::Operation *, ::llvm::ArrayRef<::mlir::IntegerDivisibility>, ::mlir::SetIntDivisibilityFn); }; template class Model : public Concept { public: using Interface = ::mlir::InferIntDivisibilityOpInterface; Model() : Concept{inferResultDivisibility} {} static inline void inferResultDivisibility(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::llvm::ArrayRef<::mlir::IntegerDivisibility> argDivs, ::mlir::SetIntDivisibilityFn setResultDivs); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::InferIntDivisibilityOpInterface; FallbackModel() : Concept{inferResultDivisibility} {} static inline void inferResultDivisibility(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::llvm::ArrayRef<::mlir::IntegerDivisibility> argDivs, ::mlir::SetIntDivisibilityFn setResultDivs); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; }; }; template struct InferIntDivisibilityOpInterfaceTrait; } // namespace detail class InferIntDivisibilityOpInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::InferIntDivisibilityOpInterfaceTrait {}; /// Infer the divisibility of the results of this op given the /// divisibility of its arguments. For each result value, the method /// should call `setResultDivs` with that `Value` as an argument. void inferResultDivisibility(::llvm::ArrayRef<::mlir::IntegerDivisibility> argDivs, ::mlir::SetIntDivisibilityFn setResultDivs); }; } // namespace mlir namespace mlir::detail { template struct InferIntDivisibilityOpInterfaceTrait : public ::mlir::OpInterface::Trait { }; } // namespace mlir::detail namespace mlir { template void detail::InferIntDivisibilityOpInterfaceInterfaceTraits::Model::inferResultDivisibility(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::llvm::ArrayRef<::mlir::IntegerDivisibility> argDivs, ::mlir::SetIntDivisibilityFn setResultDivs) { return (llvm::cast(tablegen_opaque_val)).inferResultDivisibility(argDivs, setResultDivs); } template void detail::InferIntDivisibilityOpInterfaceInterfaceTraits::FallbackModel::inferResultDivisibility(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::llvm::ArrayRef<::mlir::IntegerDivisibility> argDivs, ::mlir::SetIntDivisibilityFn setResultDivs) { return static_cast(impl)->inferResultDivisibility(tablegen_opaque_val, argDivs, setResultDivs); } } // namespace mlir