// Generated by the protocol buffer compiler.  DO NOT EDIT!
// NO CHECKED-IN PROTOBUF GENCODE
// source: xla/service/cpu/backend_config.proto
// Protobuf C++ Version: 5.28.3

#ifndef GOOGLE_PROTOBUF_INCLUDED_xla_2fservice_2fcpu_2fbackend_5fconfig_2eproto_2epb_2eh
#define GOOGLE_PROTOBUF_INCLUDED_xla_2fservice_2fcpu_2fbackend_5fconfig_2eproto_2epb_2eh

#include <limits>
#include <string>
#include <type_traits>
#include <utility>

#include "google/protobuf/runtime_version.h"
#if PROTOBUF_VERSION != 5028003
#error "Protobuf C++ gencode is built with an incompatible version of"
#error "Protobuf C++ headers/runtime. See"
#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
#endif
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
#include "google/protobuf/arenastring.h"
#include "google/protobuf/generated_message_tctable_decl.h"
#include "google/protobuf/generated_message_util.h"
#include "google/protobuf/metadata_lite.h"
#include "google/protobuf/generated_message_reflection.h"
#include "google/protobuf/message.h"
#include "google/protobuf/repeated_field.h"  // IWYU pragma: export
#include "google/protobuf/extension_set.h"  // IWYU pragma: export
#include "google/protobuf/unknown_field_set.h"
#include "xla/backends/cpu/xnnpack_config.pb.h"
#include "xla/service/cpu/onednn_config.pb.h"
// @@protoc_insertion_point(includes)

// Must be included last.
#include "google/protobuf/port_def.inc"

#define PROTOBUF_INTERNAL_EXPORT_xla_2fservice_2fcpu_2fbackend_5fconfig_2eproto PROTOBUF_EXPORT

namespace google {
namespace protobuf {
namespace internal {
class AnyMetadata;
}  // namespace internal
}  // namespace protobuf
}  // namespace google

// Internal implementation detail -- do not use these members.
struct PROTOBUF_EXPORT TableStruct_xla_2fservice_2fcpu_2fbackend_5fconfig_2eproto {
  static const ::uint32_t offsets[];
};
PROTOBUF_EXPORT extern const ::google::protobuf::internal::DescriptorTable
    descriptor_table_xla_2fservice_2fcpu_2fbackend_5fconfig_2eproto;
namespace xla {
namespace cpu {
class BackendConfig;
struct BackendConfigDefaultTypeInternal;
PROTOBUF_EXPORT extern BackendConfigDefaultTypeInternal _BackendConfig_default_instance_;
class CustomCallBackendConfig;
struct CustomCallBackendConfigDefaultTypeInternal;
PROTOBUF_EXPORT extern CustomCallBackendConfigDefaultTypeInternal _CustomCallBackendConfig_default_instance_;
class FusionBackendConfig;
struct FusionBackendConfigDefaultTypeInternal;
PROTOBUF_EXPORT extern FusionBackendConfigDefaultTypeInternal _FusionBackendConfig_default_instance_;
class LlvmKernelOptions;
struct LlvmKernelOptionsDefaultTypeInternal;
PROTOBUF_EXPORT extern LlvmKernelOptionsDefaultTypeInternal _LlvmKernelOptions_default_instance_;
}  // namespace cpu
}  // namespace xla
namespace google {
namespace protobuf {
}  // namespace protobuf
}  // namespace google

namespace xla {
namespace cpu {

// ===================================================================


// -------------------------------------------------------------------

class PROTOBUF_EXPORT LlvmKernelOptions final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:xla.cpu.LlvmKernelOptions) */ {
 public:
  inline LlvmKernelOptions() : LlvmKernelOptions(nullptr) {}
  ~LlvmKernelOptions() PROTOBUF_FINAL;
  template <typename = void>
  explicit PROTOBUF_CONSTEXPR LlvmKernelOptions(
      ::google::protobuf::internal::ConstantInitialized);

