scc to use design->selected_modules() which avoids black/white-boxes
authorEddie Hung <eddie@fpgeh.com>
Mon, 6 Jan 2020 20:36:11 +0000 (12:36 -0800)
committerEddie Hung <eddie@fpgeh.com>
Tue, 7 Jan 2020 23:46:36 +0000 (15:46 -0800)
passes/cmds/scc.cc

index 99f4fbae8799ff5c19c1b99d94154ab35c95d260..ad0554baeb52cb45015fccdb97f67bb845205201 100644 (file)
@@ -301,42 +301,41 @@ struct SccPass : public Pass {
                RTLIL::Selection newSelection(false);
                int scc_counter = 0;
 
-               for (auto &mod_it : design->modules_)
-                       if (design->selected(mod_it.second))
-                       {
-                               SccWorker worker(design, mod_it.second, nofeedbackMode, allCellTypes, maxDepth);
+               for (auto mod : design->selected_modules())
+               {
+                       SccWorker worker(design, mod, nofeedbackMode, allCellTypes, maxDepth);
 
-                               if (!setAttr.empty())
+                       if (!setAttr.empty())
+                       {
+                               for (const auto &cells : worker.sccList)
                                {
-                                       for (const auto &cells : worker.sccList)
+                                       for (auto attr : setAttr)
                                        {
-                                               for (auto attr : setAttr)
-                                               {
-                                                       IdString attr_name(RTLIL::escape_id(attr.first));
-                                                       string attr_valstr = attr.second;
-                                                       string index = stringf("%d", scc_counter);
-
-                                                       for (size_t pos = 0; (pos = attr_valstr.find("{}", pos)) != string::npos; pos += index.size())
-                                                               attr_valstr.replace(pos, 2, index);
+                                               IdString attr_name(RTLIL::escape_id(attr.first));
+                                               string attr_valstr = attr.second;
+                                               string index = stringf("%d", scc_counter);
 
-                                                       Const attr_value(attr_valstr);
+                                               for (size_t pos = 0; (pos = attr_valstr.find("{}", pos)) != string::npos; pos += index.size())
+                                                       attr_valstr.replace(pos, 2, index);
 
-                                                       for (auto cell : cells)
-                                                               cell->attributes[attr_name] = attr_value;
-                                               }
+                                               Const attr_value(attr_valstr);
 
-                                               scc_counter++;
+                                               for (auto cell : cells)
+                                                       cell->attributes[attr_name] = attr_value;
                                        }
-                               }
-                               else
-                               {
-                                       scc_counter += GetSize(worker.sccList);
-                               }
 
-                               if (selectMode)
-                                       worker.select(newSelection);
+                                       scc_counter++;
+                               }
+                       }
+                       else
+                       {
+                               scc_counter += GetSize(worker.sccList);
                        }
 
+                       if (selectMode)
+                               worker.select(newSelection);
+               }
+
                if (expect >= 0) {
                        if (scc_counter == expect)
                                log("Found and expected %d SCCs.\n", scc_counter);