initialize more registers in setundef -init
authorJakob Wenzel <wenzel@rs.tu-darmstadt.de>
Thu, 9 May 2019 10:37:31 +0000 (12:37 +0200)
committerJakob Wenzel <wenzel@rs.tu-darmstadt.de>
Thu, 9 May 2019 10:47:16 +0000 (12:47 +0200)
passes/cmds/setundef.cc

index f6949c820c7db759b1280cf7f5e4c5216c698385..5b43d528cc41f6895312f288b53a0c3f60ac7d8a 100644 (file)
@@ -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)
                                {