Skip to content

Commit cfacdad

Browse files
allightcopybara-github
authored andcommitted
Release node name when removing a node from a function.
When a node is removed from a `FunctionBase`, if it has an assigned name, release that name from the `node_name_uniquer_` to allow the name to be reused. PiperOrigin-RevId: 822281695
1 parent d165f72 commit cfacdad

File tree

2 files changed

+11
-9
lines changed

2 files changed

+11
-9
lines changed

xls/ir/function_base.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,10 @@ absl::Status FunctionBase::RemoveNode(Node* node) {
178178
for (ChangeListener* listener : change_listeners_) {
179179
listener->NodeDeleted(node);
180180
}
181+
// Clear the name.
182+
if (node->HasAssignedName()) {
183+
XLS_RETURN_IF_ERROR(node_name_uniquer_.ReleaseIdentifier(node->GetName()));
184+
}
181185
auto node_it = node_iterators_.find(node);
182186
XLS_RET_CHECK(node_it != node_iterators_.end());
183187
nodes_.erase(node_it->second);

xls/passes/proc_state_tuple_flattening_pass_test.cc

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -193,16 +193,14 @@ TEST_P(ProcStateFlatteningPassTest, EmptyTupleAndBitsState) {
193193

194194
EXPECT_EQ(proc->GetStateElementCount(), 2);
195195

196-
// The name uniquer thinks the names "y" and "q" are already taken (as they
197-
// were the names of previously deleted nodes). So the new state params get
198-
// suffixes.
199-
// TODO(meheff): 2022/4/7 Figure out how to preserve the names.
200-
EXPECT_EQ(proc->GetStateRead(int64_t{0})->GetName(), "y__1");
196+
// The name uniquer is told the names "y" and "q" are already released. So the
197+
// new state params get the same name.
198+
EXPECT_EQ(proc->GetStateRead(int64_t{0})->GetName(), "y");
201199
EXPECT_EQ(proc->GetStateElement(0)->initial_value(), Value(UBits(0, 32)));
202200
EXPECT_THAT(proc->next_values(proc->GetStateRead(int64_t{0})),
203201
ElementsAre(m::Next(m::StateRead("y"), m::StateRead("y"))));
204202

205-
EXPECT_EQ(proc->GetStateRead(1)->GetName(), "q__1");
203+
EXPECT_EQ(proc->GetStateRead(1)->GetName(), "q");
206204
EXPECT_EQ(proc->GetStateElement(1)->initial_value(), Value(UBits(0, 64)));
207205
EXPECT_THAT(
208206
proc->next_values(proc->GetStateRead(1)),
@@ -222,7 +220,7 @@ TEST_P(ProcStateFlatteningPassTest, TrivialTupleState) {
222220

223221
EXPECT_EQ(proc->GetStateElementCount(), 1);
224222

225-
EXPECT_EQ(proc->GetStateRead(int64_t{0})->GetName(), "x__1");
223+
EXPECT_EQ(proc->GetStateRead(int64_t{0})->GetName(), "x");
226224
EXPECT_EQ(proc->GetStateElement(0)->initial_value(), Value(UBits(42, 32)));
227225
EXPECT_THAT(
228226
proc->next_values(proc->GetStateRead(int64_t{0})),
@@ -242,7 +240,7 @@ TEST_P(ProcStateFlatteningPassTest, TrivialTupleStateWithNextExpression) {
242240

243241
EXPECT_EQ(proc->GetStateElementCount(), 1);
244242

245-
EXPECT_EQ(proc->GetStateRead(int64_t{0})->GetName(), "x__1");
243+
EXPECT_EQ(proc->GetStateRead(int64_t{0})->GetName(), "x");
246244
EXPECT_EQ(proc->GetStateElement(0)->initial_value(), Value(UBits(42, 32)));
247245
EXPECT_THAT(proc->next_values(proc->GetStateRead(int64_t{0})),
248246
UnorderedElementsAre(
@@ -287,7 +285,7 @@ TEST_P(ProcStateFlatteningPassTest, ComplicatedState) {
287285
proc->next_values(proc->GetStateRead(2)),
288286
UnorderedElementsAre(m::Next(m::StateRead("a_2"), m::StateRead("c_1"))));
289287

290-
EXPECT_EQ(proc->GetStateRead(3)->GetName(), "b__1");
288+
EXPECT_EQ(proc->GetStateRead(3)->GetName(), "b");
291289
EXPECT_THAT(
292290
proc->next_values(proc->GetStateRead(3)),
293291
UnorderedElementsAre(m::Next(m::StateRead("b"), m::StateRead("a_0"))));

0 commit comments

Comments
 (0)