From 102f1397284980705efe3eb03cc3d3cd859e94ff Mon Sep 17 00:00:00 2001
From: Eddie Hung <eddie@fpgeh.com>
Date: Mon, 6 Jan 2020 12:36:11 -0800
Subject: [PATCH] scc to use design->selected_modules() which avoids
 black/white-boxes

---
 passes/cmds/scc.cc | 51 +++++++++++++++++++++++-----------------------
 1 file changed, 25 insertions(+), 26 deletions(-)

diff --git a/passes/cmds/scc.cc b/passes/cmds/scc.cc
index 99f4fbae8..ad0554bae 100644
--- a/passes/cmds/scc.cc
+++ b/passes/cmds/scc.cc
@@ -301,41 +301,40 @@ struct SccPass : public Pass {
 		RTLIL::Selection newSelection(false);
 		int scc_counter = 0;
 
-		for (auto &mod_it : design->modules_)
-			if (design->selected(mod_it.second))
+		for (auto mod : design->selected_modules())
+		{
+			SccWorker worker(design, mod, nofeedbackMode, allCellTypes, maxDepth);
+
+			if (!setAttr.empty())
 			{
-				SccWorker worker(design, mod_it.second, nofeedbackMode, allCellTypes, maxDepth);
-
-				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);
+						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);
+						for (size_t pos = 0; (pos = attr_valstr.find("{}", pos)) != string::npos; pos += index.size())
+							attr_valstr.replace(pos, 2, index);
 
-							Const attr_value(attr_valstr);
+						Const attr_value(attr_valstr);
 
-							for (auto cell : cells)
-								cell->attributes[attr_name] = attr_value;
-						}
-
-						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)