/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ |* *| |* Interface Declarations *| |* *| |* Automatically generated file, do not edit! *| |* *| \*===----------------------------------------------------------------------===*/ namespace mlir { /// An operation that has argument and result attributes. This interface /// provides functions to access and modify the argument and result /// attributes of the operation. class ArgAndResultAttrsOpInterface; } // namespace mlir namespace mlir { /// A call-like operation is one that transfers control from one sub-routine to /// another. These operations may be traditional direct calls `call @foo`, or /// indirect calls to other operations `call_indirect %foo`. An operation that /// uses this interface, must *not* also provide the `CallableOpInterface`. class CallOpInterface; } // namespace mlir namespace mlir { /// A callable operation is one who represents a potential sub-routine, and may /// be a target for a call-like operation (those providing the CallOpInterface /// above). These operations may be traditional functional operation /// `func @foo(...)`, as well as function producing operations /// `%foo = dialect.create_function(...)`. These operations may only contain a /// single region, or subroutine. class CallableOpInterface; } // namespace mlir namespace mlir { /// An operation that has argument and result attributes. This interface /// provides functions to access and modify the argument and result /// attributes of the operation. namespace detail { struct ArgAndResultAttrsOpInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. ::mlir::ArrayAttr (*getArgAttrsAttr)(const Concept *impl, ::mlir::Operation *); ::mlir::ArrayAttr (*getResAttrsAttr)(const Concept *impl, ::mlir::Operation *); void (*setArgAttrsAttr)(const Concept *impl, ::mlir::Operation *, ::mlir::ArrayAttr); void (*setResAttrsAttr)(const Concept *impl, ::mlir::Operation *, ::mlir::ArrayAttr); ::mlir::Attribute (*removeArgAttrsAttr)(const Concept *impl, ::mlir::Operation *); ::mlir::Attribute (*removeResAttrsAttr)(const Concept *impl, ::mlir::Operation *); }; template class Model : public Concept { public: using Interface = ::mlir::ArgAndResultAttrsOpInterface; Model() : Concept{getArgAttrsAttr, getResAttrsAttr, setArgAttrsAttr, setResAttrsAttr, removeArgAttrsAttr, removeResAttrsAttr} {} static inline ::mlir::ArrayAttr getArgAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::mlir::ArrayAttr getResAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setArgAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayAttr attrs); static inline void setResAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayAttr attrs); static inline ::mlir::Attribute removeArgAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::mlir::Attribute removeResAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::ArgAndResultAttrsOpInterface; FallbackModel() : Concept{getArgAttrsAttr, getResAttrsAttr, setArgAttrsAttr, setResAttrsAttr, removeArgAttrsAttr, removeResAttrsAttr} {} static inline ::mlir::ArrayAttr getArgAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::mlir::ArrayAttr getResAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setArgAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayAttr attrs); static inline void setResAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayAttr attrs); static inline ::mlir::Attribute removeArgAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::mlir::Attribute removeResAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; }; }; template struct ArgAndResultAttrsOpInterfaceTrait; } // namespace detail class ArgAndResultAttrsOpInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::ArgAndResultAttrsOpInterfaceTrait {}; /// Get the array of argument attribute dictionaries. The method should /// return an array attribute containing only dictionary attributes equal in /// number to the number of arguments. Alternatively, the method can /// return null to indicate that there are no argument attributes. ::mlir::ArrayAttr getArgAttrsAttr(); /// Get the array of result attribute dictionaries. The method should return /// an array attribute containing only dictionary attributes equal in number /// to the number of results. Alternatively, the method can return /// null to indicate that there are no result attributes. ::mlir::ArrayAttr getResAttrsAttr(); /// Set the array of argument attribute dictionaries. void setArgAttrsAttr(::mlir::ArrayAttr attrs); /// Set the array of result attribute dictionaries. void setResAttrsAttr(::mlir::ArrayAttr attrs); /// Remove the array of argument attribute dictionaries. This is the same as /// setting all argument attributes to an empty dictionary. The method should /// return the removed attribute. ::mlir::Attribute removeArgAttrsAttr(); /// Remove the array of result attribute dictionaries. This is the same as /// setting all result attributes to an empty dictionary. The method should /// return the removed attribute. ::mlir::Attribute removeResAttrsAttr(); }; } // namespace mlir namespace mlir { /// A call-like operation is one that transfers control from one sub-routine to /// another. These operations may be traditional direct calls `call @foo`, or /// indirect calls to other operations `call_indirect %foo`. An operation that /// uses this interface, must *not* also provide the `CallableOpInterface`. namespace detail { struct CallOpInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. ::mlir::CallInterfaceCallable (*getCallableForCallee)(const Concept *impl, ::mlir::Operation *); void (*setCalleeFromCallable)(const Concept *impl, ::mlir::Operation *, ::mlir::CallInterfaceCallable); ::mlir::Operation::operand_range (*getArgOperands)(const Concept *impl, ::mlir::Operation *); ::mlir::MutableOperandRange (*getArgOperandsMutable)(const Concept *impl, ::mlir::Operation *); ::mlir::Operation *(*resolveCallableInTable)(const Concept *impl, ::mlir::Operation *, ::mlir::SymbolTableCollection *); ::mlir::Operation *(*resolveCallable)(const Concept *impl, ::mlir::Operation *); /// The base classes of this interface. const ::mlir::ArgAndResultAttrsOpInterface::Concept *implArgAndResultAttrsOpInterface = nullptr; void initializeInterfaceConcept(::mlir::detail::InterfaceMap &interfaceMap) { implArgAndResultAttrsOpInterface = interfaceMap.lookup<::mlir::ArgAndResultAttrsOpInterface>(); assert(implArgAndResultAttrsOpInterface && "`::mlir::CallOpInterface` expected its base interface `::mlir::ArgAndResultAttrsOpInterface` to be registered"); } }; template class Model : public Concept { public: using Interface = ::mlir::CallOpInterface; Model() : Concept{getCallableForCallee, setCalleeFromCallable, getArgOperands, getArgOperandsMutable, resolveCallableInTable, resolveCallable} {} static inline ::mlir::CallInterfaceCallable getCallableForCallee(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setCalleeFromCallable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::CallInterfaceCallable callee); static inline ::mlir::Operation::operand_range getArgOperands(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::mlir::MutableOperandRange getArgOperandsMutable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::mlir::Operation *resolveCallableInTable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::SymbolTableCollection * symbolTable); static inline ::mlir::Operation *resolveCallable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::CallOpInterface; FallbackModel() : Concept{getCallableForCallee, setCalleeFromCallable, getArgOperands, getArgOperandsMutable, resolveCallableInTable, resolveCallable} {} static inline ::mlir::CallInterfaceCallable getCallableForCallee(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setCalleeFromCallable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::CallInterfaceCallable callee); static inline ::mlir::Operation::operand_range getArgOperands(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::mlir::MutableOperandRange getArgOperandsMutable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::mlir::Operation *resolveCallableInTable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::SymbolTableCollection * symbolTable); static inline ::mlir::Operation *resolveCallable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; ::mlir::Operation *resolveCallableInTable(::mlir::Operation *tablegen_opaque_val, ::mlir::SymbolTableCollection *symbolTable) const; ::mlir::Operation *resolveCallable(::mlir::Operation *tablegen_opaque_val) const; }; }; template struct CallOpInterfaceTrait; } // namespace detail class CallOpInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::CallOpInterfaceTrait {}; /// Returns the callee of this call-like operation. A `callee` is either a /// reference to a symbol, via SymbolRefAttr, or a reference to a defined /// SSA value. If the reference is an SSA value, the SSA value corresponds /// to a region of a lambda-like operation. ::mlir::CallInterfaceCallable getCallableForCallee(); /// Sets the callee of this call-like operation. A `callee` is either a /// reference to a symbol, via SymbolRefAttr, or a reference to a defined /// SSA value. The type of the `callee` is expected to be the same as the /// return type of `getCallableForCallee`, e.g., `callee` should be /// SymbolRefAttr for `func.call`. void setCalleeFromCallable(::mlir::CallInterfaceCallable callee); /// Returns the operands within this call that are used as arguments to the /// callee. ::mlir::Operation::operand_range getArgOperands(); /// Returns the operands within this call that are used as arguments to the /// callee as a mutable range. ::mlir::MutableOperandRange getArgOperandsMutable(); /// Resolve the callable operation for given callee to a /// CallableOpInterface, or nullptr if a valid callable was not resolved. /// `symbolTable` parameter allow for using a cached symbol table for symbol /// lookups instead of performing an O(N) scan. ::mlir::Operation *resolveCallableInTable(::mlir::SymbolTableCollection * symbolTable); /// Resolve the callable operation for given callee to a /// CallableOpInterface, or nullptr if a valid callable was not resolved. ::mlir::Operation *resolveCallable(); //===----------------------------------------------------------------===// // Inherited from ::mlir::ArgAndResultAttrsOpInterface //===----------------------------------------------------------------===// operator ::mlir::ArgAndResultAttrsOpInterface () const { if (!*this) return nullptr; return ::mlir::ArgAndResultAttrsOpInterface(*this, getImpl()->implArgAndResultAttrsOpInterface); } /// Get the array of argument attribute dictionaries. The method should /// return an array attribute containing only dictionary attributes equal in /// number to the number of arguments. Alternatively, the method can /// return null to indicate that there are no argument attributes. ::mlir::ArrayAttr getArgAttrsAttr(); /// Get the array of result attribute dictionaries. The method should return /// an array attribute containing only dictionary attributes equal in number /// to the number of results. Alternatively, the method can return /// null to indicate that there are no result attributes. ::mlir::ArrayAttr getResAttrsAttr(); /// Set the array of argument attribute dictionaries. void setArgAttrsAttr(::mlir::ArrayAttr attrs); /// Set the array of result attribute dictionaries. void setResAttrsAttr(::mlir::ArrayAttr attrs); /// Remove the array of argument attribute dictionaries. This is the same as /// setting all argument attributes to an empty dictionary. The method should /// return the removed attribute. ::mlir::Attribute removeArgAttrsAttr(); /// Remove the array of result attribute dictionaries. This is the same as /// setting all result attributes to an empty dictionary. The method should /// return the removed attribute. ::mlir::Attribute removeResAttrsAttr(); }; } // namespace mlir namespace mlir { /// A callable operation is one who represents a potential sub-routine, and may /// be a target for a call-like operation (those providing the CallOpInterface /// above). These operations may be traditional functional operation /// `func @foo(...)`, as well as function producing operations /// `%foo = dialect.create_function(...)`. These operations may only contain a /// single region, or subroutine. namespace detail { struct CallableOpInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. ::mlir::Region *(*getCallableRegion)(const Concept *impl, ::mlir::Operation *); ::llvm::ArrayRef<::mlir::Type> (*getArgumentTypes)(const Concept *impl, ::mlir::Operation *); ::llvm::ArrayRef<::mlir::Type> (*getResultTypes)(const Concept *impl, ::mlir::Operation *); /// The base classes of this interface. const ::mlir::ArgAndResultAttrsOpInterface::Concept *implArgAndResultAttrsOpInterface = nullptr; void initializeInterfaceConcept(::mlir::detail::InterfaceMap &interfaceMap) { implArgAndResultAttrsOpInterface = interfaceMap.lookup<::mlir::ArgAndResultAttrsOpInterface>(); assert(implArgAndResultAttrsOpInterface && "`::mlir::CallableOpInterface` expected its base interface `::mlir::ArgAndResultAttrsOpInterface` to be registered"); } }; template class Model : public Concept { public: using Interface = ::mlir::CallableOpInterface; Model() : Concept{getCallableRegion, getArgumentTypes, getResultTypes} {} static inline ::mlir::Region *getCallableRegion(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::llvm::ArrayRef<::mlir::Type> getArgumentTypes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::llvm::ArrayRef<::mlir::Type> getResultTypes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::CallableOpInterface; FallbackModel() : Concept{getCallableRegion, getArgumentTypes, getResultTypes} {} static inline ::mlir::Region *getCallableRegion(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::llvm::ArrayRef<::mlir::Type> getArgumentTypes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::llvm::ArrayRef<::mlir::Type> getResultTypes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; }; }; template struct CallableOpInterfaceTrait; } // namespace detail class CallableOpInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::CallableOpInterfaceTrait {}; /// Returns the region on the current operation that is callable. This may /// return null in the case of an external callable object, e.g. an external /// function. ::mlir::Region *getCallableRegion(); /// Returns the callable's argument types based exclusively on the type (to /// allow for this method may be called on function declarations). ::llvm::ArrayRef<::mlir::Type> getArgumentTypes(); /// Returns the callable's result types based exclusively on the type (to /// allow for this method may be called on function declarations). ::llvm::ArrayRef<::mlir::Type> getResultTypes(); //===----------------------------------------------------------------===// // Inherited from ::mlir::ArgAndResultAttrsOpInterface //===----------------------------------------------------------------===// operator ::mlir::ArgAndResultAttrsOpInterface () const { if (!*this) return nullptr; return ::mlir::ArgAndResultAttrsOpInterface(*this, getImpl()->implArgAndResultAttrsOpInterface); } /// Get the array of argument attribute dictionaries. The method should /// return an array attribute containing only dictionary attributes equal in /// number to the number of arguments. Alternatively, the method can /// return null to indicate that there are no argument attributes. ::mlir::ArrayAttr getArgAttrsAttr(); /// Get the array of result attribute dictionaries. The method should return /// an array attribute containing only dictionary attributes equal in number /// to the number of results. Alternatively, the method can return /// null to indicate that there are no result attributes. ::mlir::ArrayAttr getResAttrsAttr(); /// Set the array of argument attribute dictionaries. void setArgAttrsAttr(::mlir::ArrayAttr attrs); /// Set the array of result attribute dictionaries. void setResAttrsAttr(::mlir::ArrayAttr attrs); /// Remove the array of argument attribute dictionaries. This is the same as /// setting all argument attributes to an empty dictionary. The method should /// return the removed attribute. ::mlir::Attribute removeArgAttrsAttr(); /// Remove the array of result attribute dictionaries. This is the same as /// setting all result attributes to an empty dictionary. The method should /// return the removed attribute. ::mlir::Attribute removeResAttrsAttr(); }; } // namespace mlir namespace mlir::detail { template struct ArgAndResultAttrsOpInterfaceTrait : public ::mlir::OpInterface::Trait { }; } // namespace mlir::detail namespace mlir::detail { template struct CallOpInterfaceTrait : public ::mlir::OpInterface::Trait { /// Resolve the callable operation for given callee to a /// CallableOpInterface, or nullptr if a valid callable was not resolved. /// `symbolTable` parameter allow for using a cached symbol table for symbol /// lookups instead of performing an O(N) scan. ::mlir::Operation *resolveCallableInTable(::mlir::SymbolTableCollection * symbolTable) { return ::mlir::call_interface_impl::resolveCallable((*static_cast(this)), symbolTable); } /// Resolve the callable operation for given callee to a /// CallableOpInterface, or nullptr if a valid callable was not resolved. ::mlir::Operation *resolveCallable() { return ::mlir::call_interface_impl::resolveCallable((*static_cast(this))); } }; } // namespace mlir::detail namespace mlir::detail { template struct CallableOpInterfaceTrait : public ::mlir::OpInterface::Trait { }; } // namespace mlir::detail namespace mlir { template ::mlir::ArrayAttr detail::ArgAndResultAttrsOpInterfaceInterfaceTraits::Model::getArgAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getArgAttrsAttr(); } template ::mlir::ArrayAttr detail::ArgAndResultAttrsOpInterfaceInterfaceTraits::Model::getResAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getResAttrsAttr(); } template void detail::ArgAndResultAttrsOpInterfaceInterfaceTraits::Model::setArgAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayAttr attrs) { return (llvm::cast(tablegen_opaque_val)).setArgAttrsAttr(attrs); } template void detail::ArgAndResultAttrsOpInterfaceInterfaceTraits::Model::setResAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayAttr attrs) { return (llvm::cast(tablegen_opaque_val)).setResAttrsAttr(attrs); } template ::mlir::Attribute detail::ArgAndResultAttrsOpInterfaceInterfaceTraits::Model::removeArgAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).removeArgAttrsAttr(); } template ::mlir::Attribute detail::ArgAndResultAttrsOpInterfaceInterfaceTraits::Model::removeResAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).removeResAttrsAttr(); } template ::mlir::ArrayAttr detail::ArgAndResultAttrsOpInterfaceInterfaceTraits::FallbackModel::getArgAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getArgAttrsAttr(tablegen_opaque_val); } template ::mlir::ArrayAttr detail::ArgAndResultAttrsOpInterfaceInterfaceTraits::FallbackModel::getResAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getResAttrsAttr(tablegen_opaque_val); } template void detail::ArgAndResultAttrsOpInterfaceInterfaceTraits::FallbackModel::setArgAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayAttr attrs) { return static_cast(impl)->setArgAttrsAttr(tablegen_opaque_val, attrs); } template void detail::ArgAndResultAttrsOpInterfaceInterfaceTraits::FallbackModel::setResAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayAttr attrs) { return static_cast(impl)->setResAttrsAttr(tablegen_opaque_val, attrs); } template ::mlir::Attribute detail::ArgAndResultAttrsOpInterfaceInterfaceTraits::FallbackModel::removeArgAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->removeArgAttrsAttr(tablegen_opaque_val); } template ::mlir::Attribute detail::ArgAndResultAttrsOpInterfaceInterfaceTraits::FallbackModel::removeResAttrsAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->removeResAttrsAttr(tablegen_opaque_val); } } // namespace mlir namespace mlir { template ::mlir::CallInterfaceCallable detail::CallOpInterfaceInterfaceTraits::Model::getCallableForCallee(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getCallableForCallee(); } template void detail::CallOpInterfaceInterfaceTraits::Model::setCalleeFromCallable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::CallInterfaceCallable callee) { return (llvm::cast(tablegen_opaque_val)).setCalleeFromCallable(callee); } template ::mlir::Operation::operand_range detail::CallOpInterfaceInterfaceTraits::Model::getArgOperands(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getArgOperands(); } template ::mlir::MutableOperandRange detail::CallOpInterfaceInterfaceTraits::Model::getArgOperandsMutable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getArgOperandsMutable(); } template ::mlir::Operation *detail::CallOpInterfaceInterfaceTraits::Model::resolveCallableInTable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::SymbolTableCollection * symbolTable) { return (llvm::cast(tablegen_opaque_val)).resolveCallableInTable(symbolTable); } template ::mlir::Operation *detail::CallOpInterfaceInterfaceTraits::Model::resolveCallable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).resolveCallable(); } template ::mlir::CallInterfaceCallable detail::CallOpInterfaceInterfaceTraits::FallbackModel::getCallableForCallee(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getCallableForCallee(tablegen_opaque_val); } template void detail::CallOpInterfaceInterfaceTraits::FallbackModel::setCalleeFromCallable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::CallInterfaceCallable callee) { return static_cast(impl)->setCalleeFromCallable(tablegen_opaque_val, callee); } template ::mlir::Operation::operand_range detail::CallOpInterfaceInterfaceTraits::FallbackModel::getArgOperands(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getArgOperands(tablegen_opaque_val); } template ::mlir::MutableOperandRange detail::CallOpInterfaceInterfaceTraits::FallbackModel::getArgOperandsMutable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getArgOperandsMutable(tablegen_opaque_val); } template ::mlir::Operation *detail::CallOpInterfaceInterfaceTraits::FallbackModel::resolveCallableInTable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::SymbolTableCollection * symbolTable) { return static_cast(impl)->resolveCallableInTable(tablegen_opaque_val, symbolTable); } template ::mlir::Operation *detail::CallOpInterfaceInterfaceTraits::FallbackModel::resolveCallable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->resolveCallable(tablegen_opaque_val); } template ::mlir::Operation *detail::CallOpInterfaceInterfaceTraits::ExternalModel::resolveCallableInTable(::mlir::Operation *tablegen_opaque_val, ::mlir::SymbolTableCollection *symbolTable) const { return ::mlir::call_interface_impl::resolveCallable((llvm::cast(tablegen_opaque_val)), symbolTable); } template ::mlir::Operation *detail::CallOpInterfaceInterfaceTraits::ExternalModel::resolveCallable(::mlir::Operation *tablegen_opaque_val) const { return ::mlir::call_interface_impl::resolveCallable((llvm::cast(tablegen_opaque_val))); } } // namespace mlir namespace mlir { template ::mlir::Region *detail::CallableOpInterfaceInterfaceTraits::Model::getCallableRegion(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getCallableRegion(); } template ::llvm::ArrayRef<::mlir::Type> detail::CallableOpInterfaceInterfaceTraits::Model::getArgumentTypes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getArgumentTypes(); } template ::llvm::ArrayRef<::mlir::Type> detail::CallableOpInterfaceInterfaceTraits::Model::getResultTypes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getResultTypes(); } template ::mlir::Region *detail::CallableOpInterfaceInterfaceTraits::FallbackModel::getCallableRegion(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getCallableRegion(tablegen_opaque_val); } template ::llvm::ArrayRef<::mlir::Type> detail::CallableOpInterfaceInterfaceTraits::FallbackModel::getArgumentTypes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getArgumentTypes(tablegen_opaque_val); } template ::llvm::ArrayRef<::mlir::Type> detail::CallableOpInterfaceInterfaceTraits::FallbackModel::getResultTypes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getResultTypes(tablegen_opaque_val); } } // namespace mlir