  inline LlvmKernelOptions(const LlvmKernelOptions& from) : LlvmKernelOptions(nullptr, from) {}
  inline LlvmKernelOptions(LlvmKernelOptions&& from) noexcept
      : LlvmKernelOptions(nullptr, std::move(from)) {}
  inline LlvmKernelOptions& operator=(const LlvmKernelOptions& from) {
    CopyFrom(from);
    return *this;
  }
  inline LlvmKernelOptions& operator=(LlvmKernelOptions&& from) noexcept {
    if (this == &from) return *this;
    if (GetArena() == from.GetArena()
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetArena() != nullptr
#endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const LlvmKernelOptions& default_instance() {
    return *internal_default_instance();
  }
  static inline const LlvmKernelOptions* internal_default_instance() {
    return reinterpret_cast<const LlvmKernelOptions*>(
        &_LlvmKernelOptions_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 2;
  friend void swap(LlvmKernelOptions& a, LlvmKernelOptions& b) { a.Swap(&b); }
  inline void Swap(LlvmKernelOptions* other) {
    if (other == this) return;
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() != nullptr && GetArena() == other->GetArena()) {
#else   // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() == other->GetArena()) {
#endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(LlvmKernelOptions* other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  LlvmKernelOptions* New(::google::protobuf::Arena* arena = nullptr) const PROTOBUF_FINAL {
    return ::google::protobuf::Message::DefaultConstruct<LlvmKernelOptions>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const LlvmKernelOptions& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const LlvmKernelOptions& from) { LlvmKernelOptions::MergeImpl(*this, from); }

  private:
  static void MergeImpl(
      ::google::protobuf::MessageLite& to_msg,
      const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* _InternalSerialize(
      const MessageLite& msg, ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* arena);
  void SharedDtor();
  void InternalSwap(LlvmKernelOptions* other);
 private:
  friend class ::google::protobuf::internal::AnyMetadata;
  static ::absl::string_view FullMessageName() { return "xla.cpu.LlvmKernelOptions"; }

 protected:
  explicit LlvmKernelOptions(::google::protobuf::Arena* arena);
  LlvmKernelOptions(::google::protobuf::Arena* arena, const LlvmKernelOptions& from);
  LlvmKernelOptions(::google::protobuf::Arena* arena, LlvmKernelOptions&& from) noexcept
      : LlvmKernelOptions(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::Message::ClassData* GetClassData() const PROTOBUF_FINAL;
  static const ::google::protobuf::Message::ClassDataFull _class_data_;

 public:
  ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kSlpVectorizerDisabledFieldNumber = 1,
    kDisableLoopUnrollingFieldNumber = 2,
    kOptimizeForSizeFieldNumber = 3,
  };
  // bool slp_vectorizer_disabled = 1;
  void clear_slp_vectorizer_disabled() ;
  bool slp_vectorizer_disabled() const;
  void set_slp_vectorizer_disabled(bool value);

  private:
  bool _internal_slp_vectorizer_disabled() const;
  void _internal_set_slp_vectorizer_disabled(bool value);

  public:
  // bool disable_loop_unrolling = 2;
  void clear_disable_loop_unrolling() ;
  bool disable_loop_unrolling() const;
  void set_disable_loop_unrolling(bool value);

  private:
  bool _internal_disable_loop_unrolling() const;
  void _internal_set_disable_loop_unrolling(bool value);

  public:
  // bool optimize_for_size = 3;
  void clear_optimize_for_size() ;
  bool optimize_for_size() const;
  void set_optimize_for_size(bool value);

  private:
  bool _internal_optimize_for_size() const;
  void _internal_set_optimize_for_size(bool value);

  public:
  // @@protoc_insertion_point(class_scope:xla.cpu.LlvmKernelOptions)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<
      2, 3, 0,
      0, 2>
      _table_;


  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(
        ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena);
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena, const Impl_& from,
                          const LlvmKernelOptions& from_msg);
    bool slp_vectorizer_disabled_;
    bool disable_loop_unrolling_;
    bool optimize_for_size_;
    mutable ::google::protobuf::internal::CachedSize _cached_size_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_xla_2fservice_2fcpu_2fbackend_5fconfig_2eproto;
};
// -------------------------------------------------------------------

class PROTOBUF_EXPORT CustomCallBackendConfig final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:xla.cpu.CustomCallBackendConfig) */ {
 public:
  inline CustomCallBackendConfig() : CustomCallBackendConfig(nullptr) {}
  ~CustomCallBackendConfig() PROTOBUF_FINAL;
  template <typename = void>
  explicit PROTOBUF_CONSTEXPR CustomCallBackendConfig(
      ::google::protobuf::internal::ConstantInitialized);

  inline CustomCallBackendConfig(const CustomCallBackendConfig& from) : CustomCallBackendConfig(nullptr, from) {}
  inline CustomCallBackendConfig(CustomCallBackendConfig&& from) noexcept
      : CustomCallBackendConfig(nullptr, std::move(from)) {}
  inline CustomCallBackendConfig& operator=(const CustomCallBackendConfig& from) {
    CopyFrom(from);
    return *this;
  }
  inline CustomCallBackendConfig& operator=(CustomCallBackendConfig&& from) noexcept {
    if (this == &from) return *this;
    if (GetArena() == from.GetArena()
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetArena() != nullptr
#endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const CustomCallBackendConfig& default_instance() {
    return *internal_default_instance();
  }
  enum RawBackendConfigOneofCase {
    kOpaque = 1,
    kAttributes = 2,
    RAW_BACKEND_CONFIG_ONEOF_NOT_SET = 0,
  };
  static inline const CustomCallBackendConfig* internal_default_instance() {
    return reinterpret_cast<const CustomCallBackendConfig*>(
        &_CustomCallBackendConfig_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 0;
  friend void swap(CustomCallBackendConfig& a, CustomCallBackendConfig& b) { a.Swap(&b); }
  inline void Swap(CustomCallBackendConfig* other) {
    if (other == this) return;
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() != nullptr && GetArena() == other->GetArena()) {
#else   // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() == other->GetArena()) {
#endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(CustomCallBackendConfig* other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  CustomCallBackendConfig* New(::google::protobuf::Arena* arena = nullptr) const PROTOBUF_FINAL {
    return ::google::protobuf::Message::DefaultConstruct<CustomCallBackendConfig>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const CustomCallBackendConfig& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const CustomCallBackendConfig& from) { CustomCallBackendConfig::MergeImpl(*this, from); }

  private:
  static void MergeImpl(
      ::google::protobuf::MessageLite& to_msg,
      const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* _InternalSerialize(
      const MessageLite& msg, ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* arena);
  void SharedDtor();
  void InternalSwap(CustomCallBackendConfig* other);
 private:
  friend class ::google::protobuf::internal::AnyMetadata;
  static ::absl::string_view FullMessageName() { return "xla.cpu.CustomCallBackendConfig"; }

 protected:
  explicit CustomCallBackendConfig(::google::protobuf::Arena* arena);
  CustomCallBackendConfig(::google::protobuf::Arena* arena, const CustomCallBackendConfig& from);
  CustomCallBackendConfig(::google::protobuf::Arena* arena, CustomCallBackendConfig&& from) noexcept
      : CustomCallBackendConfig(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::Message::ClassData* GetClassData() const PROTOBUF_FINAL;
  static const ::google::protobuf::Message::ClassDataFull _class_data_;

 public:
  ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kOpaqueFieldNumber = 1,
    kAttributesFieldNumber = 2,
  };
  // string opaque = 1;
  bool has_opaque() const;
  void clear_opaque() ;
  const std::string& opaque() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_opaque(Arg_&& arg, Args_... args);
  std::string* mutable_opaque();
  PROTOBUF_NODISCARD std::string* release_opaque();
  void set_allocated_opaque(std::string* value);

  private:
  const std::string& _internal_opaque() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_opaque(
      const std::string& value);
  std::string* _internal_mutable_opaque();

  public:
  // string attributes = 2;
  bool has_attributes() const;
  void clear_attributes() ;
  const std::string& attributes() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_attributes(Arg_&& arg, Args_... args);
  std::string* mutable_attributes();
  PROTOBUF_NODISCARD std::string* release_attributes();
  void set_allocated_attributes(std::string* value);

  private:
  const std::string& _internal_attributes() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_attributes(
      const std::string& value);
  std::string* _internal_mutable_attributes();

  public:
  void clear_raw_backend_config_oneof();
  RawBackendConfigOneofCase raw_backend_config_oneof_case() const;
  // @@protoc_insertion_point(class_scope:xla.cpu.CustomCallBackendConfig)
 private:
  class _Internal;
  void set_has_opaque();
  void set_has_attributes();
  inline bool has_raw_backend_config_oneof() const;
  inline void clear_has_raw_backend_config_oneof();
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<
      0, 2, 0,
      56, 2>
      _table_;


  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(
        ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena);
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena, const Impl_& from,
                          const CustomCallBackendConfig& from_msg);
    union RawBackendConfigOneofUnion {
      constexpr RawBackendConfigOneofUnion() : _constinit_{} {}
      ::google::protobuf::internal::ConstantInitialized _constinit_;
      ::google::protobuf::internal::ArenaStringPtr opaque_;
      ::google::protobuf::internal::ArenaStringPtr attributes_;
    } raw_backend_config_oneof_;
    mutable ::google::protobuf::internal::CachedSize _cached_size_;
    ::uint32_t _oneof_case_[1];
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_xla_2fservice_2fcpu_2fbackend_5fconfig_2eproto;
};
// -------------------------------------------------------------------

class PROTOBUF_EXPORT FusionBackendConfig final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:xla.cpu.FusionBackendConfig) */ {
 public:
  inline FusionBackendConfig() : FusionBackendConfig(nullptr) {}
  ~FusionBackendConfig() PROTOBUF_FINAL;
  template <typename = void>
  explicit PROTOBUF_CONSTEXPR FusionBackendConfig(
      ::google::protobuf::internal::ConstantInitialized);

  inline FusionBackendConfig(const FusionBackendConfig& from) : FusionBackendConfig(nullptr, from) {}
  inline FusionBackendConfig(FusionBackendConfig&& from) noexcept
      : FusionBackendConfig(nullptr, std::move(from)) {}
  inline FusionBackendConfig& operator=(const FusionBackendConfig& from) {
    CopyFrom(from);
    return *this;
  }
  inline FusionBackendConfig& operator=(FusionBackendConfig&& from) noexcept {
    if (this == &from) return *this;
    if (GetArena() == from.GetArena()
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetArena() != nullptr
#endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const FusionBackendConfig& default_instance() {
    return *internal_default_instance();
  }
  enum CustomFusionConfigOneofCase {
    kXnnFusionConfig = 2,
    CUSTOM_FUSION_CONFIG_ONEOF_NOT_SET = 0,
  };
  static inline const FusionBackendConfig* internal_default_instance() {
    return reinterpret_cast<const FusionBackendConfig*>(
        &_FusionBackendConfig_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 1;
  friend void swap(FusionBackendConfig& a, FusionBackendConfig& b) { a.Swap(&b); }
  inline void Swap(FusionBackendConfig* other) {
    if (other == this) return;
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() != nullptr && GetArena() == other->GetArena()) {
#else   // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() == other->GetArena()) {
#endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(FusionBackendConfig* other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  FusionBackendConfig* New(::google::protobuf::Arena* arena = nullptr) const PROTOBUF_FINAL {
    return ::google::protobuf::Message::DefaultConstruct<FusionBackendConfig>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const FusionBackendConfig& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const FusionBackendConfig& from) { FusionBackendConfig::MergeImpl(*this, from); }

  private:
  static void MergeImpl(
      ::google::protobuf::MessageLite& to_msg,
      const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* _InternalSerialize(
      const MessageLite& msg, ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* arena);
  void SharedDtor();
  void InternalSwap(FusionBackendConfig* other);
 private:
  friend class ::google::protobuf::internal::AnyMetadata;
  static ::absl::string_view FullMessageName() { return "xla.cpu.FusionBackendConfig"; }

 protected:
  explicit FusionBackendConfig(::google::protobuf::Arena* arena);
  FusionBackendConfig(::google::protobuf::Arena* arena, const FusionBackendConfig& from);
  FusionBackendConfig(::google::protobuf::Arena* arena, FusionBackendConfig&& from) noexcept
      : FusionBackendConfig(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::Message::ClassData* GetClassData() const PROTOBUF_FINAL;
  static const ::google::protobuf::Message::ClassDataFull _class_data_;

 public:
  ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kKindFieldNumber = 1,
    kXnnFusionConfigFieldNumber = 2,
  };
  // string kind = 1;
  void clear_kind() ;
  const std::string& kind() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_kind(Arg_&& arg, Args_... args);
  std::string* mutable_kind();
  PROTOBUF_NODISCARD std::string* release_kind();
  void set_allocated_kind(std::string* value);

  private:
  const std::string& _internal_kind() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_kind(
      const std::string& value);
  std::string* _internal_mutable_kind();

  public:
  // .xla.cpu.XnnFusionBackendConfig xnn_fusion_config = 2;
  bool has_xnn_fusion_config() const;
  private:
  bool _internal_has_xnn_fusion_config() const;

  public:
  void clear_xnn_fusion_config() ;
  const ::xla::cpu::XnnFusionBackendConfig& xnn_fusion_config() const;
  PROTOBUF_NODISCARD ::xla::cpu::XnnFusionBackendConfig* release_xnn_fusion_config();
  ::xla::cpu::XnnFusionBackendConfig* mutable_xnn_fusion_config();
  void set_allocated_xnn_fusion_config(::xla::cpu::XnnFusionBackendConfig* value);
  void unsafe_arena_set_allocated_xnn_fusion_config(::xla::cpu::XnnFusionBackendConfig* value);
  ::xla::cpu::XnnFusionBackendConfig* unsafe_arena_release_xnn_fusion_config();

  private:
  const ::xla::cpu::XnnFusionBackendConfig& _internal_xnn_fusion_config() const;
  ::xla::cpu::XnnFusionBackendConfig* _internal_mutable_xnn_fusion_config();

  public:
  void clear_custom_fusion_config_oneof();
  CustomFusionConfigOneofCase custom_fusion_config_oneof_case() const;
  // @@protoc_insertion_point(class_scope:xla.cpu.FusionBackendConfig)
 private:
  class _Internal;
  void set_has_xnn_fusion_config();
  inline bool has_custom_fusion_config_oneof() const;
  inline void clear_has_custom_fusion_config_oneof();
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<
      0, 2, 1,
      40, 2>
      _table_;


  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(
        ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena);
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena, const Impl_& from,
                          const FusionBackendConfig& from_msg);
    ::google::protobuf::internal::ArenaStringPtr kind_;
    union CustomFusionConfigOneofUnion {
      constexpr CustomFusionConfigOneofUnion() : _constinit_{} {}
      ::google::protobuf::internal::ConstantInitialized _constinit_;
      ::xla::cpu::XnnFusionBackendConfig* xnn_fusion_config_;
    } custom_fusion_config_oneof_;
    mutable ::google::protobuf::internal::CachedSize _cached_size_;
    ::uint32_t _oneof_case_[1];
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_xla_2fservice_2fcpu_2fbackend_5fconfig_2eproto;
};
// -------------------------------------------------------------------

class PROTOBUF_EXPORT BackendConfig final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:xla.cpu.BackendConfig) */ {
 public:
  inline BackendConfig() : BackendConfig(nullptr) {}
  ~BackendConfig() PROTOBUF_FINAL;
  template <typename = void>
  explicit PROTOBUF_CONSTEXPR BackendConfig(
      ::google::protobuf::internal::ConstantInitialized);

  inline BackendConfig(const BackendConfig& from) : BackendConfig(nullptr, from) {}
  inline BackendConfig(BackendConfig&& from) noexcept
      : BackendConfig(nullptr, std::move(from)) {}
  inline BackendConfig& operator=(const BackendConfig& from) {
    CopyFrom(from);
    return *this;
  }
  inline BackendConfig& operator=(BackendConfig&& from) noexcept {
    if (this == &from) return *this;
    if (GetArena() == from.GetArena()
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetArena() != nullptr
#endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const BackendConfig& default_instance() {
    return *internal_default_instance();
  }
  enum BackendConfigOneofCase {
    kOnednnMatmulConfig = 2,
    kOnednnLayerNormConfig = 3,
    kOnednnSoftmaxConfig = 4,
    kOnednnConvConfig = 5,
    kCustomCallConfig = 6,
    kFusionConfig = 7,
    kLlvmKernelOptions = 8,
    BACKEND_CONFIG_ONEOF_NOT_SET = 0,
  };
  static inline const BackendConfig* internal_default_instance() {
    return reinterpret_cast<const BackendConfig*>(
        &_BackendConfig_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 3;
  friend void swap(BackendConfig& a, BackendConfig& b) { a.Swap(&b); }
  inline void Swap(BackendConfig* other) {
    if (other == this) return;
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() != nullptr && GetArena() == other->GetArena()) {
#else   // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() == other->GetArena()) {
#endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(BackendConfig* other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  BackendConfig* New(::google::protobuf::Arena* arena = nullptr) const PROTOBUF_FINAL {
    return ::google::protobuf::Message::DefaultConstruct<BackendConfig>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const BackendConfig& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const BackendConfig& from) { BackendConfig::MergeImpl(*this, from); }

  private:
  static void MergeImpl(
      ::google::protobuf::MessageLite& to_msg,
      const ::google::protobuf::MessageLite& from_msg);

  public:
  bool IsInitialized() const {
    return true;
  }
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
  #if defined(PROTOBUF_CUSTOM_VTABLE)
  private:
  static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
  static ::uint8_t* _InternalSerialize(
      const MessageLite& msg, ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream);

  public:
  ::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const {
    return _InternalSerialize(*this, target, stream);
  }
  #else   // PROTOBUF_CUSTOM_VTABLE
  ::size_t ByteSizeLong() const final;
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
  #endif  // PROTOBUF_CUSTOM_VTABLE
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* arena);
  void SharedDtor();
  void InternalSwap(BackendConfig* other);
 private:
  friend class ::google::protobuf::internal::AnyMetadata;
  static ::absl::string_view FullMessageName() { return "xla.cpu.BackendConfig"; }

 protected:
  explicit BackendConfig(::google::protobuf::Arena* arena);
  BackendConfig(::google::protobuf::Arena* arena, const BackendConfig& from);
  BackendConfig(::google::protobuf::Arena* arena, BackendConfig&& from) noexcept
      : BackendConfig(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::Message::ClassData* GetClassData() const PROTOBUF_FINAL;
  static const ::google::protobuf::Message::ClassDataFull _class_data_;

 public:
  ::google::protobuf::Metadata GetMetadata() const;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kOuterDimensionPartitionsFieldNumber = 1,
    kOnednnMatmulConfigFieldNumber = 2,
    kOnednnLayerNormConfigFieldNumber = 3,
    kOnednnSoftmaxConfigFieldNumber = 4,
    kOnednnConvConfigFieldNumber = 5,
    kCustomCallConfigFieldNumber = 6,
    kFusionConfigFieldNumber = 7,
    kLlvmKernelOptionsFieldNumber = 8,
  };
  // repeated int64 outer_dimension_partitions = 1;
  int outer_dimension_partitions_size() const;
  private:
  int _internal_outer_dimension_partitions_size() const;

  public:
  void clear_outer_dimension_partitions() ;
  ::int64_t outer_dimension_partitions(int index) const;
  void set_outer_dimension_partitions(int index, ::int64_t value);
  void add_outer_dimension_partitions(::int64_t value);
  const ::google::protobuf::RepeatedField<::int64_t>& outer_dimension_partitions() const;
  ::google::protobuf::RepeatedField<::int64_t>* mutable_outer_dimension_partitions();

  private:
  const ::google::protobuf::RepeatedField<::int64_t>& _internal_outer_dimension_partitions() const;
  ::google::protobuf::RepeatedField<::int64_t>* _internal_mutable_outer_dimension_partitions();

  public:
  // .xla.cpu.OneDnnMatMulConfig onednn_matmul_config = 2;
  bool has_onednn_matmul_config() const;
  private:
  bool _internal_has_onednn_matmul_config() const;

  public:
  void clear_onednn_matmul_config() ;
  const ::xla::cpu::OneDnnMatMulConfig& onednn_matmul_config() const;
  PROTOBUF_NODISCARD ::xla::cpu::OneDnnMatMulConfig* release_onednn_matmul_config();
  ::xla::cpu::OneDnnMatMulConfig* mutable_onednn_matmul_config();
  void set_allocated_onednn_matmul_config(::xla::cpu::OneDnnMatMulConfig* value);
  void unsafe_arena_set_allocated_onednn_matmul_config(::xla::cpu::OneDnnMatMulConfig* value);
  ::xla::cpu::OneDnnMatMulConfig* unsafe_arena_release_onednn_matmul_config();

  private:
  const ::xla::cpu::OneDnnMatMulConfig& _internal_onednn_matmul_config() const;
  ::xla::cpu::OneDnnMatMulConfig* _internal_mutable_onednn_matmul_config();

  public:
  // .xla.cpu.OneDnnNormConfig onednn_layer_norm_config = 3;
  bool has_onednn_layer_norm_config() const;
  private:
  bool _internal_has_onednn_layer_norm_config() const;

  public:
  void clear_onednn_layer_norm_config() ;
  const ::xla::cpu::OneDnnNormConfig& onednn_layer_norm_config() const;
  PROTOBUF_NODISCARD ::xla::cpu::OneDnnNormConfig* release_onednn_layer_norm_config();
  ::xla::cpu::OneDnnNormConfig* mutable_onednn_layer_norm_config();
  void set_allocated_onednn_layer_norm_config(::xla::cpu::OneDnnNormConfig* value);
  void unsafe_arena_set_allocated_onednn_layer_norm_config(::xla::cpu::OneDnnNormConfig* value);
  ::xla::cpu::OneDnnNormConfig* unsafe_arena_release_onednn_layer_norm_config();

  private:
  const ::xla::cpu::OneDnnNormConfig& _internal_onednn_layer_norm_config() const;
  ::xla::cpu::OneDnnNormConfig* _internal_mutable_onednn_layer_norm_config();

  public:
  // .xla.cpu.OneDnnSoftmaxConfig onednn_softmax_config = 4;
  bool has_onednn_softmax_config() const;
  private:
  bool _internal_has_onednn_softmax_config() const;

  public:
  void clear_onednn_softmax_config() ;
  const ::xla::cpu::OneDnnSoftmaxConfig& onednn_softmax_config() const;
  PROTOBUF_NODISCARD ::xla::cpu::OneDnnSoftmaxConfig* release_onednn_softmax_config();
  ::xla::cpu::OneDnnSoftmaxConfig* mutable_onednn_softmax_config();
  void set_allocated_onednn_softmax_config(::xla::cpu::OneDnnSoftmaxConfig* value);
  void unsafe_arena_set_allocated_onednn_softmax_config(::xla::cpu::OneDnnSoftmaxConfig* value);
  ::xla::cpu::OneDnnSoftmaxConfig* unsafe_arena_release_onednn_softmax_config();

  private:
  const ::xla::cpu::OneDnnSoftmaxConfig& _internal_onednn_softmax_config() const;
  ::xla::cpu::OneDnnSoftmaxConfig* _internal_mutable_onednn_softmax_config();

  public:
  // .xla.cpu.OneDnnConvolutionConfig onednn_conv_config = 5;
  bool has_onednn_conv_config() const;
  private:
  bool _internal_has_onednn_conv_config() const;

  public:
  void clear_onednn_conv_config() ;
  const ::xla::cpu::OneDnnConvolutionConfig& onednn_conv_config() const;
  PROTOBUF_NODISCARD ::xla::cpu::OneDnnConvolutionConfig* release_onednn_conv_config();
  ::xla::cpu::OneDnnConvolutionConfig* mutable_onednn_conv_config();
  void set_allocated_onednn_conv_config(::xla::cpu::OneDnnConvolutionConfig* value);
  void unsafe_arena_set_allocated_onednn_conv_config(::xla::cpu::OneDnnConvolutionConfig* value);
  ::xla::cpu::OneDnnConvolutionConfig* unsafe_arena_release_onednn_conv_config();

  private:
  const ::xla::cpu::OneDnnConvolutionConfig& _internal_onednn_conv_config() const;
  ::xla::cpu::OneDnnConvolutionConfig* _internal_mutable_onednn_conv_config();

  public:
  // .xla.cpu.CustomCallBackendConfig custom_call_config = 6;
  bool has_custom_call_config() const;
  private:
  bool _internal_has_custom_call_config() const;

  public:
  void clear_custom_call_config() ;
  const ::xla::cpu::CustomCallBackendConfig& custom_call_config() const;
  PROTOBUF_NODISCARD ::xla::cpu::CustomCallBackendConfig* release_custom_call_config();
  ::xla::cpu::CustomCallBackendConfig* mutable_custom_call_config();
  void set_allocated_custom_call_config(::xla::cpu::CustomCallBackendConfig* value);
  void unsafe_arena_set_allocated_custom_call_config(::xla::cpu::CustomCallBackendConfig* value);
  ::xla::cpu::CustomCallBackendConfig* unsafe_arena_release_custom_call_config();

  private:
  const ::xla::cpu::CustomCallBackendConfig& _internal_custom_call_config() const;
  ::xla::cpu::CustomCallBackendConfig* _internal_mutable_custom_call_config();

  public:
  // .xla.cpu.FusionBackendConfig fusion_config = 7;
  bool has_fusion_config() const;
  private:
  bool _internal_has_fusion_config() const;

  public:
  void clear_fusion_config() ;
  const ::xla::cpu::FusionBackendConfig& fusion_config() const;
  PROTOBUF_NODISCARD ::xla::cpu::FusionBackendConfig* release_fusion_config();
  ::xla::cpu::FusionBackendConfig* mutable_fusion_config();
  void set_allocated_fusion_config(::xla::cpu::FusionBackendConfig* value);
  void unsafe_arena_set_allocated_fusion_config(::xla::cpu::FusionBackendConfig* value);
  ::xla::cpu::FusionBackendConfig* unsafe_arena_release_fusion_config();

  private:
  const ::xla::cpu::FusionBackendConfig& _internal_fusion_config() const;
  ::xla::cpu::FusionBackendConfig* _internal_mutable_fusion_config();

  public:
  // .xla.cpu.LlvmKernelOptions llvm_kernel_options = 8;
  bool has_llvm_kernel_options() const;
  private:
  bool _internal_has_llvm_kernel_options() const;

  public:
  void clear_llvm_kernel_options() ;
  const ::xla::cpu::LlvmKernelOptions& llvm_kernel_options() const;
  PROTOBUF_NODISCARD ::xla::cpu::LlvmKernelOptions* release_llvm_kernel_options();
  ::xla::cpu::LlvmKernelOptions* mutable_llvm_kernel_options();
  void set_allocated_llvm_kernel_options(::xla::cpu::LlvmKernelOptions* value);
  void unsafe_arena_set_allocated_llvm_kernel_options(::xla::cpu::LlvmKernelOptions* value);
  ::xla::cpu::LlvmKernelOptions* unsafe_arena_release_llvm_kernel_options();

  private:
  const ::xla::cpu::LlvmKernelOptions& _internal_llvm_kernel_options() const;
  ::xla::cpu::LlvmKernelOptions* _internal_mutable_llvm_kernel_options();

  public:
  void clear_backend_config_oneof();
  BackendConfigOneofCase backend_config_oneof_case() const;
  // @@protoc_insertion_point(class_scope:xla.cpu.BackendConfig)
 private:
  class _Internal;
  void set_has_onednn_matmul_config();
  void set_has_onednn_layer_norm_config();
  void set_has_onednn_softmax_config();
  void set_has_onednn_conv_config();
  void set_has_custom_call_config();
  void set_has_fusion_config();
  void set_has_llvm_kernel_options();
  inline bool has_backend_config_oneof() const;
  inline void clear_has_backend_config_oneof();
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<
      0, 8, 7,
      0, 2>
      _table_;


  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(
        ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena);
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena, const Impl_& from,
                          const BackendConfig& from_msg);
    ::google::protobuf::RepeatedField<::int64_t> outer_dimension_partitions_;
    mutable ::google::protobuf::internal::CachedSize _outer_dimension_partitions_cached_byte_size_;
    union BackendConfigOneofUnion {
      constexpr BackendConfigOneofUnion() : _constinit_{} {}
      ::google::protobuf::internal::ConstantInitialized _constinit_;
      ::xla::cpu::OneDnnMatMulConfig* onednn_matmul_config_;
      ::xla::cpu::OneDnnNormConfig* onednn_layer_norm_config_;
      ::xla::cpu::OneDnnSoftmaxConfig* onednn_softmax_config_;
      ::xla::cpu::OneDnnConvolutionConfig* onednn_conv_config_;
      ::xla::cpu::CustomCallBackendConfig* custom_call_config_;
      ::xla::cpu::FusionBackendConfig* fusion_config_;
      ::xla::cpu::LlvmKernelOptions* llvm_kernel_options_;
    } backend_config_oneof_;
    mutable ::google::protobuf::internal::CachedSize _cached_size_;
    ::uint32_t _oneof_case_[1];
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_xla_2fservice_2fcpu_2fbackend_5fconfig_2eproto;
};

// ===================================================================




// ===================================================================


#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif  // __GNUC__
// -------------------------------------------------------------------

// CustomCallBackendConfig

// string opaque = 1;
inline bool CustomCallBackendConfig::has_opaque() const {
  return raw_backend_config_oneof_case() == kOpaque;
}
inline void CustomCallBackendConfig::set_has_opaque() {
  _impl_._oneof_case_[0] = kOpaque;
}
inline void CustomCallBackendConfig::clear_opaque() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (raw_backend_config_oneof_case() == kOpaque) {
    _impl_.raw_backend_config_oneof_.opaque_.Destroy();
    clear_has_raw_backend_config_oneof();
  }
}
inline const std::string& CustomCallBackendConfig::opaque() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:xla.cpu.CustomCallBackendConfig.opaque)
  return _internal_opaque();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void CustomCallBackendConfig::set_opaque(Arg_&& arg,
                                                     Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (raw_backend_config_oneof_case() != kOpaque) {
    clear_raw_backend_config_oneof();

    set_has_opaque();
    _impl_.raw_backend_config_oneof_.opaque_.InitDefault();
  }
  _impl_.raw_backend_config_oneof_.opaque_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:xla.cpu.CustomCallBackendConfig.opaque)
}
inline std::string* CustomCallBackendConfig::mutable_opaque() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_opaque();
  // @@protoc_insertion_point(field_mutable:xla.cpu.CustomCallBackendConfig.opaque)
  return _s;
}
inline const std::string& CustomCallBackendConfig::_internal_opaque() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  if (raw_backend_config_oneof_case() != kOpaque) {
    return ::google::protobuf::internal::GetEmptyStringAlreadyInited();
  }
  return _impl_.raw_backend_config_oneof_.opaque_.Get();
}
inline void CustomCallBackendConfig::_internal_set_opaque(const std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (raw_backend_config_oneof_case() != kOpaque) {
    clear_raw_backend_config_oneof();

    set_has_opaque();
    _impl_.raw_backend_config_oneof_.opaque_.InitDefault();
  }
  _impl_.raw_backend_config_oneof_.opaque_.Set(value, GetArena());
}
inline std::string* CustomCallBackendConfig::_internal_mutable_opaque() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (raw_backend_config_oneof_case() != kOpaque) {
    clear_raw_backend_config_oneof();

    set_has_opaque();
    _impl_.raw_backend_config_oneof_.opaque_.InitDefault();
  }
  return _impl_.raw_backend_config_oneof_.opaque_.Mutable( GetArena());
}
inline std::string* CustomCallBackendConfig::release_opaque() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:xla.cpu.CustomCallBackendConfig.opaque)
  if (raw_backend_config_oneof_case() != kOpaque) {
    return nullptr;
  }
  clear_has_raw_backend_config_oneof();
  return _impl_.raw_backend_config_oneof_.opaque_.Release();
}
inline void CustomCallBackendConfig::set_allocated_opaque(std::string* value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (has_raw_backend_config_oneof()) {
    clear_raw_backend_config_oneof();
  }
  if (value != nullptr) {
    set_has_opaque();
    _impl_.raw_backend_config_oneof_.opaque_.InitAllocated(value, GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:xla.cpu.CustomCallBackendConfig.opaque)
}

// string attributes = 2;
inline bool CustomCallBackendConfig::has_attributes() const {
  return raw_backend_config_oneof_case() == kAttributes;
}
inline void CustomCallBackendConfig::set_has_attributes() {
  _impl_._oneof_case_[0] = kAttributes;
}
inline void CustomCallBackendConfig::clear_attributes() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (raw_backend_config_oneof_case() == kAttributes) {
    _impl_.raw_backend_config_oneof_.attributes_.Destroy();
    clear_has_raw_backend_config_oneof();
  }
}
inline const std::string& CustomCallBackendConfig::attributes() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:xla.cpu.CustomCallBackendConfig.attributes)
  return _internal_attributes();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void CustomCallBackendConfig::set_attributes(Arg_&& arg,
                                                     Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (raw_backend_config_oneof_case() != kAttributes) {
    clear_raw_backend_config_oneof();

    set_has_attributes();
    _impl_.raw_backend_config_oneof_.attributes_.InitDefault();
  }
  _impl_.raw_backend_config_oneof_.attributes_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:xla.cpu.CustomCallBackendConfig.attributes)
}
inline std::string* CustomCallBackendConfig::mutable_attributes() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_attributes();
  // @@protoc_insertion_point(field_mutable:xla.cpu.CustomCallBackendConfig.attributes)
  return _s;
}
inline const std::string& CustomCallBackendConfig::_internal_attributes() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  if (raw_backend_config_oneof_case() != kAttributes) {
    return ::google::protobuf::internal::GetEmptyStringAlreadyInited();
  }
  return _impl_.raw_backend_config_oneof_.attributes_.Get();
}
inline void CustomCallBackendConfig::_internal_set_attributes(const std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (raw_backend_config_oneof_case() != kAttributes) {
    clear_raw_backend_config_oneof();

    set_has_attributes();
    _impl_.raw_backend_config_oneof_.attributes_.InitDefault();
  }
  _impl_.raw_backend_config_oneof_.attributes_.Set(value, GetArena());
}
inline std::string* CustomCallBackendConfig::_internal_mutable_attributes() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (raw_backend_config_oneof_case() != kAttributes) {
    clear_raw_backend_config_oneof();

    set_has_attributes();
    _impl_.raw_backend_config_oneof_.attributes_.InitDefault();
  }
  return _impl_.raw_backend_config_oneof_.attributes_.Mutable( GetArena());
}
inline std::string* CustomCallBackendConfig::release_attributes() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:xla.cpu.CustomCallBackendConfig.attributes)
  if (raw_backend_config_oneof_case() != kAttributes) {
    return nullptr;
  }
  clear_has_raw_backend_config_oneof();
  return _impl_.raw_backend_config_oneof_.attributes_.Release();
}
inline void CustomCallBackendConfig::set_allocated_attributes(std::string* value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (has_raw_backend_config_oneof()) {
    clear_raw_backend_config_oneof();
  }
  if (value != nullptr) {
    set_has_attributes();
    _impl_.raw_backend_config_oneof_.attributes_.InitAllocated(value, GetArena());
  }
  // @@protoc_insertion_point(field_set_allocated:xla.cpu.CustomCallBackendConfig.attributes)
}

