From 43930312404d885f1d6de086120712ddb633afdb Mon Sep 17 00:00:00 2001
From: Yong Tang <yong.tang.github@outlook.com>
Date: Sun, 7 Jun 2020 17:20:27 +0000
Subject: [PATCH] Update the boundary check in unravel_index to use std::all_of
 instead of eigen

Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
---
 tensorflow/core/kernels/unravel_index_op.cc | 22 ++++++++-------------
 1 file changed, 8 insertions(+), 14 deletions(-)

diff --git a/tensorflow/core/kernels/unravel_index_op.cc b/tensorflow/core/kernels/unravel_index_op.cc
index d41915e5c14..fb8d6703d57 100644
--- a/tensorflow/core/kernels/unravel_index_op.cc
+++ b/tensorflow/core/kernels/unravel_index_op.cc
@@ -55,21 +55,15 @@ class UnravelIndexOp : public OpKernel {
     auto dims = dims_tensor.vec<Tidx>();
 
     // Chek to make sure indices is not out of boundary
-    Eigen::Tensor<bool, 0, Eigen::RowMajor> check;
-    if (TensorShapeUtils::IsScalar(indices_tensor.shape())) {
-      auto indices = indices_tensor.scalar<Tidx>();
-      auto dims_prod = dims.prod();
-      check = (indices < dims_prod).all();
-    } else {
-      auto indices = indices_tensor.vec<Tidx>();
-      auto dims_prod = dims.prod()
-          .reshape(Eigen::array<Eigen::Index, 1>({1}))
-          .broadcast(
-              Eigen::array<Eigen::Index, 1>({indices_tensor.NumElements()}));
-      check = (indices < dims_prod).all();
-    }
+    Eigen::Tensor<Tidx, 0, Eigen::RowMajor> dims_prod_eigen = dims.prod();
+    Tidx dims_prod = dims_prod_eigen();
+    const Tidx* indices = indices_tensor.flat<Tidx>().data();
+    int64 size = indices_tensor.NumElements();
+    bool check = std::all_of(indices, indices + size, [&](Tidx index) {
+        return index < dims_prod;
+    });
     OP_REQUIRES(
-        ctx, check(),
+        ctx, check,
         errors::InvalidArgument("index is out of bound as with dims"));
 
     Eigen::array<bool, 1> reverse({true});