diff --git a/xls/ir/function_base.cc b/xls/ir/function_base.cc index 44c17609b8..07feee66f3 100644 --- a/xls/ir/function_base.cc +++ b/xls/ir/function_base.cc @@ -178,6 +178,10 @@ absl::Status FunctionBase::RemoveNode(Node* node) { for (ChangeListener* listener : change_listeners_) { listener->NodeDeleted(node); } + // Clear the name. + if (node->HasAssignedName()) { + XLS_RETURN_IF_ERROR(node_name_uniquer_.ReleaseIdentifier(node->GetName())); + } auto node_it = node_iterators_.find(node); XLS_RET_CHECK(node_it != node_iterators_.end()); nodes_.erase(node_it->second); diff --git a/xls/passes/proc_state_tuple_flattening_pass_test.cc b/xls/passes/proc_state_tuple_flattening_pass_test.cc index 3949589bac..837158a7d6 100644 --- a/xls/passes/proc_state_tuple_flattening_pass_test.cc +++ b/xls/passes/proc_state_tuple_flattening_pass_test.cc @@ -193,16 +193,14 @@ TEST_P(ProcStateFlatteningPassTest, EmptyTupleAndBitsState) { EXPECT_EQ(proc->GetStateElementCount(), 2); - // The name uniquer thinks the names "y" and "q" are already taken (as they - // were the names of previously deleted nodes). So the new state params get - // suffixes. - // TODO(meheff): 2022/4/7 Figure out how to preserve the names. - EXPECT_EQ(proc->GetStateRead(int64_t{0})->GetName(), "y__1"); + // The name uniquer is told the names "y" and "q" are already released. So the + // new state params get the same name. + EXPECT_EQ(proc->GetStateRead(int64_t{0})->GetName(), "y"); EXPECT_EQ(proc->GetStateElement(0)->initial_value(), Value(UBits(0, 32))); EXPECT_THAT(proc->next_values(proc->GetStateRead(int64_t{0})), ElementsAre(m::Next(m::StateRead("y"), m::StateRead("y")))); - EXPECT_EQ(proc->GetStateRead(1)->GetName(), "q__1"); + EXPECT_EQ(proc->GetStateRead(1)->GetName(), "q"); EXPECT_EQ(proc->GetStateElement(1)->initial_value(), Value(UBits(0, 64))); EXPECT_THAT( proc->next_values(proc->GetStateRead(1)), @@ -222,7 +220,7 @@ TEST_P(ProcStateFlatteningPassTest, TrivialTupleState) { EXPECT_EQ(proc->GetStateElementCount(), 1); - EXPECT_EQ(proc->GetStateRead(int64_t{0})->GetName(), "x__1"); + EXPECT_EQ(proc->GetStateRead(int64_t{0})->GetName(), "x"); EXPECT_EQ(proc->GetStateElement(0)->initial_value(), Value(UBits(42, 32))); EXPECT_THAT( proc->next_values(proc->GetStateRead(int64_t{0})), @@ -242,7 +240,7 @@ TEST_P(ProcStateFlatteningPassTest, TrivialTupleStateWithNextExpression) { EXPECT_EQ(proc->GetStateElementCount(), 1); - EXPECT_EQ(proc->GetStateRead(int64_t{0})->GetName(), "x__1"); + EXPECT_EQ(proc->GetStateRead(int64_t{0})->GetName(), "x"); EXPECT_EQ(proc->GetStateElement(0)->initial_value(), Value(UBits(42, 32))); EXPECT_THAT(proc->next_values(proc->GetStateRead(int64_t{0})), UnorderedElementsAre( @@ -287,7 +285,7 @@ TEST_P(ProcStateFlatteningPassTest, ComplicatedState) { proc->next_values(proc->GetStateRead(2)), UnorderedElementsAre(m::Next(m::StateRead("a_2"), m::StateRead("c_1")))); - EXPECT_EQ(proc->GetStateRead(3)->GetName(), "b__1"); + EXPECT_EQ(proc->GetStateRead(3)->GetName(), "b"); EXPECT_THAT( proc->next_values(proc->GetStateRead(3)), UnorderedElementsAre(m::Next(m::StateRead("b"), m::StateRead("a_0"))));