inline bool CustomCallBackendConfig::has_raw_backend_config_oneof() const {
  return raw_backend_config_oneof_case() != RAW_BACKEND_CONFIG_ONEOF_NOT_SET;
}
inline void CustomCallBackendConfig::clear_has_raw_backend_config_oneof() {
  _impl_._oneof_case_[0] = RAW_BACKEND_CONFIG_ONEOF_NOT_SET;
}
inline CustomCallBackendConfig::RawBackendConfigOneofCase CustomCallBackendConfig::raw_backend_config_oneof_case() const {
  return CustomCallBackendConfig::RawBackendConfigOneofCase(_impl_._oneof_case_[0]);
}
// -------------------------------------------------------------------

// FusionBackendConfig

// string kind = 1;
inline void FusionBackendConfig::clear_kind() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kind_.ClearToEmpty();
}
inline const std::string& FusionBackendConfig::kind() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:xla.cpu.FusionBackendConfig.kind)
  return _internal_kind();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void FusionBackendConfig::set_kind(Arg_&& arg,
                                                     Args_... args) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kind_.Set(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:xla.cpu.FusionBackendConfig.kind)
}
inline std::string* FusionBackendConfig::mutable_kind() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_kind();
  // @@protoc_insertion_point(field_mutable:xla.cpu.FusionBackendConfig.kind)
  return _s;
}
inline const std::string& FusionBackendConfig::_internal_kind() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.kind_.Get();
}
inline void FusionBackendConfig::_internal_set_kind(const std::string& value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kind_.Set(value, GetArena());
}
inline std::string* FusionBackendConfig::_internal_mutable_kind() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _impl_.kind_.Mutable( GetArena());
}
inline std::string* FusionBackendConfig::release_kind() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  // @@protoc_insertion_point(field_release:xla.cpu.FusionBackendConfig.kind)
  return _impl_.kind_.Release();
}
inline void FusionBackendConfig::set_allocated_kind(std::string* value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.kind_.SetAllocated(value, GetArena());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        if (_impl_.kind_.IsDefault()) {
          _impl_.kind_.Set("", GetArena());
        }
  #endif  // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:xla.cpu.FusionBackendConfig.kind)
}

