aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--passes/cmds/setundef.cc39
1 files changed, 23 insertions, 16 deletions
diff --git a/passes/cmds/setundef.cc b/passes/cmds/setundef.cc
index f6949c820..5b43d528c 100644
--- a/passes/cmds/setundef.cc
+++ b/passes/cmds/setundef.cc
@@ -404,22 +404,29 @@ struct SetundefPass : public Pass {
initwires.insert(wire);
}
- for (int wire_types = 0; wire_types < 2; wire_types++)
- for (auto wire : module->wires())
- {
- if (wire->name[0] == (wire_types ? '\\' : '$'))
- next_wire:
- continue;
-
- for (auto bit : sigmap(wire))
- if (!ffbits.count(bit))
- goto next_wire;
-
- for (auto bit : sigmap(wire))
- ffbits.erase(bit);
-
- initwires.insert(wire);
- }
+ for (int wire_types = 0; wire_types < 2; wire_types++) {
+ pool<SigBit> ffbitsToErase;
+ for (auto wire : module->wires()) {
+ if (wire->name[0] == (wire_types ? '\\' : '$')) {
+ next_wire:
+ continue;
+ }
+
+ for (auto bit : sigmap(wire))
+ if (!ffbits.count(bit)) {
+ goto next_wire;
+ }
+
+ for (auto bit : sigmap(wire)) {
+ ffbitsToErase.insert(bit);
+ }
+
+ initwires.insert(wire);
+ }
+ for (const auto &bit : ffbitsToErase) {
+ ffbits.erase(bit);
+ }
+ }
for (auto wire : initwires)
{