#pragma once #include namespace c10 { namespace impl { class OperatorEntry; } enum class AliasAnalysisKind : uint8_t { INTERNAL_SPECIAL_CASE, CONSERVATIVE, // The most conservative alias analysis type, assumes // side-effects. This is the default analysis. FROM_SCHEMA, PURE_FUNCTION }; #if !defined(_MSC_VER) constexpr // Our current MSVC version has a bug that doesn't allow this to be constexpr. #endif inline const char* toString(AliasAnalysisKind aliasAnalysisKind) { return (aliasAnalysisKind == AliasAnalysisKind::CONSERVATIVE) ? "CONSERVATIVE" : (aliasAnalysisKind == AliasAnalysisKind::FROM_SCHEMA) ? "FROM_SCHEMA" : (aliasAnalysisKind == AliasAnalysisKind::PURE_FUNCTION) ? "PURE_FUNCTION" : (aliasAnalysisKind == AliasAnalysisKind::INTERNAL_SPECIAL_CASE) ? "INTERNAL_SPECIAL_CASE" : "UNKNOWN"; } struct OperatorOptions final { public: AliasAnalysisKind aliasAnalysis() const { return aliasAnalysisKind_; } void setAliasAnalysis(AliasAnalysisKind v) { aliasAnalysisKind_ = v; } friend bool operator==(const OperatorOptions& lhs, const OperatorOptions& rhs) { return lhs.aliasAnalysisKind_ == rhs.aliasAnalysisKind_; } friend bool operator!=(const OperatorOptions& lhs, const OperatorOptions& rhs) { return !(lhs == rhs); } private: AliasAnalysisKind aliasAnalysisKind_ = AliasAnalysisKind::CONSERVATIVE; }; } // namespace c10