// .xla.cpu.XnnFusionBackendConfig xnn_fusion_config = 2;
inline bool FusionBackendConfig::has_xnn_fusion_config() const {
  return custom_fusion_config_oneof_case() == kXnnFusionConfig;
}
inline bool FusionBackendConfig::_internal_has_xnn_fusion_config() const {
  return custom_fusion_config_oneof_case() == kXnnFusionConfig;
}
inline void FusionBackendConfig::set_has_xnn_fusion_config() {
  _impl_._oneof_case_[0] = kXnnFusionConfig;
}
inline ::xla::cpu::XnnFusionBackendConfig* FusionBackendConfig::release_xnn_fusion_config() {
  // @@protoc_insertion_point(field_release:xla.cpu.FusionBackendConfig.xnn_fusion_config)
  if (custom_fusion_config_oneof_case() == kXnnFusionConfig) {
    clear_has_custom_fusion_config_oneof();
    auto* temp = _impl_.custom_fusion_config_oneof_.xnn_fusion_config_;
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.custom_fusion_config_oneof_.xnn_fusion_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::xla::cpu::XnnFusionBackendConfig& FusionBackendConfig::_internal_xnn_fusion_config() const {
  return custom_fusion_config_oneof_case() == kXnnFusionConfig ? *_impl_.custom_fusion_config_oneof_.xnn_fusion_config_ : reinterpret_cast<::xla::cpu::XnnFusionBackendConfig&>(::xla::cpu::_XnnFusionBackendConfig_default_instance_);
}
inline const ::xla::cpu::XnnFusionBackendConfig& FusionBackendConfig::xnn_fusion_config() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:xla.cpu.FusionBackendConfig.xnn_fusion_config)
  return _internal_xnn_fusion_config();
}
inline ::xla::cpu::XnnFusionBackendConfig* FusionBackendConfig::unsafe_arena_release_xnn_fusion_config() {
  // @@protoc_insertion_point(field_unsafe_arena_release:xla.cpu.FusionBackendConfig.xnn_fusion_config)
  if (custom_fusion_config_oneof_case() == kXnnFusionConfig) {
    clear_has_custom_fusion_config_oneof();
    auto* temp = _impl_.custom_fusion_config_oneof_.xnn_fusion_config_;
    _impl_.custom_fusion_config_oneof_.xnn_fusion_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void FusionBackendConfig::unsafe_arena_set_allocated_xnn_fusion_config(::xla::cpu::XnnFusionBackendConfig* value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_custom_fusion_config_oneof();
  if (value) {
    set_has_xnn_fusion_config();
    _impl_.custom_fusion_config_oneof_.xnn_fusion_config_ = value;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:xla.cpu.FusionBackendConfig.xnn_fusion_config)
}
inline ::xla::cpu::XnnFusionBackendConfig* FusionBackendConfig::_internal_mutable_xnn_fusion_config() {
  if (custom_fusion_config_oneof_case() != kXnnFusionConfig) {
    clear_custom_fusion_config_oneof();
    set_has_xnn_fusion_config();
    _impl_.custom_fusion_config_oneof_.xnn_fusion_config_ =
        ::google::protobuf::Message::DefaultConstruct<::xla::cpu::XnnFusionBackendConfig>(GetArena());
  }
  return _impl_.custom_fusion_config_oneof_.xnn_fusion_config_;
}
inline ::xla::cpu::XnnFusionBackendConfig* FusionBackendConfig::mutable_xnn_fusion_config() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::xla::cpu::XnnFusionBackendConfig* _msg = _internal_mutable_xnn_fusion_config();
  // @@protoc_insertion_point(field_mutable:xla.cpu.FusionBackendConfig.xnn_fusion_config)
  return _msg;
}

inline bool FusionBackendConfig::has_custom_fusion_config_oneof() const {
  return custom_fusion_config_oneof_case() != CUSTOM_FUSION_CONFIG_ONEOF_NOT_SET;
}
inline void FusionBackendConfig::clear_has_custom_fusion_config_oneof() {
  _impl_._oneof_case_[0] = CUSTOM_FUSION_CONFIG_ONEOF_NOT_SET;
}
inline FusionBackendConfig::CustomFusionConfigOneofCase FusionBackendConfig::custom_fusion_config_oneof_case() const {
  return FusionBackendConfig::CustomFusionConfigOneofCase(_impl_._oneof_case_[0]);
}
// -------------------------------------------------------------------

// LlvmKernelOptions

// bool slp_vectorizer_disabled = 1;
inline void LlvmKernelOptions::clear_slp_vectorizer_disabled() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.slp_vectorizer_disabled_ = false;
}
inline bool LlvmKernelOptions::slp_vectorizer_disabled() const {
  // @@protoc_insertion_point(field_get:xla.cpu.LlvmKernelOptions.slp_vectorizer_disabled)
  return _internal_slp_vectorizer_disabled();
}
inline void LlvmKernelOptions::set_slp_vectorizer_disabled(bool value) {
  _internal_set_slp_vectorizer_disabled(value);
  // @@protoc_insertion_point(field_set:xla.cpu.LlvmKernelOptions.slp_vectorizer_disabled)
}
inline bool LlvmKernelOptions::_internal_slp_vectorizer_disabled() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.slp_vectorizer_disabled_;
}
inline void LlvmKernelOptions::_internal_set_slp_vectorizer_disabled(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.slp_vectorizer_disabled_ = value;
}

