diff --git a/third_party/xla/xla/hlo/evaluator/BUILD b/third_party/xla/xla/hlo/evaluator/BUILD index 2420a3bdbc3..866636da420 100644 --- a/third_party/xla/xla/hlo/evaluator/BUILD +++ b/third_party/xla/xla/hlo/evaluator/BUILD @@ -86,7 +86,6 @@ cc_library( "@com_google_absl//absl/algorithm:container", "@com_google_absl//absl/base", "@com_google_absl//absl/base:core_headers", - "@com_google_absl//absl/base:endian", "@com_google_absl//absl/cleanup", "@com_google_absl//absl/container:flat_hash_map", "@com_google_absl//absl/container:inlined_vector", @@ -167,9 +166,9 @@ xla_cc_test( "//xla/tsl/platform:test_benchmark", "//xla/tsl/platform:test_main", # fixdeps: keep "@com_google_absl//absl/algorithm:container", - "@com_google_absl//absl/base:endian", "@com_google_absl//absl/container:flat_hash_set", "@com_google_absl//absl/log:check", + "@com_google_absl//absl/numeric:bits", "@com_google_absl//absl/status", "@com_google_absl//absl/status:statusor", "@com_google_absl//absl/strings", diff --git a/third_party/xla/xla/hlo/evaluator/hlo_evaluator.cc b/third_party/xla/xla/hlo/evaluator/hlo_evaluator.cc index c8fc2f709fa..5529266e4b9 100644 --- a/third_party/xla/xla/hlo/evaluator/hlo_evaluator.cc +++ b/third_party/xla/xla/hlo/evaluator/hlo_evaluator.cc @@ -35,7 +35,6 @@ limitations under the License. #include #include "absl/algorithm/container.h" -#include "absl/base/internal/endian.h" #include "absl/cleanup/cleanup.h" #include "absl/container/flat_hash_map.h" #include "absl/container/inlined_vector.h" @@ -236,10 +235,15 @@ absl::Status MakeEvalErrorDueToParamOrInfeed( eval_instruction.parent()->name(), ").")); std::string error_payload; error_payload.resize(sizeof(internal::EvalErrorDetail)); - absl::little_endian::Store32( - const_cast(error_payload.data()), - static_cast( - internal::EvalErrorDetail::kDynamicValueDependence)); + + uint32_t error_detail = + static_cast(internal::EvalErrorDetail::kDynamicValueDependence); + // Ensure that the error detail is also in little endian. + if constexpr (absl::endian::native != absl::endian::little) { + DCHECK(absl::endian::native == absl::endian::big); + error_detail = absl::byteswap(error_detail); + } + (*error_payload.data()) = error_detail; error.SetPayload(internal::kEvalErrorDetailUrl, absl::Cord(error_payload)); return error; } diff --git a/third_party/xla/xla/hlo/evaluator/hlo_evaluator_test.cc b/third_party/xla/xla/hlo/evaluator/hlo_evaluator_test.cc index ec0945eb6b9..28027515503 100644 --- a/third_party/xla/xla/hlo/evaluator/hlo_evaluator_test.cc +++ b/third_party/xla/xla/hlo/evaluator/hlo_evaluator_test.cc @@ -27,9 +27,9 @@ limitations under the License. #include #include "absl/algorithm/container.h" -#include "absl/base/internal/endian.h" #include "absl/container/flat_hash_set.h" #include "absl/log/check.h" +#include "absl/numeric/bits.h" #include "absl/status/status.h" #include "absl/status/statusor.h" #include "absl/strings/str_format.h" @@ -7662,10 +7662,16 @@ TEST(EvalErrorTest, Payload) { absl::Status s = absl::InternalError("hmm"); std::string payload; payload.resize(sizeof(internal::EvalErrorDetail)); - absl::little_endian::Store32( - const_cast(payload.data()), - static_cast( - internal::EvalErrorDetail::kDynamicValueDependence)); + + uint32_t error_detail = + static_cast(internal::EvalErrorDetail::kDynamicValueDependence); + // Ensure that the error detail is also in little endian. + if constexpr (absl::endian::native != absl::endian::little) { + DCHECK(absl::endian::native == absl::endian::big); + error_detail = absl::byteswap(error_detail); + } + (*payload.data()) = error_detail; + s.SetPayload(internal::kEvalErrorDetailUrl, absl::Cord(payload)); EXPECT_EQ(internal::ParseEvalErrorDetail(s),