diff --git a/tensorflow/core/grappler/optimizers/graph_optimizer_stage.cc b/tensorflow/core/grappler/optimizers/graph_optimizer_stage.cc index 4e955db2f5a..f584b8d1548 100644 --- a/tensorflow/core/grappler/optimizers/graph_optimizer_stage.cc +++ b/tensorflow/core/grappler/optimizers/graph_optimizer_stage.cc @@ -84,11 +84,14 @@ NodeDef* AddCopyNode(const GraphOptimizerContext& ctx, const string& name, } NodeDef* AddEmptyNode(const GraphOptimizerContext& ctx, const string& name) { - CHECK(!ctx.node_map->NodeExists(name)) - << "Node " << name << " already exists in a graph"; + std::string new_name = name; + for (int count = 0; ctx.node_map->NodeExists(new_name); ++count) { + LOG(WARNING) << name << " already exists in the graph."; + new_name = absl::StrCat(name, "_", count); + } NodeDef* new_node = ctx.optimized_graph->add_node(); - new_node->set_name(name); - ctx.node_map->AddNode(name, new_node); + new_node->set_name(new_name); + ctx.node_map->AddNode(new_name, new_node); return new_node; } diff --git a/tensorflow/core/grappler/optimizers/graph_optimizer_stage_test.cc b/tensorflow/core/grappler/optimizers/graph_optimizer_stage_test.cc index 678db7be83f..b0e923803d6 100644 --- a/tensorflow/core/grappler/optimizers/graph_optimizer_stage_test.cc +++ b/tensorflow/core/grappler/optimizers/graph_optimizer_stage_test.cc @@ -228,6 +228,10 @@ TEST_F(GraphOptimizerStageTest, AddNodes) { NodeDef* empty_node_by_name; TF_CHECK_OK(stage.GetInputNode("Add_2", &empty_node_by_name)); EXPECT_EQ(empty_node, empty_node_by_name); + + // Check that AddEmptyNode adds a unique suffix if the node already exists. + NodeDef* unique_empty_node = stage.AddEmptyNode("Add_2"); + EXPECT_EQ(unique_empty_node->name(), "Add_2_0"); } } // namespace