// bool disable_loop_unrolling = 2;
inline void LlvmKernelOptions::clear_disable_loop_unrolling() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.disable_loop_unrolling_ = false;
}
inline bool LlvmKernelOptions::disable_loop_unrolling() const {
  // @@protoc_insertion_point(field_get:xla.cpu.LlvmKernelOptions.disable_loop_unrolling)
  return _internal_disable_loop_unrolling();
}
inline void LlvmKernelOptions::set_disable_loop_unrolling(bool value) {
  _internal_set_disable_loop_unrolling(value);
  // @@protoc_insertion_point(field_set:xla.cpu.LlvmKernelOptions.disable_loop_unrolling)
}
inline bool LlvmKernelOptions::_internal_disable_loop_unrolling() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.disable_loop_unrolling_;
}
inline void LlvmKernelOptions::_internal_set_disable_loop_unrolling(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.disable_loop_unrolling_ = value;
}

// bool optimize_for_size = 3;
inline void LlvmKernelOptions::clear_optimize_for_size() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.optimize_for_size_ = false;
}
inline bool LlvmKernelOptions::optimize_for_size() const {
  // @@protoc_insertion_point(field_get:xla.cpu.LlvmKernelOptions.optimize_for_size)
  return _internal_optimize_for_size();
}
inline void LlvmKernelOptions::set_optimize_for_size(bool value) {
  _internal_set_optimize_for_size(value);
  // @@protoc_insertion_point(field_set:xla.cpu.LlvmKernelOptions.optimize_for_size)
}
inline bool LlvmKernelOptions::_internal_optimize_for_size() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.optimize_for_size_;
}
inline void LlvmKernelOptions::_internal_set_optimize_for_size(bool value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.optimize_for_size_ = value;
}

