aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/compiler/jit
diff options
context:
space:
mode:
authorGravatar Tim Shen <timshen@google.com>2018-08-30 16:03:10 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-08-30 16:07:27 -0700
commit6f879f891abe2e267c5cf512d034d7c3641cfdb0 (patch)
tree33dfda2aa13bdec06d3aa330dd5816441d449fa7 /tensorflow/compiler/jit
parent5d5591fbd4624ff7e50f305464667315f2d41ebb (diff)
[XLA] Rename all (Mutable)ArraySlice to absl::Span.
PiperOrigin-RevId: 210998142
Diffstat (limited to 'tensorflow/compiler/jit')
-rw-r--r--tensorflow/compiler/jit/deadness_analysis.cc50
-rw-r--r--tensorflow/compiler/jit/deadness_analysis_internal.h2
-rw-r--r--tensorflow/compiler/jit/encapsulate_subgraphs_pass_test.cc145
-rw-r--r--tensorflow/compiler/jit/partially_decluster_pass.cc2
4 files changed, 103 insertions, 96 deletions
diff --git a/tensorflow/compiler/jit/deadness_analysis.cc b/tensorflow/compiler/jit/deadness_analysis.cc
index fe28502f69..82aa03810b 100644
--- a/tensorflow/compiler/jit/deadness_analysis.cc
+++ b/tensorflow/compiler/jit/deadness_analysis.cc
@@ -108,7 +108,7 @@ class Predicate {
virtual string ToString() const = 0;
int64 hash() const { return hash_; }
- virtual gtl::ArraySlice<Predicate*> GetOperands() const = 0;
+ virtual absl::Span<Predicate* const> GetOperands() const = 0;
virtual Kind kind() const = 0;
virtual ~Predicate() {}
@@ -129,7 +129,7 @@ class Predicate {
};
int64 HashPredicateSequence(Predicate::Kind kind,
- gtl::ArraySlice<Predicate*> preds) {
+ absl::Span<Predicate* const> preds) {
int64 hash = ::tensorflow::hash<Predicate::Kind>()(kind);
for (Predicate* pred : preds) {
hash = Hash64Combine(hash, pred->hash());
@@ -159,8 +159,10 @@ class AndPredicate : public Predicate {
Kind kind() const override { return Kind::kAnd; }
- gtl::ArraySlice<Predicate*> GetOperands() const override { return operands_; }
- gtl::ArraySlice<Predicate*> operands() const { return operands_; }
+ absl::Span<Predicate* const> GetOperands() const override {
+ return operands_;
+ }
+ absl::Span<Predicate* const> operands() const { return operands_; }
private:
std::vector<Predicate*> operands_;
@@ -187,8 +189,10 @@ class OrPredicate : public Predicate {
}
Kind kind() const override { return Kind::kOr; }
- gtl::ArraySlice<Predicate*> GetOperands() const override { return operands_; }
- gtl::ArraySlice<Predicate*> operands() const { return operands_; }
+ absl::Span<Predicate* const> GetOperands() const override {
+ return operands_;
+ }
+ absl::Span<Predicate* const> operands() const { return operands_; }
private:
std::vector<Predicate*> operands_;
@@ -207,7 +211,9 @@ class NotPredicate : public Predicate {
Kind kind() const override { return Kind::kNot; }
Predicate* operand() const { return operands_[0]; }
- gtl::ArraySlice<Predicate*> GetOperands() const override { return operands_; }
+ absl::Span<Predicate* const> GetOperands() const override {
+ return operands_;
+ }
private:
std::array<Predicate*, 1> operands_;
@@ -240,7 +246,9 @@ class AndRecurrencePredicate : public Predicate {
Kind kind() const override { return Kind::kAndRecurrence; }
- gtl::ArraySlice<Predicate*> GetOperands() const override { return operands_; }
+ absl::Span<Predicate* const> GetOperands() const override {
+ return operands_;
+ }
private:
std::array<Predicate*, 2> operands_;
@@ -264,7 +272,7 @@ class SymbolPredicate : public Predicate {
}
Kind kind() const override { return Kind::kSymbol; }
- gtl::ArraySlice<Predicate*> GetOperands() const override { return {}; }
+ absl::Span<Predicate* const> GetOperands() const override { return {}; }
// If `must_be_true()` is true this SymbolPredicate represents the proposition
// "tensor_id() is live and evaluates to true".
@@ -313,11 +321,11 @@ template <typename FunctionTy>
// them.
class PredicateFactory {
public:
- Predicate* MakeAndPredicate(gtl::ArraySlice<Predicate*> operands) {
+ Predicate* MakeAndPredicate(absl::Span<Predicate* const> operands) {
return MakeAndOrImpl(operands, /*is_and=*/true);
}
- Predicate* MakeOrPredicate(gtl::ArraySlice<Predicate*> operands) {
+ Predicate* MakeOrPredicate(absl::Span<Predicate* const> operands) {
return MakeAndOrImpl(operands, /*is_and=*/false);
}
@@ -374,7 +382,7 @@ class PredicateFactory {
new PredicateT(std::forward<Args>(args)...));
}
- Predicate* MakeAndOrImpl(gtl::ArraySlice<Predicate*> operands, bool is_and);
+ Predicate* MakeAndOrImpl(absl::Span<Predicate* const> operands, bool is_and);
// Predicate instances are interned, meaning that there is only a single
// instance of a Predicate object with a given content. This makes checking
@@ -387,7 +395,7 @@ class PredicateFactory {
// for the owning pointers to predicate instances.
using SignatureForAndOr =
- std::pair<Predicate::Kind, gtl::ArraySlice<Predicate*>>;
+ std::pair<Predicate::Kind, absl::Span<Predicate* const>>;
using SignatureForNot = Predicate*;
using SignatureForAndRec = std::pair<Predicate*, Predicate*>;
using SignatureForSymbol = std::pair<SafeTensorId, bool>;
@@ -422,8 +430,8 @@ class PredicateFactory {
};
// Common code to create AndPredicate or OrPredicate instances.
-Predicate* PredicateFactory::MakeAndOrImpl(gtl::ArraySlice<Predicate*> operands,
- bool is_and) {
+Predicate* PredicateFactory::MakeAndOrImpl(
+ absl::Span<Predicate* const> operands, bool is_and) {
Predicate::Kind pred_kind =
is_and ? Predicate::Kind::kAnd : Predicate::Kind::kOr;
gtl::FlatSet<Predicate*> simplified_ops_set;
@@ -474,7 +482,7 @@ Predicate* PredicateFactory::MakeAndOrImpl(gtl::ArraySlice<Predicate*> operands,
// NB! Because we'll use a non-owning reference to simplified_ops in the
// key for interned_and_or_instances_ we need to be careful to std::move()
// it all the way through.
- gtl::ArraySlice<Predicate*> operands_slice = simplified_ops;
+ absl::Span<Predicate* const> operands_slice = simplified_ops;
std::unique_ptr<Predicate> new_pred =
is_and ? Make<AndPredicate>(std::move(simplified_ops))
: Make<OrPredicate>(std::move(simplified_ops));
@@ -496,7 +504,7 @@ class DeadnessAnalysisImpl : public DeadnessAnalysis {
: graph_(*graph), vlog_(VLOG_IS_ON(2)) {}
Status Populate();
- Status PopulateWithReversePostOrder(gtl::ArraySlice<Node*> rpo);
+ Status PopulateWithReversePostOrder(absl::Span<Node* const> rpo);
bool HasInputsWithMismatchingDeadness(const Node& node) override;
void Print() const override;
gtl::FlatMap<TensorId, string, TensorId::Hasher> PredicateMapAsString() const;
@@ -527,7 +535,7 @@ class DeadnessAnalysisImpl : public DeadnessAnalysis {
}
}
- void SetPredicate(Node* n, gtl::ArraySlice<int> output_idxs, Predicate* pred,
+ void SetPredicate(Node* n, absl::Span<const int> output_idxs, Predicate* pred,
std::vector<bool>* should_revisit) {
for (int output_idx : output_idxs) {
SetPredicate(n, output_idx, pred, should_revisit);
@@ -625,7 +633,7 @@ Predicate* DeduceStepPredicate(PredicateFactory* predicate_factory,
}
std::vector<Predicate*> and_ops;
- gtl::ArraySlice<Predicate*> recurrent_pred_ops =
+ absl::Span<Predicate* const> recurrent_pred_ops =
backedge_predicate->GetOperands();
bool found_sym = false;
@@ -784,7 +792,7 @@ Status DeadnessAnalysisImpl::Populate() {
}
Status DeadnessAnalysisImpl::PopulateWithReversePostOrder(
- gtl::ArraySlice<Node*> rpo) {
+ absl::Span<Node* const> rpo) {
// This an abstract interpretation over the deadness propagation semantics of
// the graph executor.
//
@@ -924,7 +932,7 @@ Status ComputePredicates(const Graph& graph,
}
Status ComputePredicates(const Graph& graph,
- gtl::ArraySlice<Node*> reverse_post_order,
+ absl::Span<Node* const> reverse_post_order,
PredicateMapTy* out_predicate_map) {
DeadnessAnalysisImpl impl(&graph);
TF_RETURN_IF_ERROR(impl.PopulateWithReversePostOrder(reverse_post_order));
diff --git a/tensorflow/compiler/jit/deadness_analysis_internal.h b/tensorflow/compiler/jit/deadness_analysis_internal.h
index 401d6e406a..3df2679c62 100644
--- a/tensorflow/compiler/jit/deadness_analysis_internal.h
+++ b/tensorflow/compiler/jit/deadness_analysis_internal.h
@@ -32,7 +32,7 @@ Status ComputePredicates(const Graph& graph, PredicateMapTy* out_predicate_map);
// specified in `reverse_post_order` which must be a valid RPO for the graph
// minus NextIteration->Merge edges.
Status ComputePredicates(const Graph& graph,
- gtl::ArraySlice<Node*> reverse_post_order,
+ absl::Span<Node* const> reverse_post_order,
PredicateMapTy* out_predicate_map);
} // namespace deadness_analysis_internal
} // namespace tensorflow
diff --git a/tensorflow/compiler/jit/encapsulate_subgraphs_pass_test.cc b/tensorflow/compiler/jit/encapsulate_subgraphs_pass_test.cc
index b3600fc48b..7bc0ef0303 100644
--- a/tensorflow/compiler/jit/encapsulate_subgraphs_pass_test.cc
+++ b/tensorflow/compiler/jit/encapsulate_subgraphs_pass_test.cc
@@ -379,7 +379,7 @@ Node* InputShaped(const GraphDefBuilder::Options& opts) {
return ops::SourceOp("InputTestShaped", opts);
}
-Node* KnownShapeBase(DataType dtype, const gtl::ArraySlice<int>& shape,
+Node* KnownShapeBase(DataType dtype, absl::Span<const int> shape,
const GraphDefBuilder::Options& opts) {
if (opts.HaveError()) return nullptr;
NodeBuilder node_builder(opts.GetNameForOp("Const"), "Const",
@@ -394,7 +394,7 @@ Node* KnownShapeBase(DataType dtype, const gtl::ArraySlice<int>& shape,
.FinalizeBuilder(&node_builder);
}
-Node* KnownShape(const gtl::ArraySlice<int>& shape,
+Node* KnownShape(absl::Span<const int> shape,
const GraphDefBuilder::Options& opts) {
return KnownShapeBase(DT_FLOAT, shape, opts);
}
@@ -417,8 +417,7 @@ Node* KeyPlaceholder(const string& call_node,
}
Node* RecvAtHost(ops::NodeOut key_input, const string& cluster,
- const string& oc_cluster,
- const gtl::ArraySlice<DataType>& dtypes,
+ const string& oc_cluster, absl::Span<const DataType> dtypes,
const GraphDefBuilder::Options& opts) {
if (opts.HaveError()) return nullptr;
string key =
@@ -892,13 +891,13 @@ TEST(EncapsulateSubgraphsTest, OneFunctionOneOutside) {
{{"outside_compilation_O1_host_compute"},
"XlaHostCompute",
{"C:o:0", "c:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT, DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT, DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F1_O1"},
{"shape_inference_graph",
"_outside_compilation_shape_inference_F1_O1"},
- {"shapes", gtl::ArraySlice<DataType>({})},
+ {"shapes", absl::Span<const DataType>({})},
{"_outside_compilation_subgraph", "O1"}},
{"c"}},
},
@@ -1038,26 +1037,26 @@ TEST(EncapsulateSubgraphsTest, OneFunctionTwoOutside) {
{{"outside_compilation_O2_host_compute"},
"XlaHostCompute",
{"F:o:0", "D:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT, DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT, DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
{"ancestors",
- gtl::ArraySlice<string>({"outside_compilation_O1_host_compute"})},
+ absl::Span<const string>({"outside_compilation_O1_host_compute"})},
{"key", "host_compute_channel_F1_O2"},
{"shape_inference_graph",
"_outside_compilation_shape_inference_F1_O2"},
- {"shapes", gtl::ArraySlice<DataType>({})},
+ {"shapes", absl::Span<const DataType>({})},
{"_outside_compilation_subgraph", "O2"}},
{"F", "outside_compilation_O1_host_compute"}},
{{"outside_compilation_O1_host_compute"},
"XlaHostCompute",
{"C:o:0", "D:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT, DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT, DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F1_O1"},
{"shape_inference_graph",
"_outside_compilation_shape_inference_F1_O1"},
- {"shapes", gtl::ArraySlice<DataType>({})},
+ {"shapes", absl::Span<const DataType>({})},
{"_outside_compilation_subgraph", "O1"}},
{"D"}},
},
@@ -1190,13 +1189,13 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutside) {
{{"outside_compilation_O1_host_compute"},
"XlaHostCompute",
{"C:o:0", "D:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT, DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT, DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F1_O1"},
{"shape_inference_graph",
"_outside_compilation_shape_inference_F1_O1"},
- {"shapes", gtl::ArraySlice<DataType>({})},
+ {"shapes", absl::Span<const DataType>({})},
{"_outside_compilation_subgraph", "O1"}},
{"D"}},
},
@@ -1213,13 +1212,13 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutside) {
{{"outside_compilation_O1_host_compute"},
"XlaHostCompute",
{"G:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F2_O1"},
{"shape_inference_graph", ""},
{"shapes",
- gtl::ArraySlice<TensorShapeProto>({shape_proto_expected})},
+ absl::Span<const TensorShapeProto>({shape_proto_expected})},
{"_outside_compilation_subgraph", "O1"}}},
},
{{"g_0_retval", "G:o:0"}, {"i_0_retval", "I:o:0"}});
@@ -1364,13 +1363,13 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutsideDependencyFromOutside) {
{{"outside_compilation_O1_host_compute"},
"XlaHostCompute",
{"C:o:0", "D:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT, DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT, DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F1_O1"},
{"shape_inference_graph",
"_outside_compilation_shape_inference_F1_O1"},
- {"shapes", gtl::ArraySlice<TensorShapeProto>({})},
+ {"shapes", absl::Span<const TensorShapeProto>({})},
{"_outside_compilation_subgraph", "O1"}},
{"D"}},
},
@@ -1386,13 +1385,13 @@ TEST(EncapsulateSubgraphsTest, TwoFunctionsTwoOutsideDependencyFromOutside) {
{{"outside_compilation_O1_host_compute"},
"XlaHostCompute",
{"G:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F2_O1"},
{"shape_inference_graph",
"_outside_compilation_shape_inference_F2_O1"},
- {"shapes", gtl::ArraySlice<TensorShapeProto>({})},
+ {"shapes", absl::Span<const TensorShapeProto>({})},
{"_outside_compilation_subgraph", "O1"}}},
},
{{"i_0_retval", "I:o:0"}});
@@ -1495,13 +1494,13 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationNoInputs) {
{{"outside_compilation_O1_host_compute"},
"XlaHostCompute",
{},
- {{"Tinputs", gtl::ArraySlice<DataType>({})},
- {"Toutputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({})},
+ {"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F1_O1"},
{"shape_inference_graph", ""},
{"shapes",
- gtl::ArraySlice<TensorShapeProto>({shape_proto_expected})},
+ absl::Span<const TensorShapeProto>({shape_proto_expected})},
{"_outside_compilation_subgraph", "O1"}}},
},
{{"f_0_retval", "F:o:0"}});
@@ -1579,13 +1578,13 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationControlInput) {
{{"outside_compilation_O1_host_compute"},
"XlaHostCompute",
{},
- {{"Tinputs", gtl::ArraySlice<DataType>({})},
- {"Toutputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({})},
+ {"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F1_O1"},
{"shape_inference_graph", ""},
{"shapes",
- gtl::ArraySlice<TensorShapeProto>({shape_proto_expected})},
+ absl::Span<const TensorShapeProto>({shape_proto_expected})},
{"_outside_compilation_subgraph", "O1"}},
{"D"}},
},
@@ -1661,12 +1660,12 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationNoOutputs) {
{{"outside_compilation_O1_host_compute"},
"XlaHostCompute",
{"D:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F1_O1"},
{"shape_inference_graph", ""},
- {"shapes", gtl::ArraySlice<TensorShapeProto>({})},
+ {"shapes", absl::Span<const TensorShapeProto>({})},
{"_outside_compilation_subgraph", "O1"}}},
},
{{"f_0_retval", "F:o:0"}});
@@ -1742,12 +1741,12 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationControlOutput) {
{{"outside_compilation_O1_host_compute"},
"XlaHostCompute",
{"D:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F1_O1"},
{"shape_inference_graph", ""},
- {"shapes", gtl::ArraySlice<TensorShapeProto>({})},
+ {"shapes", absl::Span<const TensorShapeProto>({})},
{"_outside_compilation_subgraph", "O1"}}},
},
{{"f_0_retval", "F:o:0"}});
@@ -1846,13 +1845,13 @@ TEST(EncapsulateSubgraphsTest,
{{"outside_compilation_O2_host_compute"},
"XlaHostCompute",
{"F:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F1_O2"},
{"shape_inference_graph",
"_outside_compilation_shape_inference_F1_O2"},
- {"shapes", gtl::ArraySlice<TensorShapeProto>({})},
+ {"shapes", absl::Span<const TensorShapeProto>({})},
{"_outside_compilation_subgraph", "O2"}}},
},
{{"h_0_retval", "H:o:0"}});
@@ -1955,13 +1954,13 @@ TEST(EncapsulateSubgraphsTest,
{{"outside_compilation_O1_host_compute"},
"XlaHostCompute",
{"D:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F1_O1"},
{"shape_inference_graph",
"_outside_compilation_shape_inference_F1_O1"},
- {"shapes", gtl::ArraySlice<TensorShapeProto>({})},
+ {"shapes", absl::Span<const TensorShapeProto>({})},
{"_outside_compilation_subgraph", "O1"}}},
},
{{"h_0_retval", "H:o:0"}});
@@ -2066,37 +2065,37 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationClusterDependency) {
{{"outside_compilation_O1_host_compute"},
"XlaHostCompute",
{"D:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F1_O1"},
{"shape_inference_graph",
"_outside_compilation_shape_inference_F1_O1"},
- {"shapes", gtl::ArraySlice<TensorShapeProto>({})},
+ {"shapes", absl::Span<const TensorShapeProto>({})},
{"_outside_compilation_subgraph", "O1"}}},
{{"outside_compilation_O2_host_compute"},
"XlaHostCompute",
{"D:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({})},
{"ancestors",
- gtl::ArraySlice<string>({"outside_compilation_O1_host_compute"})},
+ absl::Span<const string>({"outside_compilation_O1_host_compute"})},
{"key", "host_compute_channel_F1_O2"},
{"shape_inference_graph", ""},
- {"shapes", gtl::ArraySlice<TensorShapeProto>({})},
+ {"shapes", absl::Span<const TensorShapeProto>({})},
{"_outside_compilation_subgraph", "O2"}},
{"outside_compilation_O1_host_compute"}},
{{"outside_compilation_O3_host_compute"},
"XlaHostCompute",
{"D:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({})},
{"ancestors",
- gtl::ArraySlice<string>({"outside_compilation_O1_host_compute",
- "outside_compilation_O2_host_compute"})},
+ absl::Span<const string>({"outside_compilation_O1_host_compute",
+ "outside_compilation_O2_host_compute"})},
{"key", "host_compute_channel_F1_O3"},
{"shape_inference_graph", ""},
- {"shapes", gtl::ArraySlice<TensorShapeProto>({})},
+ {"shapes", absl::Span<const TensorShapeProto>({})},
{"_outside_compilation_subgraph", "O3"}},
{"outside_compilation_O1_host_compute",
"outside_compilation_O2_host_compute"}}},
@@ -2272,13 +2271,13 @@ TEST(EncapsulateSubgraphsTest, OutsideCompilationShapeInference) {
{{"outside_compilation_O1_host_compute"},
"XlaHostCompute",
{"c:o:0"},
- {{"Tinputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"Toutputs", gtl::ArraySlice<DataType>({DT_FLOAT})},
- {"ancestors", gtl::ArraySlice<string>({})},
+ {{"Tinputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"Toutputs", absl::Span<const DataType>({DT_FLOAT})},
+ {"ancestors", absl::Span<const string>({})},
{"key", "host_compute_channel_F1_O1"},
{"shape_inference_graph",
"_outside_compilation_shape_inference_F1_O1"},
- {"shapes", gtl::ArraySlice<DataType>({})},
+ {"shapes", absl::Span<const DataType>({})},
{"_outside_compilation_subgraph", "O1"}},
{"c"}},
},
diff --git a/tensorflow/compiler/jit/partially_decluster_pass.cc b/tensorflow/compiler/jit/partially_decluster_pass.cc
index 3a9a8c4988..a8f09bfa50 100644
--- a/tensorflow/compiler/jit/partially_decluster_pass.cc
+++ b/tensorflow/compiler/jit/partially_decluster_pass.cc
@@ -22,7 +22,7 @@ limitations under the License.
namespace tensorflow {
namespace {
Status FindNodesToDecluster(const Graph& graph, gtl::FlatSet<Node*>* result,
- gtl::ArraySlice<Node*> post_order) {
+ absl::Span<Node* const> post_order) {
// Find nodes that have at least one user outside their cluster that expects
// hostmem output. These nodes should be cloned to outside the cluster to
// avoid the device-host copy we'd otherwise need.