/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ |* *| |* Interface Declarations *| |* *| |* Automatically generated file, do not edit! *| |* *| \*===----------------------------------------------------------------------===*/ namespace mlir::LLVM { /// Access to op fastmath flags. class FastmathFlagsInterface; } // namespace mlir::LLVM namespace mlir::LLVM { /// This interface defines an LLVM operation with integer overflow flags and /// provides a uniform API for accessing them. class IntegerOverflowFlagsInterface; } // namespace mlir::LLVM namespace mlir::LLVM { /// This interface defines an LLVM operation with an exact flag and /// provides a uniform API for accessing it. class ExactFlagInterface; } // namespace mlir::LLVM namespace mlir::LLVM { /// This interface defines an LLVM operation with a disjoint flag and /// provides a uniform API for accessing it. class DisjointFlagInterface; } // namespace mlir::LLVM namespace mlir::LLVM { /// This interface defines an LLVM operation with an nneg flag and /// provides a uniform API for accessing it. class NonNegFlagInterface; } // namespace mlir::LLVM namespace mlir::LLVM { /// An interface for memory operations that can carry access groups metadata. /// It provides setters and getters for the operation's access groups attribute. /// The default implementations of the interface methods expect the operation /// to have an attribute of type ArrayAttr named access_groups. class AccessGroupOpInterface; } // namespace mlir::LLVM namespace mlir::LLVM { /// An interface for memory operations that can carry alias analysis metadata. /// It provides setters and getters for the operation's alias analysis /// attributes. The default implementations of the interface methods expect /// the operation to have attributes of type ArrayAttr named alias_scopes, /// noalias_scopes, and tbaa. class AliasAnalysisOpInterface; } // namespace mlir::LLVM namespace mlir::LLVM { /// An interface for memory operations that can carry dereferenceable metadata. /// It provides setters and getters for the operation's dereferenceable /// attributes. The default implementations of the interface methods expect /// the operation to have an attribute of type DereferenceableAttr. class DereferenceableOpInterface; } // namespace mlir::LLVM namespace mlir::LLVM { /// An interface for operations receiving an exception behavior attribute /// controlling FP exception behavior. class FPExceptionBehaviorOpInterface; } // namespace mlir::LLVM namespace mlir::LLVM { /// An interface for operations receiving a rounding mode attribute /// controlling FP rounding mode. class RoundingModeOpInterface; } // namespace mlir::LLVM namespace mlir::LLVM { /// An interface for operations modelling LLVM intrinsics suitable for /// 1-to-1 conversion. /// /// An op implementing this interface can be directly replaced by a call /// to a matching intrinsic function. /// The op must ensure that the combinations of its arguments and results /// have valid intrinsic counterparts. /// /// For example, an operation supporting different inputs: /// ```mlir /// %res_v8 = intr.op %value_v8 : vector<8xf32> /// %res_v16 = intr.op %value_v16 : vector<16xf32> /// ``` /// can be converted to the following intrinsic calls: /// ```mlir /// %res_v8 = llvm.call_intrinsic "llvm.x86.op.intr.256"(%value_v8) /// %res_v16 = llvm.call_intrinsic "llvm.x86.op.intr.512"(%value_v16) /// ``` class OneToOneIntrinsicOpInterface; } // namespace mlir::LLVM namespace mlir::LLVM { /// Access to op fastmath flags. namespace detail { struct FastmathFlagsInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. ::mlir::LLVM::FastmathFlagsAttr (*getFastmathAttr)(const Concept *impl, ::mlir::Operation *); ::llvm::StringRef (*getFastmathAttrName)(); }; template class Model : public Concept { public: using Interface = ::mlir::LLVM::FastmathFlagsInterface; Model() : Concept{getFastmathAttr, getFastmathAttrName} {} static inline ::mlir::LLVM::FastmathFlagsAttr getFastmathAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::llvm::StringRef getFastmathAttrName(); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::LLVM::FastmathFlagsInterface; FallbackModel() : Concept{getFastmathAttr, getFastmathAttrName} {} static inline ::mlir::LLVM::FastmathFlagsAttr getFastmathAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::llvm::StringRef getFastmathAttrName(); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; ::mlir::LLVM::FastmathFlagsAttr getFastmathAttr(::mlir::Operation *tablegen_opaque_val) const; static ::llvm::StringRef getFastmathAttrName(); }; }; template struct FastmathFlagsInterfaceTrait; } // namespace detail class FastmathFlagsInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::FastmathFlagsInterfaceTrait {}; /// Returns a FastmathFlagsAttr attribute for the operation ::mlir::LLVM::FastmathFlagsAttr getFastmathAttr(); /// Returns the name of the FastmathFlagsAttr attribute /// for the operation ::llvm::StringRef getFastmathAttrName(); }; } // namespace mlir::LLVM namespace mlir::LLVM { /// This interface defines an LLVM operation with integer overflow flags and /// provides a uniform API for accessing them. namespace detail { struct IntegerOverflowFlagsInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. IntegerOverflowFlags (*getOverflowFlags)(const Concept *impl, ::mlir::Operation *); void (*setOverflowFlags)(const Concept *impl, ::mlir::Operation *, IntegerOverflowFlags); bool (*hasNoUnsignedWrap)(const Concept *impl, ::mlir::Operation *); bool (*hasNoSignedWrap)(const Concept *impl, ::mlir::Operation *); StringRef (*getOverflowFlagsAttrName)(); }; template class Model : public Concept { public: using Interface = ::mlir::LLVM::IntegerOverflowFlagsInterface; Model() : Concept{getOverflowFlags, setOverflowFlags, hasNoUnsignedWrap, hasNoSignedWrap, getOverflowFlagsAttrName} {} static inline IntegerOverflowFlags getOverflowFlags(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setOverflowFlags(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, IntegerOverflowFlags flags); static inline bool hasNoUnsignedWrap(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline bool hasNoSignedWrap(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline StringRef getOverflowFlagsAttrName(); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::LLVM::IntegerOverflowFlagsInterface; FallbackModel() : Concept{getOverflowFlags, setOverflowFlags, hasNoUnsignedWrap, hasNoSignedWrap, getOverflowFlagsAttrName} {} static inline IntegerOverflowFlags getOverflowFlags(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setOverflowFlags(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, IntegerOverflowFlags flags); static inline bool hasNoUnsignedWrap(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline bool hasNoSignedWrap(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline StringRef getOverflowFlagsAttrName(); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; IntegerOverflowFlags getOverflowFlags(::mlir::Operation *tablegen_opaque_val) const; void setOverflowFlags(::mlir::Operation *tablegen_opaque_val, IntegerOverflowFlags flags) const; bool hasNoUnsignedWrap(::mlir::Operation *tablegen_opaque_val) const; bool hasNoSignedWrap(::mlir::Operation *tablegen_opaque_val) const; static StringRef getOverflowFlagsAttrName(); }; }; template struct IntegerOverflowFlagsInterfaceTrait; } // namespace detail class IntegerOverflowFlagsInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::IntegerOverflowFlagsInterfaceTrait {}; /// Get the integer overflow flags for the operation. IntegerOverflowFlags getOverflowFlags(); /// Set the integer overflow flags for the operation. void setOverflowFlags(IntegerOverflowFlags flags); /// Returns whether the operation has the No Unsigned Wrap keyword. bool hasNoUnsignedWrap(); /// Returns whether the operation has the No Signed Wrap keyword. bool hasNoSignedWrap(); /// Get the attribute name of the overflow flags property. StringRef getOverflowFlagsAttrName(); }; } // namespace mlir::LLVM namespace mlir::LLVM { /// This interface defines an LLVM operation with an exact flag and /// provides a uniform API for accessing it. namespace detail { struct ExactFlagInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. bool (*getIsExact)(const Concept *impl, ::mlir::Operation *); void (*setIsExact)(const Concept *impl, ::mlir::Operation *, bool); StringRef (*getIsExactName)(); }; template class Model : public Concept { public: using Interface = ::mlir::LLVM::ExactFlagInterface; Model() : Concept{getIsExact, setIsExact, getIsExactName} {} static inline bool getIsExact(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setIsExact(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, bool isExact); static inline StringRef getIsExactName(); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::LLVM::ExactFlagInterface; FallbackModel() : Concept{getIsExact, setIsExact, getIsExactName} {} static inline bool getIsExact(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setIsExact(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, bool isExact); static inline StringRef getIsExactName(); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; bool getIsExact(::mlir::Operation *tablegen_opaque_val) const; void setIsExact(::mlir::Operation *tablegen_opaque_val, bool isExact) const; static StringRef getIsExactName(); }; }; template struct ExactFlagInterfaceTrait; } // namespace detail class ExactFlagInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::ExactFlagInterfaceTrait {}; /// Get the exact flag for the operation. bool getIsExact(); /// Set the exact flag for the operation. void setIsExact(bool isExact); /// Get the attribute name of the isExact property. StringRef getIsExactName(); }; } // namespace mlir::LLVM namespace mlir::LLVM { /// This interface defines an LLVM operation with a disjoint flag and /// provides a uniform API for accessing it. namespace detail { struct DisjointFlagInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. bool (*getIsDisjoint)(const Concept *impl, ::mlir::Operation *); void (*setIsDisjoint)(const Concept *impl, ::mlir::Operation *, bool); StringRef (*getIsDisjointName)(); }; template class Model : public Concept { public: using Interface = ::mlir::LLVM::DisjointFlagInterface; Model() : Concept{getIsDisjoint, setIsDisjoint, getIsDisjointName} {} static inline bool getIsDisjoint(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setIsDisjoint(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, bool isDisjoint); static inline StringRef getIsDisjointName(); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::LLVM::DisjointFlagInterface; FallbackModel() : Concept{getIsDisjoint, setIsDisjoint, getIsDisjointName} {} static inline bool getIsDisjoint(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setIsDisjoint(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, bool isDisjoint); static inline StringRef getIsDisjointName(); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; bool getIsDisjoint(::mlir::Operation *tablegen_opaque_val) const; void setIsDisjoint(::mlir::Operation *tablegen_opaque_val, bool isDisjoint) const; static StringRef getIsDisjointName(); }; }; template struct DisjointFlagInterfaceTrait; } // namespace detail class DisjointFlagInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::DisjointFlagInterfaceTrait {}; /// Get the disjoint flag for the operation. bool getIsDisjoint(); /// Set the disjoint flag for the operation. void setIsDisjoint(bool isDisjoint); /// Get the attribute name of the isDisjoint property. StringRef getIsDisjointName(); }; } // namespace mlir::LLVM namespace mlir::LLVM { /// This interface defines an LLVM operation with an nneg flag and /// provides a uniform API for accessing it. namespace detail { struct NonNegFlagInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. bool (*getNonNeg)(const Concept *impl, ::mlir::Operation *); void (*setNonNeg)(const Concept *impl, ::mlir::Operation *, bool); StringRef (*getNonNegName)(); }; template class Model : public Concept { public: using Interface = ::mlir::LLVM::NonNegFlagInterface; Model() : Concept{getNonNeg, setNonNeg, getNonNegName} {} static inline bool getNonNeg(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setNonNeg(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, bool nonNeg); static inline StringRef getNonNegName(); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::LLVM::NonNegFlagInterface; FallbackModel() : Concept{getNonNeg, setNonNeg, getNonNegName} {} static inline bool getNonNeg(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setNonNeg(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, bool nonNeg); static inline StringRef getNonNegName(); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; bool getNonNeg(::mlir::Operation *tablegen_opaque_val) const; void setNonNeg(::mlir::Operation *tablegen_opaque_val, bool nonNeg) const; static StringRef getNonNegName(); }; }; template struct NonNegFlagInterfaceTrait; } // namespace detail class NonNegFlagInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::NonNegFlagInterfaceTrait {}; /// Get the nneg flag for the operation. bool getNonNeg(); /// Set the nneg flag for the operation. void setNonNeg(bool nonNeg); /// Get the attribute name of the nonNeg property. StringRef getNonNegName(); }; } // namespace mlir::LLVM namespace mlir::LLVM { /// An interface for memory operations that can carry access groups metadata. /// It provides setters and getters for the operation's access groups attribute. /// The default implementations of the interface methods expect the operation /// to have an attribute of type ArrayAttr named access_groups. namespace detail { struct AccessGroupOpInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. ::mlir::ArrayAttr (*getAccessGroupsOrNull)(const Concept *impl, ::mlir::Operation *); void (*setAccessGroups)(const Concept *impl, ::mlir::Operation *, const ::mlir::ArrayAttr); }; template class Model : public Concept { public: using Interface = ::mlir::LLVM::AccessGroupOpInterface; Model() : Concept{getAccessGroupsOrNull, setAccessGroups} {} static inline ::mlir::ArrayAttr getAccessGroupsOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setAccessGroups(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::LLVM::AccessGroupOpInterface; FallbackModel() : Concept{getAccessGroupsOrNull, setAccessGroups} {} static inline ::mlir::ArrayAttr getAccessGroupsOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setAccessGroups(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; ::mlir::ArrayAttr getAccessGroupsOrNull(::mlir::Operation *tablegen_opaque_val) const; void setAccessGroups(::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) const; }; }; template struct AccessGroupOpInterfaceTrait; } // namespace detail class AccessGroupOpInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::AccessGroupOpInterfaceTrait {}; /// Returns the access groups attribute or nullptr ::mlir::ArrayAttr getAccessGroupsOrNull(); /// Sets the access groups attribute void setAccessGroups(const ::mlir::ArrayAttr attr); }; } // namespace mlir::LLVM namespace mlir::LLVM { /// An interface for memory operations that can carry alias analysis metadata. /// It provides setters and getters for the operation's alias analysis /// attributes. The default implementations of the interface methods expect /// the operation to have attributes of type ArrayAttr named alias_scopes, /// noalias_scopes, and tbaa. namespace detail { struct AliasAnalysisOpInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. ::mlir::ArrayAttr (*getAliasScopesOrNull)(const Concept *impl, ::mlir::Operation *); void (*setAliasScopes)(const Concept *impl, ::mlir::Operation *, const ::mlir::ArrayAttr); ::mlir::ArrayAttr (*getNoAliasScopesOrNull)(const Concept *impl, ::mlir::Operation *); void (*setNoAliasScopes)(const Concept *impl, ::mlir::Operation *, const ::mlir::ArrayAttr); ::mlir::ArrayAttr (*getTBAATagsOrNull)(const Concept *impl, ::mlir::Operation *); void (*setTBAATags)(const Concept *impl, ::mlir::Operation *, const ::mlir::ArrayAttr); ::llvm::SmallVector<::mlir::Value> (*getAccessedOperands)(const Concept *impl, ::mlir::Operation *); }; template class Model : public Concept { public: using Interface = ::mlir::LLVM::AliasAnalysisOpInterface; Model() : Concept{getAliasScopesOrNull, setAliasScopes, getNoAliasScopesOrNull, setNoAliasScopes, getTBAATagsOrNull, setTBAATags, getAccessedOperands} {} static inline ::mlir::ArrayAttr getAliasScopesOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setAliasScopes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr); static inline ::mlir::ArrayAttr getNoAliasScopesOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setNoAliasScopes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr); static inline ::mlir::ArrayAttr getTBAATagsOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setTBAATags(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr); static inline ::llvm::SmallVector<::mlir::Value> getAccessedOperands(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::LLVM::AliasAnalysisOpInterface; FallbackModel() : Concept{getAliasScopesOrNull, setAliasScopes, getNoAliasScopesOrNull, setNoAliasScopes, getTBAATagsOrNull, setTBAATags, getAccessedOperands} {} static inline ::mlir::ArrayAttr getAliasScopesOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setAliasScopes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr); static inline ::mlir::ArrayAttr getNoAliasScopesOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setNoAliasScopes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr); static inline ::mlir::ArrayAttr getTBAATagsOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setTBAATags(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr); static inline ::llvm::SmallVector<::mlir::Value> getAccessedOperands(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; ::mlir::ArrayAttr getAliasScopesOrNull(::mlir::Operation *tablegen_opaque_val) const; void setAliasScopes(::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) const; ::mlir::ArrayAttr getNoAliasScopesOrNull(::mlir::Operation *tablegen_opaque_val) const; void setNoAliasScopes(::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) const; ::mlir::ArrayAttr getTBAATagsOrNull(::mlir::Operation *tablegen_opaque_val) const; void setTBAATags(::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) const; }; }; template struct AliasAnalysisOpInterfaceTrait; } // namespace detail class AliasAnalysisOpInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::AliasAnalysisOpInterfaceTrait {}; /// Returns the alias scopes attribute or nullptr ::mlir::ArrayAttr getAliasScopesOrNull(); /// Sets the alias scopes attribute void setAliasScopes(const ::mlir::ArrayAttr attr); /// Returns the noalias scopes attribute or nullptr ::mlir::ArrayAttr getNoAliasScopesOrNull(); /// Sets the noalias scopes attribute void setNoAliasScopes(const ::mlir::ArrayAttr attr); /// Returns the tbaa attribute or nullptr ::mlir::ArrayAttr getTBAATagsOrNull(); /// Sets the tbaa attribute void setTBAATags(const ::mlir::ArrayAttr attr); /// Returns a list of all pointer operands accessed by the operation ::llvm::SmallVector<::mlir::Value> getAccessedOperands(); }; } // namespace mlir::LLVM namespace mlir::LLVM { /// An interface for memory operations that can carry dereferenceable metadata. /// It provides setters and getters for the operation's dereferenceable /// attributes. The default implementations of the interface methods expect /// the operation to have an attribute of type DereferenceableAttr. namespace detail { struct DereferenceableOpInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. ::mlir::LLVM::DereferenceableAttr (*getDereferenceableOrNull)(const Concept *impl, ::mlir::Operation *); void (*setDereferenceable)(const Concept *impl, ::mlir::Operation *, ::mlir::LLVM::DereferenceableAttr); }; template class Model : public Concept { public: using Interface = ::mlir::LLVM::DereferenceableOpInterface; Model() : Concept{getDereferenceableOrNull, setDereferenceable} {} static inline ::mlir::LLVM::DereferenceableAttr getDereferenceableOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setDereferenceable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::LLVM::DereferenceableAttr attr); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::LLVM::DereferenceableOpInterface; FallbackModel() : Concept{getDereferenceableOrNull, setDereferenceable} {} static inline ::mlir::LLVM::DereferenceableAttr getDereferenceableOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline void setDereferenceable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::LLVM::DereferenceableAttr attr); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; ::mlir::LLVM::DereferenceableAttr getDereferenceableOrNull(::mlir::Operation *tablegen_opaque_val) const; void setDereferenceable(::mlir::Operation *tablegen_opaque_val, ::mlir::LLVM::DereferenceableAttr attr) const; }; }; template struct DereferenceableOpInterfaceTrait; } // namespace detail class DereferenceableOpInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::DereferenceableOpInterfaceTrait {}; /// Returns the dereferenceable attribute or nullptr ::mlir::LLVM::DereferenceableAttr getDereferenceableOrNull(); /// Sets the dereferenceable attribute void setDereferenceable(::mlir::LLVM::DereferenceableAttr attr); }; } // namespace mlir::LLVM namespace mlir::LLVM { /// An interface for operations receiving an exception behavior attribute /// controlling FP exception behavior. namespace detail { struct FPExceptionBehaviorOpInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. ::mlir::LLVM::FPExceptionBehaviorAttr (*getFPExceptionBehaviorAttr)(const Concept *impl, ::mlir::Operation *); ::llvm::StringRef (*getFPExceptionBehaviorAttrName)(); }; template class Model : public Concept { public: using Interface = ::mlir::LLVM::FPExceptionBehaviorOpInterface; Model() : Concept{getFPExceptionBehaviorAttr, getFPExceptionBehaviorAttrName} {} static inline ::mlir::LLVM::FPExceptionBehaviorAttr getFPExceptionBehaviorAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::llvm::StringRef getFPExceptionBehaviorAttrName(); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::LLVM::FPExceptionBehaviorOpInterface; FallbackModel() : Concept{getFPExceptionBehaviorAttr, getFPExceptionBehaviorAttrName} {} static inline ::mlir::LLVM::FPExceptionBehaviorAttr getFPExceptionBehaviorAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::llvm::StringRef getFPExceptionBehaviorAttrName(); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; ::mlir::LLVM::FPExceptionBehaviorAttr getFPExceptionBehaviorAttr(::mlir::Operation *tablegen_opaque_val) const; static ::llvm::StringRef getFPExceptionBehaviorAttrName(); }; }; template struct FPExceptionBehaviorOpInterfaceTrait; } // namespace detail class FPExceptionBehaviorOpInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::FPExceptionBehaviorOpInterfaceTrait {}; /// Returns a FPExceptionBehavior attribute for the operation ::mlir::LLVM::FPExceptionBehaviorAttr getFPExceptionBehaviorAttr(); /// Returns the name of the FPExceptionBehaviorAttr /// attribute for the operation ::llvm::StringRef getFPExceptionBehaviorAttrName(); }; } // namespace mlir::LLVM namespace mlir::LLVM { /// An interface for operations receiving a rounding mode attribute /// controlling FP rounding mode. namespace detail { struct RoundingModeOpInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. ::mlir::LLVM::RoundingModeAttr (*getRoundingModeAttr)(const Concept *impl, ::mlir::Operation *); ::llvm::StringRef (*getRoundingModeAttrName)(); }; template class Model : public Concept { public: using Interface = ::mlir::LLVM::RoundingModeOpInterface; Model() : Concept{getRoundingModeAttr, getRoundingModeAttrName} {} static inline ::mlir::LLVM::RoundingModeAttr getRoundingModeAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::llvm::StringRef getRoundingModeAttrName(); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::LLVM::RoundingModeOpInterface; FallbackModel() : Concept{getRoundingModeAttr, getRoundingModeAttrName} {} static inline ::mlir::LLVM::RoundingModeAttr getRoundingModeAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline ::llvm::StringRef getRoundingModeAttrName(); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; ::mlir::LLVM::RoundingModeAttr getRoundingModeAttr(::mlir::Operation *tablegen_opaque_val) const; static ::llvm::StringRef getRoundingModeAttrName(); }; }; template struct RoundingModeOpInterfaceTrait; } // namespace detail class RoundingModeOpInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::RoundingModeOpInterfaceTrait {}; /// Returns a RoundingMode attribute for the operation ::mlir::LLVM::RoundingModeAttr getRoundingModeAttr(); /// Returns the name of the RoundingModeAttr attribute /// for the operation ::llvm::StringRef getRoundingModeAttrName(); }; } // namespace mlir::LLVM namespace mlir::LLVM { /// An interface for operations modelling LLVM intrinsics suitable for /// 1-to-1 conversion. /// /// An op implementing this interface can be directly replaced by a call /// to a matching intrinsic function. /// The op must ensure that the combinations of its arguments and results /// have valid intrinsic counterparts. /// /// For example, an operation supporting different inputs: /// ```mlir /// %res_v8 = intr.op %value_v8 : vector<8xf32> /// %res_v16 = intr.op %value_v16 : vector<16xf32> /// ``` /// can be converted to the following intrinsic calls: /// ```mlir /// %res_v8 = llvm.call_intrinsic "llvm.x86.op.intr.256"(%value_v8) /// %res_v16 = llvm.call_intrinsic "llvm.x86.op.intr.512"(%value_v16) /// ``` namespace detail { struct OneToOneIntrinsicOpInterfaceInterfaceTraits { struct Concept { /// The methods defined by the interface. std::string (*getIntrinsicName)(const Concept *impl, ::mlir::Operation *); SmallVector (*getIntrinsicOperands)(const Concept *impl, ::mlir::Operation *, ::mlir::ArrayRef, const ::mlir::LLVMTypeConverter &, ::mlir::RewriterBase &); }; template class Model : public Concept { public: using Interface = ::mlir::LLVM::OneToOneIntrinsicOpInterface; Model() : Concept{getIntrinsicName, getIntrinsicOperands} {} static inline std::string getIntrinsicName(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline SmallVector getIntrinsicOperands(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayRef operands, const ::mlir::LLVMTypeConverter & typeConverter, ::mlir::RewriterBase & rewriter); }; template class FallbackModel : public Concept { public: using Interface = ::mlir::LLVM::OneToOneIntrinsicOpInterface; FallbackModel() : Concept{getIntrinsicName, getIntrinsicOperands} {} static inline std::string getIntrinsicName(const Concept *impl, ::mlir::Operation *tablegen_opaque_val); static inline SmallVector getIntrinsicOperands(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayRef operands, const ::mlir::LLVMTypeConverter & typeConverter, ::mlir::RewriterBase & rewriter); }; template class ExternalModel : public FallbackModel { public: using ConcreteEntity = ConcreteOp; SmallVector getIntrinsicOperands(::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayRef operands, const ::mlir::LLVMTypeConverter &typeConverter, ::mlir::RewriterBase &rewriter) const; }; }; template struct OneToOneIntrinsicOpInterfaceTrait; } // namespace detail class OneToOneIntrinsicOpInterface : public ::mlir::OpInterface { public: using ::mlir::OpInterface::OpInterface; template struct Trait : public detail::OneToOneIntrinsicOpInterfaceTrait {}; /// Returns mangled LLVM intrinsic function name matching the operation /// variant. std::string getIntrinsicName(); /// Returns operands for a corresponding LLVM intrinsic. /// /// Additional operations may be created to facilitate mapping /// between the source operands and the target intrinsic. SmallVector getIntrinsicOperands(::mlir::ArrayRef operands, const ::mlir::LLVMTypeConverter & typeConverter, ::mlir::RewriterBase & rewriter); }; } // namespace mlir::LLVM namespace mlir::LLVM::detail { template struct FastmathFlagsInterfaceTrait : public ::mlir::OpInterface::Trait { /// Returns a FastmathFlagsAttr attribute for the operation ::mlir::LLVM::FastmathFlagsAttr getFastmathAttr() { auto op = cast(this->getOperation()); return op.getFastmathFlagsAttr(); } /// Returns the name of the FastmathFlagsAttr attribute /// for the operation static ::llvm::StringRef getFastmathAttrName() { return "fastmathFlags"; } }; } // namespace mlir::LLVM::detail namespace mlir::LLVM::detail { template struct IntegerOverflowFlagsInterfaceTrait : public ::mlir::OpInterface::Trait { /// Get the integer overflow flags for the operation. IntegerOverflowFlags getOverflowFlags() { return (*static_cast(this)).getProperties().overflowFlags; } /// Set the integer overflow flags for the operation. void setOverflowFlags(IntegerOverflowFlags flags) { (*static_cast(this)).getProperties().overflowFlags = flags; } /// Returns whether the operation has the No Unsigned Wrap keyword. bool hasNoUnsignedWrap() { return bitEnumContainsAll((*static_cast(this)).getOverflowFlags(), IntegerOverflowFlags::nuw); } /// Returns whether the operation has the No Signed Wrap keyword. bool hasNoSignedWrap() { return bitEnumContainsAll((*static_cast(this)).getOverflowFlags(), IntegerOverflowFlags::nsw); } /// Get the attribute name of the overflow flags property. static StringRef getOverflowFlagsAttrName() { return "overflowFlags"; } }; } // namespace mlir::LLVM::detail namespace mlir::LLVM::detail { template struct ExactFlagInterfaceTrait : public ::mlir::OpInterface::Trait { /// Get the exact flag for the operation. bool getIsExact() { return (*static_cast(this)).getProperties().isExact; } /// Set the exact flag for the operation. void setIsExact(bool isExact) { (*static_cast(this)).getProperties().isExact = isExact; } /// Get the attribute name of the isExact property. static StringRef getIsExactName() { return "isExact"; } }; } // namespace mlir::LLVM::detail namespace mlir::LLVM::detail { template struct DisjointFlagInterfaceTrait : public ::mlir::OpInterface::Trait { /// Get the disjoint flag for the operation. bool getIsDisjoint() { return (*static_cast(this)).getProperties().isDisjoint; } /// Set the disjoint flag for the operation. void setIsDisjoint(bool isDisjoint) { (*static_cast(this)).getProperties().isDisjoint = isDisjoint; } /// Get the attribute name of the isDisjoint property. static StringRef getIsDisjointName() { return "isDisjoint"; } }; } // namespace mlir::LLVM::detail namespace mlir::LLVM::detail { template struct NonNegFlagInterfaceTrait : public ::mlir::OpInterface::Trait { /// Get the nneg flag for the operation. bool getNonNeg() { return (*static_cast(this)).getProperties().nonNeg; } /// Set the nneg flag for the operation. void setNonNeg(bool nonNeg) { (*static_cast(this)).getProperties().nonNeg = nonNeg; } /// Get the attribute name of the nonNeg property. static StringRef getNonNegName() { return "nonNeg"; } }; } // namespace mlir::LLVM::detail namespace mlir::LLVM::detail { template struct AccessGroupOpInterfaceTrait : public ::mlir::OpInterface::Trait { /// Returns the access groups attribute or nullptr ::mlir::ArrayAttr getAccessGroupsOrNull() { auto op = cast(this->getOperation()); return op.getAccessGroupsAttr(); } /// Sets the access groups attribute void setAccessGroups(const ::mlir::ArrayAttr attr) { auto op = cast(this->getOperation()); op.setAccessGroupsAttr(attr); } static ::llvm::LogicalResult verifyTrait(::mlir::Operation *op) { return detail::verifyAccessGroupOpInterface(op); } }; } // namespace mlir::LLVM::detail namespace mlir::LLVM::detail { template struct AliasAnalysisOpInterfaceTrait : public ::mlir::OpInterface::Trait { /// Returns the alias scopes attribute or nullptr ::mlir::ArrayAttr getAliasScopesOrNull() { auto op = cast(this->getOperation()); return op.getAliasScopesAttr(); } /// Sets the alias scopes attribute void setAliasScopes(const ::mlir::ArrayAttr attr) { auto op = cast(this->getOperation()); op.setAliasScopesAttr(attr); } /// Returns the noalias scopes attribute or nullptr ::mlir::ArrayAttr getNoAliasScopesOrNull() { auto op = cast(this->getOperation()); return op.getNoaliasScopesAttr(); } /// Sets the noalias scopes attribute void setNoAliasScopes(const ::mlir::ArrayAttr attr) { auto op = cast(this->getOperation()); op.setNoaliasScopesAttr(attr); } /// Returns the tbaa attribute or nullptr ::mlir::ArrayAttr getTBAATagsOrNull() { auto op = cast(this->getOperation()); return op.getTbaaAttr(); } /// Sets the tbaa attribute void setTBAATags(const ::mlir::ArrayAttr attr) { auto op = cast(this->getOperation()); op.setTbaaAttr(attr); } static ::llvm::LogicalResult verifyTrait(::mlir::Operation *op) { return detail::verifyAliasAnalysisOpInterface(op); } }; } // namespace mlir::LLVM::detail namespace mlir::LLVM::detail { template struct DereferenceableOpInterfaceTrait : public ::mlir::OpInterface::Trait { /// Returns the dereferenceable attribute or nullptr ::mlir::LLVM::DereferenceableAttr getDereferenceableOrNull() { auto op = cast(this->getOperation()); return op.getDereferenceableAttr(); } /// Sets the dereferenceable attribute void setDereferenceable(::mlir::LLVM::DereferenceableAttr attr) { auto op = cast(this->getOperation()); op.setDereferenceableAttr(attr); } static ::llvm::LogicalResult verifyTrait(::mlir::Operation *op) { return detail::verifyDereferenceableOpInterface(op); } }; } // namespace mlir::LLVM::detail namespace mlir::LLVM::detail { template struct FPExceptionBehaviorOpInterfaceTrait : public ::mlir::OpInterface::Trait { /// Returns a FPExceptionBehavior attribute for the operation ::mlir::LLVM::FPExceptionBehaviorAttr getFPExceptionBehaviorAttr() { auto op = cast(this->getOperation()); return op.getFpExceptionBehaviorAttr(); } /// Returns the name of the FPExceptionBehaviorAttr /// attribute for the operation static ::llvm::StringRef getFPExceptionBehaviorAttrName() { return "fpExceptionBehavior"; } }; } // namespace mlir::LLVM::detail namespace mlir::LLVM::detail { template struct RoundingModeOpInterfaceTrait : public ::mlir::OpInterface::Trait { /// Returns a RoundingMode attribute for the operation ::mlir::LLVM::RoundingModeAttr getRoundingModeAttr() { auto op = cast(this->getOperation()); return op.getRoundingmodeAttr(); } /// Returns the name of the RoundingModeAttr attribute /// for the operation static ::llvm::StringRef getRoundingModeAttrName() { return "roundingmode"; } }; } // namespace mlir::LLVM::detail namespace mlir::LLVM::detail { template struct OneToOneIntrinsicOpInterfaceTrait : public ::mlir::OpInterface::Trait { /// Returns operands for a corresponding LLVM intrinsic. /// /// Additional operations may be created to facilitate mapping /// between the source operands and the target intrinsic. SmallVector getIntrinsicOperands(::mlir::ArrayRef operands, const ::mlir::LLVMTypeConverter & typeConverter, ::mlir::RewriterBase & rewriter) { return SmallVector(operands); } }; } // namespace mlir::LLVM::detail namespace mlir::LLVM { template ::mlir::LLVM::FastmathFlagsAttr detail::FastmathFlagsInterfaceInterfaceTraits::Model::getFastmathAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getFastmathAttr(); } template ::llvm::StringRef detail::FastmathFlagsInterfaceInterfaceTraits::Model::getFastmathAttrName() { return ConcreteOp::getFastmathAttrName(); } template ::mlir::LLVM::FastmathFlagsAttr detail::FastmathFlagsInterfaceInterfaceTraits::FallbackModel::getFastmathAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getFastmathAttr(tablegen_opaque_val); } template ::llvm::StringRef detail::FastmathFlagsInterfaceInterfaceTraits::FallbackModel::getFastmathAttrName() { return ConcreteOp::getFastmathAttrName(); } template ::mlir::LLVM::FastmathFlagsAttr detail::FastmathFlagsInterfaceInterfaceTraits::ExternalModel::getFastmathAttr(::mlir::Operation *tablegen_opaque_val) const { auto op = cast(this->getOperation()); return op.getFastmathFlagsAttr(); } template ::llvm::StringRef detail::FastmathFlagsInterfaceInterfaceTraits::ExternalModel::getFastmathAttrName() { return "fastmathFlags"; } } // namespace mlir::LLVM namespace mlir::LLVM { template IntegerOverflowFlags detail::IntegerOverflowFlagsInterfaceInterfaceTraits::Model::getOverflowFlags(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getOverflowFlags(); } template void detail::IntegerOverflowFlagsInterfaceInterfaceTraits::Model::setOverflowFlags(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, IntegerOverflowFlags flags) { return (llvm::cast(tablegen_opaque_val)).setOverflowFlags(flags); } template bool detail::IntegerOverflowFlagsInterfaceInterfaceTraits::Model::hasNoUnsignedWrap(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).hasNoUnsignedWrap(); } template bool detail::IntegerOverflowFlagsInterfaceInterfaceTraits::Model::hasNoSignedWrap(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).hasNoSignedWrap(); } template StringRef detail::IntegerOverflowFlagsInterfaceInterfaceTraits::Model::getOverflowFlagsAttrName() { return ConcreteOp::getOverflowFlagsAttrName(); } template IntegerOverflowFlags detail::IntegerOverflowFlagsInterfaceInterfaceTraits::FallbackModel::getOverflowFlags(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getOverflowFlags(tablegen_opaque_val); } template void detail::IntegerOverflowFlagsInterfaceInterfaceTraits::FallbackModel::setOverflowFlags(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, IntegerOverflowFlags flags) { return static_cast(impl)->setOverflowFlags(tablegen_opaque_val, flags); } template bool detail::IntegerOverflowFlagsInterfaceInterfaceTraits::FallbackModel::hasNoUnsignedWrap(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->hasNoUnsignedWrap(tablegen_opaque_val); } template bool detail::IntegerOverflowFlagsInterfaceInterfaceTraits::FallbackModel::hasNoSignedWrap(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->hasNoSignedWrap(tablegen_opaque_val); } template StringRef detail::IntegerOverflowFlagsInterfaceInterfaceTraits::FallbackModel::getOverflowFlagsAttrName() { return ConcreteOp::getOverflowFlagsAttrName(); } template IntegerOverflowFlags detail::IntegerOverflowFlagsInterfaceInterfaceTraits::ExternalModel::getOverflowFlags(::mlir::Operation *tablegen_opaque_val) const { return (llvm::cast(tablegen_opaque_val)).getProperties().overflowFlags; } template void detail::IntegerOverflowFlagsInterfaceInterfaceTraits::ExternalModel::setOverflowFlags(::mlir::Operation *tablegen_opaque_val, IntegerOverflowFlags flags) const { (llvm::cast(tablegen_opaque_val)).getProperties().overflowFlags = flags; } template bool detail::IntegerOverflowFlagsInterfaceInterfaceTraits::ExternalModel::hasNoUnsignedWrap(::mlir::Operation *tablegen_opaque_val) const { return bitEnumContainsAll((llvm::cast(tablegen_opaque_val)).getOverflowFlags(), IntegerOverflowFlags::nuw); } template bool detail::IntegerOverflowFlagsInterfaceInterfaceTraits::ExternalModel::hasNoSignedWrap(::mlir::Operation *tablegen_opaque_val) const { return bitEnumContainsAll((llvm::cast(tablegen_opaque_val)).getOverflowFlags(), IntegerOverflowFlags::nsw); } template StringRef detail::IntegerOverflowFlagsInterfaceInterfaceTraits::ExternalModel::getOverflowFlagsAttrName() { return "overflowFlags"; } } // namespace mlir::LLVM namespace mlir::LLVM { template bool detail::ExactFlagInterfaceInterfaceTraits::Model::getIsExact(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getIsExact(); } template void detail::ExactFlagInterfaceInterfaceTraits::Model::setIsExact(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, bool isExact) { return (llvm::cast(tablegen_opaque_val)).setIsExact(isExact); } template StringRef detail::ExactFlagInterfaceInterfaceTraits::Model::getIsExactName() { return ConcreteOp::getIsExactName(); } template bool detail::ExactFlagInterfaceInterfaceTraits::FallbackModel::getIsExact(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getIsExact(tablegen_opaque_val); } template void detail::ExactFlagInterfaceInterfaceTraits::FallbackModel::setIsExact(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, bool isExact) { return static_cast(impl)->setIsExact(tablegen_opaque_val, isExact); } template StringRef detail::ExactFlagInterfaceInterfaceTraits::FallbackModel::getIsExactName() { return ConcreteOp::getIsExactName(); } template bool detail::ExactFlagInterfaceInterfaceTraits::ExternalModel::getIsExact(::mlir::Operation *tablegen_opaque_val) const { return (llvm::cast(tablegen_opaque_val)).getProperties().isExact; } template void detail::ExactFlagInterfaceInterfaceTraits::ExternalModel::setIsExact(::mlir::Operation *tablegen_opaque_val, bool isExact) const { (llvm::cast(tablegen_opaque_val)).getProperties().isExact = isExact; } template StringRef detail::ExactFlagInterfaceInterfaceTraits::ExternalModel::getIsExactName() { return "isExact"; } } // namespace mlir::LLVM namespace mlir::LLVM { template bool detail::DisjointFlagInterfaceInterfaceTraits::Model::getIsDisjoint(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getIsDisjoint(); } template void detail::DisjointFlagInterfaceInterfaceTraits::Model::setIsDisjoint(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, bool isDisjoint) { return (llvm::cast(tablegen_opaque_val)).setIsDisjoint(isDisjoint); } template StringRef detail::DisjointFlagInterfaceInterfaceTraits::Model::getIsDisjointName() { return ConcreteOp::getIsDisjointName(); } template bool detail::DisjointFlagInterfaceInterfaceTraits::FallbackModel::getIsDisjoint(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getIsDisjoint(tablegen_opaque_val); } template void detail::DisjointFlagInterfaceInterfaceTraits::FallbackModel::setIsDisjoint(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, bool isDisjoint) { return static_cast(impl)->setIsDisjoint(tablegen_opaque_val, isDisjoint); } template StringRef detail::DisjointFlagInterfaceInterfaceTraits::FallbackModel::getIsDisjointName() { return ConcreteOp::getIsDisjointName(); } template bool detail::DisjointFlagInterfaceInterfaceTraits::ExternalModel::getIsDisjoint(::mlir::Operation *tablegen_opaque_val) const { return (llvm::cast(tablegen_opaque_val)).getProperties().isDisjoint; } template void detail::DisjointFlagInterfaceInterfaceTraits::ExternalModel::setIsDisjoint(::mlir::Operation *tablegen_opaque_val, bool isDisjoint) const { (llvm::cast(tablegen_opaque_val)).getProperties().isDisjoint = isDisjoint; } template StringRef detail::DisjointFlagInterfaceInterfaceTraits::ExternalModel::getIsDisjointName() { return "isDisjoint"; } } // namespace mlir::LLVM namespace mlir::LLVM { template bool detail::NonNegFlagInterfaceInterfaceTraits::Model::getNonNeg(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getNonNeg(); } template void detail::NonNegFlagInterfaceInterfaceTraits::Model::setNonNeg(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, bool nonNeg) { return (llvm::cast(tablegen_opaque_val)).setNonNeg(nonNeg); } template StringRef detail::NonNegFlagInterfaceInterfaceTraits::Model::getNonNegName() { return ConcreteOp::getNonNegName(); } template bool detail::NonNegFlagInterfaceInterfaceTraits::FallbackModel::getNonNeg(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getNonNeg(tablegen_opaque_val); } template void detail::NonNegFlagInterfaceInterfaceTraits::FallbackModel::setNonNeg(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, bool nonNeg) { return static_cast(impl)->setNonNeg(tablegen_opaque_val, nonNeg); } template StringRef detail::NonNegFlagInterfaceInterfaceTraits::FallbackModel::getNonNegName() { return ConcreteOp::getNonNegName(); } template bool detail::NonNegFlagInterfaceInterfaceTraits::ExternalModel::getNonNeg(::mlir::Operation *tablegen_opaque_val) const { return (llvm::cast(tablegen_opaque_val)).getProperties().nonNeg; } template void detail::NonNegFlagInterfaceInterfaceTraits::ExternalModel::setNonNeg(::mlir::Operation *tablegen_opaque_val, bool nonNeg) const { (llvm::cast(tablegen_opaque_val)).getProperties().nonNeg = nonNeg; } template StringRef detail::NonNegFlagInterfaceInterfaceTraits::ExternalModel::getNonNegName() { return "nonNeg"; } } // namespace mlir::LLVM namespace mlir::LLVM { template ::mlir::ArrayAttr detail::AccessGroupOpInterfaceInterfaceTraits::Model::getAccessGroupsOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getAccessGroupsOrNull(); } template void detail::AccessGroupOpInterfaceInterfaceTraits::Model::setAccessGroups(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) { return (llvm::cast(tablegen_opaque_val)).setAccessGroups(attr); } template ::mlir::ArrayAttr detail::AccessGroupOpInterfaceInterfaceTraits::FallbackModel::getAccessGroupsOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getAccessGroupsOrNull(tablegen_opaque_val); } template void detail::AccessGroupOpInterfaceInterfaceTraits::FallbackModel::setAccessGroups(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) { return static_cast(impl)->setAccessGroups(tablegen_opaque_val, attr); } template ::mlir::ArrayAttr detail::AccessGroupOpInterfaceInterfaceTraits::ExternalModel::getAccessGroupsOrNull(::mlir::Operation *tablegen_opaque_val) const { auto op = cast(this->getOperation()); return op.getAccessGroupsAttr(); } template void detail::AccessGroupOpInterfaceInterfaceTraits::ExternalModel::setAccessGroups(::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) const { auto op = cast(this->getOperation()); op.setAccessGroupsAttr(attr); } } // namespace mlir::LLVM namespace mlir::LLVM { template ::mlir::ArrayAttr detail::AliasAnalysisOpInterfaceInterfaceTraits::Model::getAliasScopesOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getAliasScopesOrNull(); } template void detail::AliasAnalysisOpInterfaceInterfaceTraits::Model::setAliasScopes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) { return (llvm::cast(tablegen_opaque_val)).setAliasScopes(attr); } template ::mlir::ArrayAttr detail::AliasAnalysisOpInterfaceInterfaceTraits::Model::getNoAliasScopesOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getNoAliasScopesOrNull(); } template void detail::AliasAnalysisOpInterfaceInterfaceTraits::Model::setNoAliasScopes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) { return (llvm::cast(tablegen_opaque_val)).setNoAliasScopes(attr); } template ::mlir::ArrayAttr detail::AliasAnalysisOpInterfaceInterfaceTraits::Model::getTBAATagsOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getTBAATagsOrNull(); } template void detail::AliasAnalysisOpInterfaceInterfaceTraits::Model::setTBAATags(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) { return (llvm::cast(tablegen_opaque_val)).setTBAATags(attr); } template ::llvm::SmallVector<::mlir::Value> detail::AliasAnalysisOpInterfaceInterfaceTraits::Model::getAccessedOperands(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getAccessedOperands(); } template ::mlir::ArrayAttr detail::AliasAnalysisOpInterfaceInterfaceTraits::FallbackModel::getAliasScopesOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getAliasScopesOrNull(tablegen_opaque_val); } template void detail::AliasAnalysisOpInterfaceInterfaceTraits::FallbackModel::setAliasScopes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) { return static_cast(impl)->setAliasScopes(tablegen_opaque_val, attr); } template ::mlir::ArrayAttr detail::AliasAnalysisOpInterfaceInterfaceTraits::FallbackModel::getNoAliasScopesOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getNoAliasScopesOrNull(tablegen_opaque_val); } template void detail::AliasAnalysisOpInterfaceInterfaceTraits::FallbackModel::setNoAliasScopes(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) { return static_cast(impl)->setNoAliasScopes(tablegen_opaque_val, attr); } template ::mlir::ArrayAttr detail::AliasAnalysisOpInterfaceInterfaceTraits::FallbackModel::getTBAATagsOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getTBAATagsOrNull(tablegen_opaque_val); } template void detail::AliasAnalysisOpInterfaceInterfaceTraits::FallbackModel::setTBAATags(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) { return static_cast(impl)->setTBAATags(tablegen_opaque_val, attr); } template ::llvm::SmallVector<::mlir::Value> detail::AliasAnalysisOpInterfaceInterfaceTraits::FallbackModel::getAccessedOperands(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getAccessedOperands(tablegen_opaque_val); } template ::mlir::ArrayAttr detail::AliasAnalysisOpInterfaceInterfaceTraits::ExternalModel::getAliasScopesOrNull(::mlir::Operation *tablegen_opaque_val) const { auto op = cast(this->getOperation()); return op.getAliasScopesAttr(); } template void detail::AliasAnalysisOpInterfaceInterfaceTraits::ExternalModel::setAliasScopes(::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) const { auto op = cast(this->getOperation()); op.setAliasScopesAttr(attr); } template ::mlir::ArrayAttr detail::AliasAnalysisOpInterfaceInterfaceTraits::ExternalModel::getNoAliasScopesOrNull(::mlir::Operation *tablegen_opaque_val) const { auto op = cast(this->getOperation()); return op.getNoaliasScopesAttr(); } template void detail::AliasAnalysisOpInterfaceInterfaceTraits::ExternalModel::setNoAliasScopes(::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) const { auto op = cast(this->getOperation()); op.setNoaliasScopesAttr(attr); } template ::mlir::ArrayAttr detail::AliasAnalysisOpInterfaceInterfaceTraits::ExternalModel::getTBAATagsOrNull(::mlir::Operation *tablegen_opaque_val) const { auto op = cast(this->getOperation()); return op.getTbaaAttr(); } template void detail::AliasAnalysisOpInterfaceInterfaceTraits::ExternalModel::setTBAATags(::mlir::Operation *tablegen_opaque_val, const ::mlir::ArrayAttr attr) const { auto op = cast(this->getOperation()); op.setTbaaAttr(attr); } } // namespace mlir::LLVM namespace mlir::LLVM { template ::mlir::LLVM::DereferenceableAttr detail::DereferenceableOpInterfaceInterfaceTraits::Model::getDereferenceableOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getDereferenceableOrNull(); } template void detail::DereferenceableOpInterfaceInterfaceTraits::Model::setDereferenceable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::LLVM::DereferenceableAttr attr) { return (llvm::cast(tablegen_opaque_val)).setDereferenceable(attr); } template ::mlir::LLVM::DereferenceableAttr detail::DereferenceableOpInterfaceInterfaceTraits::FallbackModel::getDereferenceableOrNull(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getDereferenceableOrNull(tablegen_opaque_val); } template void detail::DereferenceableOpInterfaceInterfaceTraits::FallbackModel::setDereferenceable(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::LLVM::DereferenceableAttr attr) { return static_cast(impl)->setDereferenceable(tablegen_opaque_val, attr); } template ::mlir::LLVM::DereferenceableAttr detail::DereferenceableOpInterfaceInterfaceTraits::ExternalModel::getDereferenceableOrNull(::mlir::Operation *tablegen_opaque_val) const { auto op = cast(this->getOperation()); return op.getDereferenceableAttr(); } template void detail::DereferenceableOpInterfaceInterfaceTraits::ExternalModel::setDereferenceable(::mlir::Operation *tablegen_opaque_val, ::mlir::LLVM::DereferenceableAttr attr) const { auto op = cast(this->getOperation()); op.setDereferenceableAttr(attr); } } // namespace mlir::LLVM namespace mlir::LLVM { template ::mlir::LLVM::FPExceptionBehaviorAttr detail::FPExceptionBehaviorOpInterfaceInterfaceTraits::Model::getFPExceptionBehaviorAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getFPExceptionBehaviorAttr(); } template ::llvm::StringRef detail::FPExceptionBehaviorOpInterfaceInterfaceTraits::Model::getFPExceptionBehaviorAttrName() { return ConcreteOp::getFPExceptionBehaviorAttrName(); } template ::mlir::LLVM::FPExceptionBehaviorAttr detail::FPExceptionBehaviorOpInterfaceInterfaceTraits::FallbackModel::getFPExceptionBehaviorAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getFPExceptionBehaviorAttr(tablegen_opaque_val); } template ::llvm::StringRef detail::FPExceptionBehaviorOpInterfaceInterfaceTraits::FallbackModel::getFPExceptionBehaviorAttrName() { return ConcreteOp::getFPExceptionBehaviorAttrName(); } template ::mlir::LLVM::FPExceptionBehaviorAttr detail::FPExceptionBehaviorOpInterfaceInterfaceTraits::ExternalModel::getFPExceptionBehaviorAttr(::mlir::Operation *tablegen_opaque_val) const { auto op = cast(this->getOperation()); return op.getFpExceptionBehaviorAttr(); } template ::llvm::StringRef detail::FPExceptionBehaviorOpInterfaceInterfaceTraits::ExternalModel::getFPExceptionBehaviorAttrName() { return "fpExceptionBehavior"; } } // namespace mlir::LLVM namespace mlir::LLVM { template ::mlir::LLVM::RoundingModeAttr detail::RoundingModeOpInterfaceInterfaceTraits::Model::getRoundingModeAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getRoundingModeAttr(); } template ::llvm::StringRef detail::RoundingModeOpInterfaceInterfaceTraits::Model::getRoundingModeAttrName() { return ConcreteOp::getRoundingModeAttrName(); } template ::mlir::LLVM::RoundingModeAttr detail::RoundingModeOpInterfaceInterfaceTraits::FallbackModel::getRoundingModeAttr(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getRoundingModeAttr(tablegen_opaque_val); } template ::llvm::StringRef detail::RoundingModeOpInterfaceInterfaceTraits::FallbackModel::getRoundingModeAttrName() { return ConcreteOp::getRoundingModeAttrName(); } template ::mlir::LLVM::RoundingModeAttr detail::RoundingModeOpInterfaceInterfaceTraits::ExternalModel::getRoundingModeAttr(::mlir::Operation *tablegen_opaque_val) const { auto op = cast(this->getOperation()); return op.getRoundingmodeAttr(); } template ::llvm::StringRef detail::RoundingModeOpInterfaceInterfaceTraits::ExternalModel::getRoundingModeAttrName() { return "roundingmode"; } } // namespace mlir::LLVM namespace mlir::LLVM { template std::string detail::OneToOneIntrinsicOpInterfaceInterfaceTraits::Model::getIntrinsicName(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return (llvm::cast(tablegen_opaque_val)).getIntrinsicName(); } template SmallVector detail::OneToOneIntrinsicOpInterfaceInterfaceTraits::Model::getIntrinsicOperands(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayRef operands, const ::mlir::LLVMTypeConverter & typeConverter, ::mlir::RewriterBase & rewriter) { return (llvm::cast(tablegen_opaque_val)).getIntrinsicOperands(operands, typeConverter, rewriter); } template std::string detail::OneToOneIntrinsicOpInterfaceInterfaceTraits::FallbackModel::getIntrinsicName(const Concept *impl, ::mlir::Operation *tablegen_opaque_val) { return static_cast(impl)->getIntrinsicName(tablegen_opaque_val); } template SmallVector detail::OneToOneIntrinsicOpInterfaceInterfaceTraits::FallbackModel::getIntrinsicOperands(const Concept *impl, ::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayRef operands, const ::mlir::LLVMTypeConverter & typeConverter, ::mlir::RewriterBase & rewriter) { return static_cast(impl)->getIntrinsicOperands(tablegen_opaque_val, operands, typeConverter, rewriter); } template SmallVector detail::OneToOneIntrinsicOpInterfaceInterfaceTraits::ExternalModel::getIntrinsicOperands(::mlir::Operation *tablegen_opaque_val, ::mlir::ArrayRef operands, const ::mlir::LLVMTypeConverter &typeConverter, ::mlir::RewriterBase &rewriter) const { return SmallVector(operands); } } // namespace mlir::LLVM