// -------------------------------------------------------------------

// BackendConfig

// repeated int64 outer_dimension_partitions = 1;
inline int BackendConfig::_internal_outer_dimension_partitions_size() const {
  return _internal_outer_dimension_partitions().size();
}
inline int BackendConfig::outer_dimension_partitions_size() const {
  return _internal_outer_dimension_partitions_size();
}
inline void BackendConfig::clear_outer_dimension_partitions() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _impl_.outer_dimension_partitions_.Clear();
}
inline ::int64_t BackendConfig::outer_dimension_partitions(int index) const {
  // @@protoc_insertion_point(field_get:xla.cpu.BackendConfig.outer_dimension_partitions)
  return _internal_outer_dimension_partitions().Get(index);
}
inline void BackendConfig::set_outer_dimension_partitions(int index, ::int64_t value) {
  _internal_mutable_outer_dimension_partitions()->Set(index, value);
  // @@protoc_insertion_point(field_set:xla.cpu.BackendConfig.outer_dimension_partitions)
}
inline void BackendConfig::add_outer_dimension_partitions(::int64_t value) {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  _internal_mutable_outer_dimension_partitions()->Add(value);
  // @@protoc_insertion_point(field_add:xla.cpu.BackendConfig.outer_dimension_partitions)
}
inline const ::google::protobuf::RepeatedField<::int64_t>& BackendConfig::outer_dimension_partitions() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_list:xla.cpu.BackendConfig.outer_dimension_partitions)
  return _internal_outer_dimension_partitions();
}
inline ::google::protobuf::RepeatedField<::int64_t>* BackendConfig::mutable_outer_dimension_partitions()
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_mutable_list:xla.cpu.BackendConfig.outer_dimension_partitions)
  ::google::protobuf::internal::TSanWrite(&_impl_);
  return _internal_mutable_outer_dimension_partitions();
}
inline const ::google::protobuf::RepeatedField<::int64_t>&
BackendConfig::_internal_outer_dimension_partitions() const {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return _impl_.outer_dimension_partitions_;
}
inline ::google::protobuf::RepeatedField<::int64_t>* BackendConfig::_internal_mutable_outer_dimension_partitions() {
  ::google::protobuf::internal::TSanRead(&_impl_);
  return &_impl_.outer_dimension_partitions_;
}

// .xla.cpu.OneDnnMatMulConfig onednn_matmul_config = 2;
inline bool BackendConfig::has_onednn_matmul_config() const {
  return backend_config_oneof_case() == kOnednnMatmulConfig;
}
inline bool BackendConfig::_internal_has_onednn_matmul_config() const {
  return backend_config_oneof_case() == kOnednnMatmulConfig;
}
inline void BackendConfig::set_has_onednn_matmul_config() {
  _impl_._oneof_case_[0] = kOnednnMatmulConfig;
}
inline ::xla::cpu::OneDnnMatMulConfig* BackendConfig::release_onednn_matmul_config() {
  // @@protoc_insertion_point(field_release:xla.cpu.BackendConfig.onednn_matmul_config)
  if (backend_config_oneof_case() == kOnednnMatmulConfig) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.onednn_matmul_config_;
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.backend_config_oneof_.onednn_matmul_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::xla::cpu::OneDnnMatMulConfig& BackendConfig::_internal_onednn_matmul_config() const {
  return backend_config_oneof_case() == kOnednnMatmulConfig ? *_impl_.backend_config_oneof_.onednn_matmul_config_ : reinterpret_cast<::xla::cpu::OneDnnMatMulConfig&>(::xla::cpu::_OneDnnMatMulConfig_default_instance_);
}
inline const ::xla::cpu::OneDnnMatMulConfig& BackendConfig::onednn_matmul_config() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:xla.cpu.BackendConfig.onednn_matmul_config)
  return _internal_onednn_matmul_config();
}
inline ::xla::cpu::OneDnnMatMulConfig* BackendConfig::unsafe_arena_release_onednn_matmul_config() {
  // @@protoc_insertion_point(field_unsafe_arena_release:xla.cpu.BackendConfig.onednn_matmul_config)
  if (backend_config_oneof_case() == kOnednnMatmulConfig) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.onednn_matmul_config_;
    _impl_.backend_config_oneof_.onednn_matmul_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void BackendConfig::unsafe_arena_set_allocated_onednn_matmul_config(::xla::cpu::OneDnnMatMulConfig* value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_backend_config_oneof();
  if (value) {
    set_has_onednn_matmul_config();
    _impl_.backend_config_oneof_.onednn_matmul_config_ = value;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:xla.cpu.BackendConfig.onednn_matmul_config)
}
inline ::xla::cpu::OneDnnMatMulConfig* BackendConfig::_internal_mutable_onednn_matmul_config() {
  if (backend_config_oneof_case() != kOnednnMatmulConfig) {
    clear_backend_config_oneof();
    set_has_onednn_matmul_config();
    _impl_.backend_config_oneof_.onednn_matmul_config_ =
        ::google::protobuf::Message::DefaultConstruct<::xla::cpu::OneDnnMatMulConfig>(GetArena());
  }
  return _impl_.backend_config_oneof_.onednn_matmul_config_;
}
inline ::xla::cpu::OneDnnMatMulConfig* BackendConfig::mutable_onednn_matmul_config() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::xla::cpu::OneDnnMatMulConfig* _msg = _internal_mutable_onednn_matmul_config();
  // @@protoc_insertion_point(field_mutable:xla.cpu.BackendConfig.onednn_matmul_config)
  return _msg;
}

// .xla.cpu.OneDnnNormConfig onednn_layer_norm_config = 3;
inline bool BackendConfig::has_onednn_layer_norm_config() const {
  return backend_config_oneof_case() == kOnednnLayerNormConfig;
}
inline bool BackendConfig::_internal_has_onednn_layer_norm_config() const {
  return backend_config_oneof_case() == kOnednnLayerNormConfig;
}
inline void BackendConfig::set_has_onednn_layer_norm_config() {
  _impl_._oneof_case_[0] = kOnednnLayerNormConfig;
}
inline ::xla::cpu::OneDnnNormConfig* BackendConfig::release_onednn_layer_norm_config() {
  // @@protoc_insertion_point(field_release:xla.cpu.BackendConfig.onednn_layer_norm_config)
  if (backend_config_oneof_case() == kOnednnLayerNormConfig) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.onednn_layer_norm_config_;
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.backend_config_oneof_.onednn_layer_norm_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::xla::cpu::OneDnnNormConfig& BackendConfig::_internal_onednn_layer_norm_config() const {
  return backend_config_oneof_case() == kOnednnLayerNormConfig ? *_impl_.backend_config_oneof_.onednn_layer_norm_config_ : reinterpret_cast<::xla::cpu::OneDnnNormConfig&>(::xla::cpu::_OneDnnNormConfig_default_instance_);
}
inline const ::xla::cpu::OneDnnNormConfig& BackendConfig::onednn_layer_norm_config() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:xla.cpu.BackendConfig.onednn_layer_norm_config)
  return _internal_onednn_layer_norm_config();
}
inline ::xla::cpu::OneDnnNormConfig* BackendConfig::unsafe_arena_release_onednn_layer_norm_config() {
  // @@protoc_insertion_point(field_unsafe_arena_release:xla.cpu.BackendConfig.onednn_layer_norm_config)
  if (backend_config_oneof_case() == kOnednnLayerNormConfig) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.onednn_layer_norm_config_;
    _impl_.backend_config_oneof_.onednn_layer_norm_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void BackendConfig::unsafe_arena_set_allocated_onednn_layer_norm_config(::xla::cpu::OneDnnNormConfig* value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_backend_config_oneof();
  if (value) {
    set_has_onednn_layer_norm_config();
    _impl_.backend_config_oneof_.onednn_layer_norm_config_ = value;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:xla.cpu.BackendConfig.onednn_layer_norm_config)
}
inline ::xla::cpu::OneDnnNormConfig* BackendConfig::_internal_mutable_onednn_layer_norm_config() {
  if (backend_config_oneof_case() != kOnednnLayerNormConfig) {
    clear_backend_config_oneof();
    set_has_onednn_layer_norm_config();
    _impl_.backend_config_oneof_.onednn_layer_norm_config_ =
        ::google::protobuf::Message::DefaultConstruct<::xla::cpu::OneDnnNormConfig>(GetArena());
  }
  return _impl_.backend_config_oneof_.onednn_layer_norm_config_;
}
inline ::xla::cpu::OneDnnNormConfig* BackendConfig::mutable_onednn_layer_norm_config() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::xla::cpu::OneDnnNormConfig* _msg = _internal_mutable_onednn_layer_norm_config();
  // @@protoc_insertion_point(field_mutable:xla.cpu.BackendConfig.onednn_layer_norm_config)
  return _msg;
}

