From a1e2fb98f6bfb4da3e4db4f63ae7c60caae6c919 Mon Sep 17 00:00:00 2001 From: "A. Unique TensorFlower" Date: Wed, 11 Jan 2017 20:28:09 -0800 Subject: [PATCH] [XLA] Make `PositionInContainer` polymorphic in container type Change: 144283085 --- .../xla/service/algebraic_simplifier.cc | 4 ++-- .../xla/service/gpu/ir_emitter_unnested.cc | 19 ++++++++----------- tensorflow/compiler/xla/util.cc | 6 ------ tensorflow/compiler/xla/util.h | 7 +++++-- 4 files changed, 15 insertions(+), 21 deletions(-) diff --git a/tensorflow/compiler/xla/service/algebraic_simplifier.cc b/tensorflow/compiler/xla/service/algebraic_simplifier.cc index fe892e872fd..d9d317e8737 100644 --- a/tensorflow/compiler/xla/service/algebraic_simplifier.cc +++ b/tensorflow/compiler/xla/service/algebraic_simplifier.cc @@ -782,9 +782,9 @@ Status AlgebraicSimplifierVisitor::HandleConvolution( input_shape.layout().minor_to_major(0) != dnums.feature_dimension() || // The input feature dimension should come later in the minor-to-major // order. - (PositionInContainer(AsInt64Slice(filter_shape.layout().minor_to_major()), + (PositionInContainer(filter_shape.layout().minor_to_major(), dnums.kernel_input_feature_dimension()) < - PositionInContainer(AsInt64Slice(filter_shape.layout().minor_to_major()), + PositionInContainer(filter_shape.layout().minor_to_major(), dnums.kernel_output_feature_dimension()))) { return Status::OK(); } diff --git a/tensorflow/compiler/xla/service/gpu/ir_emitter_unnested.cc b/tensorflow/compiler/xla/service/gpu/ir_emitter_unnested.cc index 79a64433465..014127eee56 100644 --- a/tensorflow/compiler/xla/service/gpu/ir_emitter_unnested.cc +++ b/tensorflow/compiler/xla/service/gpu/ir_emitter_unnested.cc @@ -1108,18 +1108,15 @@ Status IrEmitterUnnested::EmitReductionToVector( int64 width = 1; for (int64 input_dim = 0; input_dim < ShapeUtil::Rank(input_shape); ++input_dim) { - if (PositionInContainer( - AsInt64Slice(input_shape.layout().minor_to_major()), input_dim) > - PositionInContainer( - AsInt64Slice(input_shape.layout().minor_to_major()), - input_dim_to_keep)) { + if (PositionInContainer(input_shape.layout().minor_to_major(), + input_dim) > + PositionInContainer(input_shape.layout().minor_to_major(), + input_dim_to_keep)) { depth *= input_shape.dimensions(input_dim); - } else if (PositionInContainer( - AsInt64Slice(input_shape.layout().minor_to_major()), - input_dim) < - PositionInContainer( - AsInt64Slice(input_shape.layout().minor_to_major()), - input_dim_to_keep)) { + } else if (PositionInContainer(input_shape.layout().minor_to_major(), + input_dim) < + PositionInContainer(input_shape.layout().minor_to_major(), + input_dim_to_keep)) { width *= input_shape.dimensions(input_dim); } } diff --git a/tensorflow/compiler/xla/util.cc b/tensorflow/compiler/xla/util.cc index dac5dadf834..3ee5dfc9496 100644 --- a/tensorflow/compiler/xla/util.cc +++ b/tensorflow/compiler/xla/util.cc @@ -176,12 +176,6 @@ std::vector ComposePermutations(tensorflow::gtl::ArraySlice p1, return output; } -int64 PositionInContainer(tensorflow::gtl::ArraySlice container, - int64 value) { - return std::find(container.begin(), container.end(), value) - - container.begin(); -} - PaddingConfig MakeNoPaddingConfig(int64 rank) { PaddingConfig padding_config; for (int64 dnum = 0; dnum < rank; ++dnum) { diff --git a/tensorflow/compiler/xla/util.h b/tensorflow/compiler/xla/util.h index 842b4f219a0..00f8d946f89 100644 --- a/tensorflow/compiler/xla/util.h +++ b/tensorflow/compiler/xla/util.h @@ -183,8 +183,11 @@ std::vector InversePermutation( std::vector ComposePermutations(tensorflow::gtl::ArraySlice p1, tensorflow::gtl::ArraySlice p2); -int64 PositionInContainer(tensorflow::gtl::ArraySlice container, - int64 value); +template +int64 PositionInContainer(const Container& container, int64 value) { + return std::distance(container.begin(), + std::find(container.begin(), container.end(), value)); +} // Returns a PaddingConfig object that represents no padding for the given rank. PaddingConfig MakeNoPaddingConfig(int64 rank);