// .xla.cpu.OneDnnSoftmaxConfig onednn_softmax_config = 4;
inline bool BackendConfig::has_onednn_softmax_config() const {
  return backend_config_oneof_case() == kOnednnSoftmaxConfig;
}
inline bool BackendConfig::_internal_has_onednn_softmax_config() const {
  return backend_config_oneof_case() == kOnednnSoftmaxConfig;
}
inline void BackendConfig::set_has_onednn_softmax_config() {
  _impl_._oneof_case_[0] = kOnednnSoftmaxConfig;
}
inline ::xla::cpu::OneDnnSoftmaxConfig* BackendConfig::release_onednn_softmax_config() {
  // @@protoc_insertion_point(field_release:xla.cpu.BackendConfig.onednn_softmax_config)
  if (backend_config_oneof_case() == kOnednnSoftmaxConfig) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.onednn_softmax_config_;
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.backend_config_oneof_.onednn_softmax_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::xla::cpu::OneDnnSoftmaxConfig& BackendConfig::_internal_onednn_softmax_config() const {
  return backend_config_oneof_case() == kOnednnSoftmaxConfig ? *_impl_.backend_config_oneof_.onednn_softmax_config_ : reinterpret_cast<::xla::cpu::OneDnnSoftmaxConfig&>(::xla::cpu::_OneDnnSoftmaxConfig_default_instance_);
}
inline const ::xla::cpu::OneDnnSoftmaxConfig& BackendConfig::onednn_softmax_config() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:xla.cpu.BackendConfig.onednn_softmax_config)
  return _internal_onednn_softmax_config();
}
inline ::xla::cpu::OneDnnSoftmaxConfig* BackendConfig::unsafe_arena_release_onednn_softmax_config() {
  // @@protoc_insertion_point(field_unsafe_arena_release:xla.cpu.BackendConfig.onednn_softmax_config)
  if (backend_config_oneof_case() == kOnednnSoftmaxConfig) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.onednn_softmax_config_;
    _impl_.backend_config_oneof_.onednn_softmax_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void BackendConfig::unsafe_arena_set_allocated_onednn_softmax_config(::xla::cpu::OneDnnSoftmaxConfig* value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_backend_config_oneof();
  if (value) {
    set_has_onednn_softmax_config();
    _impl_.backend_config_oneof_.onednn_softmax_config_ = value;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:xla.cpu.BackendConfig.onednn_softmax_config)
}
inline ::xla::cpu::OneDnnSoftmaxConfig* BackendConfig::_internal_mutable_onednn_softmax_config() {
  if (backend_config_oneof_case() != kOnednnSoftmaxConfig) {
    clear_backend_config_oneof();
    set_has_onednn_softmax_config();
    _impl_.backend_config_oneof_.onednn_softmax_config_ =
        ::google::protobuf::Message::DefaultConstruct<::xla::cpu::OneDnnSoftmaxConfig>(GetArena());
  }
  return _impl_.backend_config_oneof_.onednn_softmax_config_;
}
inline ::xla::cpu::OneDnnSoftmaxConfig* BackendConfig::mutable_onednn_softmax_config() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::xla::cpu::OneDnnSoftmaxConfig* _msg = _internal_mutable_onednn_softmax_config();
  // @@protoc_insertion_point(field_mutable:xla.cpu.BackendConfig.onednn_softmax_config)
  return _msg;
}

// .xla.cpu.OneDnnConvolutionConfig onednn_conv_config = 5;
inline bool BackendConfig::has_onednn_conv_config() const {
  return backend_config_oneof_case() == kOnednnConvConfig;
}
inline bool BackendConfig::_internal_has_onednn_conv_config() const {
  return backend_config_oneof_case() == kOnednnConvConfig;
}
inline void BackendConfig::set_has_onednn_conv_config() {
  _impl_._oneof_case_[0] = kOnednnConvConfig;
}
inline ::xla::cpu::OneDnnConvolutionConfig* BackendConfig::release_onednn_conv_config() {
  // @@protoc_insertion_point(field_release:xla.cpu.BackendConfig.onednn_conv_config)
  if (backend_config_oneof_case() == kOnednnConvConfig) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.onednn_conv_config_;
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.backend_config_oneof_.onednn_conv_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::xla::cpu::OneDnnConvolutionConfig& BackendConfig::_internal_onednn_conv_config() const {
  return backend_config_oneof_case() == kOnednnConvConfig ? *_impl_.backend_config_oneof_.onednn_conv_config_ : reinterpret_cast<::xla::cpu::OneDnnConvolutionConfig&>(::xla::cpu::_OneDnnConvolutionConfig_default_instance_);
}
inline const ::xla::cpu::OneDnnConvolutionConfig& BackendConfig::onednn_conv_config() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:xla.cpu.BackendConfig.onednn_conv_config)
  return _internal_onednn_conv_config();
}
inline ::xla::cpu::OneDnnConvolutionConfig* BackendConfig::unsafe_arena_release_onednn_conv_config() {
  // @@protoc_insertion_point(field_unsafe_arena_release:xla.cpu.BackendConfig.onednn_conv_config)
  if (backend_config_oneof_case() == kOnednnConvConfig) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.onednn_conv_config_;
    _impl_.backend_config_oneof_.onednn_conv_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void BackendConfig::unsafe_arena_set_allocated_onednn_conv_config(::xla::cpu::OneDnnConvolutionConfig* value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_backend_config_oneof();
  if (value) {
    set_has_onednn_conv_config();
    _impl_.backend_config_oneof_.onednn_conv_config_ = value;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:xla.cpu.BackendConfig.onednn_conv_config)
}
inline ::xla::cpu::OneDnnConvolutionConfig* BackendConfig::_internal_mutable_onednn_conv_config() {
  if (backend_config_oneof_case() != kOnednnConvConfig) {
    clear_backend_config_oneof();
    set_has_onednn_conv_config();
    _impl_.backend_config_oneof_.onednn_conv_config_ =
        ::google::protobuf::Message::DefaultConstruct<::xla::cpu::OneDnnConvolutionConfig>(GetArena());
  }
  return _impl_.backend_config_oneof_.onednn_conv_config_;
}
inline ::xla::cpu::OneDnnConvolutionConfig* BackendConfig::mutable_onednn_conv_config() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::xla::cpu::OneDnnConvolutionConfig* _msg = _internal_mutable_onednn_conv_config();
  // @@protoc_insertion_point(field_mutable:xla.cpu.BackendConfig.onednn_conv_config)
  return _msg;
}

// .xla.cpu.CustomCallBackendConfig custom_call_config = 6;
inline bool BackendConfig::has_custom_call_config() const {
  return backend_config_oneof_case() == kCustomCallConfig;
}
inline bool BackendConfig::_internal_has_custom_call_config() const {
  return backend_config_oneof_case() == kCustomCallConfig;
}
inline void BackendConfig::set_has_custom_call_config() {
  _impl_._oneof_case_[0] = kCustomCallConfig;
}
inline void BackendConfig::clear_custom_call_config() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (backend_config_oneof_case() == kCustomCallConfig) {
    if (GetArena() == nullptr) {
      delete _impl_.backend_config_oneof_.custom_call_config_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.backend_config_oneof_.custom_call_config_);
    }
    clear_has_backend_config_oneof();
  }
}
inline ::xla::cpu::CustomCallBackendConfig* BackendConfig::release_custom_call_config() {
  // @@protoc_insertion_point(field_release:xla.cpu.BackendConfig.custom_call_config)
  if (backend_config_oneof_case() == kCustomCallConfig) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.custom_call_config_;
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.backend_config_oneof_.custom_call_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::xla::cpu::CustomCallBackendConfig& BackendConfig::_internal_custom_call_config() const {
  return backend_config_oneof_case() == kCustomCallConfig ? *_impl_.backend_config_oneof_.custom_call_config_ : reinterpret_cast<::xla::cpu::CustomCallBackendConfig&>(::xla::cpu::_CustomCallBackendConfig_default_instance_);
}
inline const ::xla::cpu::CustomCallBackendConfig& BackendConfig::custom_call_config() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:xla.cpu.BackendConfig.custom_call_config)
  return _internal_custom_call_config();
}
inline ::xla::cpu::CustomCallBackendConfig* BackendConfig::unsafe_arena_release_custom_call_config() {
  // @@protoc_insertion_point(field_unsafe_arena_release:xla.cpu.BackendConfig.custom_call_config)
  if (backend_config_oneof_case() == kCustomCallConfig) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.custom_call_config_;
    _impl_.backend_config_oneof_.custom_call_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void BackendConfig::unsafe_arena_set_allocated_custom_call_config(::xla::cpu::CustomCallBackendConfig* value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_backend_config_oneof();
  if (value) {
    set_has_custom_call_config();
    _impl_.backend_config_oneof_.custom_call_config_ = value;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:xla.cpu.BackendConfig.custom_call_config)
}
inline ::xla::cpu::CustomCallBackendConfig* BackendConfig::_internal_mutable_custom_call_config() {
  if (backend_config_oneof_case() != kCustomCallConfig) {
    clear_backend_config_oneof();
    set_has_custom_call_config();
    _impl_.backend_config_oneof_.custom_call_config_ =
        ::google::protobuf::Message::DefaultConstruct<::xla::cpu::CustomCallBackendConfig>(GetArena());
  }
  return _impl_.backend_config_oneof_.custom_call_config_;
}
inline ::xla::cpu::CustomCallBackendConfig* BackendConfig::mutable_custom_call_config() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::xla::cpu::CustomCallBackendConfig* _msg = _internal_mutable_custom_call_config();
  // @@protoc_insertion_point(field_mutable:xla.cpu.BackendConfig.custom_call_config)
  return _msg;
}

// .xla.cpu.FusionBackendConfig fusion_config = 7;
inline bool BackendConfig::has_fusion_config() const {
  return backend_config_oneof_case() == kFusionConfig;
}
inline bool BackendConfig::_internal_has_fusion_config() const {
  return backend_config_oneof_case() == kFusionConfig;
}
inline void BackendConfig::set_has_fusion_config() {
  _impl_._oneof_case_[0] = kFusionConfig;
}
inline void BackendConfig::clear_fusion_config() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (backend_config_oneof_case() == kFusionConfig) {
    if (GetArena() == nullptr) {
      delete _impl_.backend_config_oneof_.fusion_config_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.backend_config_oneof_.fusion_config_);
    }
    clear_has_backend_config_oneof();
  }
}
inline ::xla::cpu::FusionBackendConfig* BackendConfig::release_fusion_config() {
  // @@protoc_insertion_point(field_release:xla.cpu.BackendConfig.fusion_config)
  if (backend_config_oneof_case() == kFusionConfig) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.fusion_config_;
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.backend_config_oneof_.fusion_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::xla::cpu::FusionBackendConfig& BackendConfig::_internal_fusion_config() const {
  return backend_config_oneof_case() == kFusionConfig ? *_impl_.backend_config_oneof_.fusion_config_ : reinterpret_cast<::xla::cpu::FusionBackendConfig&>(::xla::cpu::_FusionBackendConfig_default_instance_);
}
inline const ::xla::cpu::FusionBackendConfig& BackendConfig::fusion_config() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:xla.cpu.BackendConfig.fusion_config)
  return _internal_fusion_config();
}
inline ::xla::cpu::FusionBackendConfig* BackendConfig::unsafe_arena_release_fusion_config() {
  // @@protoc_insertion_point(field_unsafe_arena_release:xla.cpu.BackendConfig.fusion_config)
  if (backend_config_oneof_case() == kFusionConfig) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.fusion_config_;
    _impl_.backend_config_oneof_.fusion_config_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void BackendConfig::unsafe_arena_set_allocated_fusion_config(::xla::cpu::FusionBackendConfig* value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_backend_config_oneof();
  if (value) {
    set_has_fusion_config();
    _impl_.backend_config_oneof_.fusion_config_ = value;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:xla.cpu.BackendConfig.fusion_config)
}
inline ::xla::cpu::FusionBackendConfig* BackendConfig::_internal_mutable_fusion_config() {
  if (backend_config_oneof_case() != kFusionConfig) {
    clear_backend_config_oneof();
    set_has_fusion_config();
    _impl_.backend_config_oneof_.fusion_config_ =
        ::google::protobuf::Message::DefaultConstruct<::xla::cpu::FusionBackendConfig>(GetArena());
  }
  return _impl_.backend_config_oneof_.fusion_config_;
}
inline ::xla::cpu::FusionBackendConfig* BackendConfig::mutable_fusion_config() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::xla::cpu::FusionBackendConfig* _msg = _internal_mutable_fusion_config();
  // @@protoc_insertion_point(field_mutable:xla.cpu.BackendConfig.fusion_config)
  return _msg;
}

// .xla.cpu.LlvmKernelOptions llvm_kernel_options = 8;
inline bool BackendConfig::has_llvm_kernel_options() const {
  return backend_config_oneof_case() == kLlvmKernelOptions;
}
inline bool BackendConfig::_internal_has_llvm_kernel_options() const {
  return backend_config_oneof_case() == kLlvmKernelOptions;
}
inline void BackendConfig::set_has_llvm_kernel_options() {
  _impl_._oneof_case_[0] = kLlvmKernelOptions;
}
inline void BackendConfig::clear_llvm_kernel_options() {
  ::google::protobuf::internal::TSanWrite(&_impl_);
  if (backend_config_oneof_case() == kLlvmKernelOptions) {
    if (GetArena() == nullptr) {
      delete _impl_.backend_config_oneof_.llvm_kernel_options_;
    } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
      ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.backend_config_oneof_.llvm_kernel_options_);
    }
    clear_has_backend_config_oneof();
  }
}
inline ::xla::cpu::LlvmKernelOptions* BackendConfig::release_llvm_kernel_options() {
  // @@protoc_insertion_point(field_release:xla.cpu.BackendConfig.llvm_kernel_options)
  if (backend_config_oneof_case() == kLlvmKernelOptions) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.llvm_kernel_options_;
    if (GetArena() != nullptr) {
      temp = ::google::protobuf::internal::DuplicateIfNonNull(temp);
    }
    _impl_.backend_config_oneof_.llvm_kernel_options_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::xla::cpu::LlvmKernelOptions& BackendConfig::_internal_llvm_kernel_options() const {
  return backend_config_oneof_case() == kLlvmKernelOptions ? *_impl_.backend_config_oneof_.llvm_kernel_options_ : reinterpret_cast<::xla::cpu::LlvmKernelOptions&>(::xla::cpu::_LlvmKernelOptions_default_instance_);
}
inline const ::xla::cpu::LlvmKernelOptions& BackendConfig::llvm_kernel_options() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:xla.cpu.BackendConfig.llvm_kernel_options)
  return _internal_llvm_kernel_options();
}
inline ::xla::cpu::LlvmKernelOptions* BackendConfig::unsafe_arena_release_llvm_kernel_options() {
  // @@protoc_insertion_point(field_unsafe_arena_release:xla.cpu.BackendConfig.llvm_kernel_options)
  if (backend_config_oneof_case() == kLlvmKernelOptions) {
    clear_has_backend_config_oneof();
    auto* temp = _impl_.backend_config_oneof_.llvm_kernel_options_;
    _impl_.backend_config_oneof_.llvm_kernel_options_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline void BackendConfig::unsafe_arena_set_allocated_llvm_kernel_options(::xla::cpu::LlvmKernelOptions* value) {
  // We rely on the oneof clear method to free the earlier contents
  // of this oneof. We can directly use the pointer we're given to
  // set the new value.
  clear_backend_config_oneof();
  if (value) {
    set_has_llvm_kernel_options();
    _impl_.backend_config_oneof_.llvm_kernel_options_ = value;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:xla.cpu.BackendConfig.llvm_kernel_options)
}
inline ::xla::cpu::LlvmKernelOptions* BackendConfig::_internal_mutable_llvm_kernel_options() {
  if (backend_config_oneof_case() != kLlvmKernelOptions) {
    clear_backend_config_oneof();
    set_has_llvm_kernel_options();
    _impl_.backend_config_oneof_.llvm_kernel_options_ =
        ::google::protobuf::Message::DefaultConstruct<::xla::cpu::LlvmKernelOptions>(GetArena());
  }
  return _impl_.backend_config_oneof_.llvm_kernel_options_;
}
inline ::xla::cpu::LlvmKernelOptions* BackendConfig::mutable_llvm_kernel_options() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  ::xla::cpu::LlvmKernelOptions* _msg = _internal_mutable_llvm_kernel_options();
  // @@protoc_insertion_point(field_mutable:xla.cpu.BackendConfig.llvm_kernel_options)
  return _msg;
}

inline bool BackendConfig::has_backend_config_oneof() const {
  return backend_config_oneof_case() != BACKEND_CONFIG_ONEOF_NOT_SET;
}
inline void BackendConfig::clear_has_backend_config_oneof() {
  _impl_._oneof_case_[0] = BACKEND_CONFIG_ONEOF_NOT_SET;
}
inline BackendConfig::BackendConfigOneofCase BackendConfig::backend_config_oneof_case() const {
  return BackendConfig::BackendConfigOneofCase(_impl_._oneof_case_[0]);
}
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif  // __GNUC__

// @@protoc_insertion_point(namespace_scope)
}  // namespace cpu
}  // namespace xla


// @@protoc_insertion_point(global_scope)

#include "google/protobuf/port_undef.inc"

#endif  // GOOGLE_PROTOBUF_INCLUDED_xla_2fservice_2fcpu_2fbackend_5fconfig_2eproto_2epb_2eh
