Clean up `passes/techmap/extract.cc`.
authorAlberto Gonzalez <boqwxp@airmail.cc>
Sun, 5 Apr 2020 19:36:23 +0000 (19:36 +0000)
committerAlberto Gonzalez <boqwxp@airmail.cc>
Sun, 5 Apr 2020 19:36:23 +0000 (19:36 +0000)
passes/techmap/extract.cc

index aea958f0fc19694c53fc7ea645d07542a024fc60..f290447902bf286862e8b916d7834d0aac8e678a 100644 (file)
@@ -29,8 +29,6 @@
 USING_YOSYS_NAMESPACE
 PRIVATE_NAMESPACE_BEGIN
 
-using RTLIL::id2cstr;
-
 class SubCircuitSolver : public SubCircuit::Solver
 {
 public:
@@ -121,8 +119,8 @@ public:
 
                if (wire_attr.size() > 0)
                {
-                       RTLIL::Wire *lastNeedleWire = NULL;
-                       RTLIL::Wire *lastHaystackWire = NULL;
+                       RTLIL::Wire *lastNeedleWire = nullptr;
+                       RTLIL::Wire *lastHaystackWire = nullptr;
                        dict<RTLIL::IdString, RTLIL::Const> emptyAttr;
 
                        for (auto &conn : needleCell->connections())
@@ -149,27 +147,27 @@ struct bit_ref_t {
        int bit;
 };
 
-bool module2graph(SubCircuit::Graph &graph, RTLIL::Module *mod, bool constports, RTLIL::Design *sel = NULL,
-               int max_fanout = -1, std::set<std::pair<RTLIL::IdString, RTLIL::IdString>> *split = NULL)
+bool module2graph(SubCircuit::Graph &graph, RTLIL::Module *mod, bool constports, RTLIL::Design *sel = nullptr,
+               int max_fanout = -1, std::set<std::pair<RTLIL::IdString, RTLIL::IdString>> *split = nullptr)
 {
        SigMap sigmap(mod);
        std::map<RTLIL::SigBit, bit_ref_t> sig_bit_ref;
 
        if (sel && !sel->selected(mod)) {
-               log("  Skipping module %s as it is not selected.\n", id2cstr(mod->name));
+               log("  Skipping module %s as it is not selected.\n", log_id(mod->name));
                return false;
        }
 
        if (mod->processes.size() > 0) {
-               log("  Skipping module %s as it contains unprocessed processes.\n", id2cstr(mod->name));
+               log("  Skipping module %s as it contains unprocessed processes.\n", log_id(mod->name));
                return false;
        }
 
        if (constports) {
-               graph.createNode("$const$0", "$const$0", NULL, true);
-               graph.createNode("$const$1", "$const$1", NULL, true);
-               graph.createNode("$const$x", "$const$x", NULL, true);
-               graph.createNode("$const$z", "$const$z", NULL, true);
+               graph.createNode("$const$0", "$const$0", nullptr, true);
+               graph.createNode("$const$1", "$const$1", nullptr, true);
+               graph.createNode("$const$x", "$const$x", nullptr, true);
+               graph.createNode("$const$z", "$const$z", nullptr, true);
                graph.createPort("$const$0", "\\Y", 1);
                graph.createPort("$const$1", "\\Y", 1);
                graph.createPort("$const$x", "\\Y", 1);
@@ -182,28 +180,26 @@ bool module2graph(SubCircuit::Graph &graph, RTLIL::Module *mod, bool constports,
 
        std::map<std::pair<RTLIL::Wire*, int>, int> sig_use_count;
        if (max_fanout > 0)
-               for (auto &cell_it : mod->cells_)
+               for (auto cell : mod->cells())
                {
-                       RTLIL::Cell *cell = cell_it.second;
                        if (!sel || sel->selected(mod, cell))
                                for (auto &conn : cell->connections()) {
                                        RTLIL::SigSpec conn_sig = conn.second;
                                        sigmap.apply(conn_sig);
                                        for (auto &bit : conn_sig)
-                                               if (bit.wire != NULL)
+                                               if (bit.wire != nullptr)
                                                        sig_use_count[std::pair<RTLIL::Wire*, int>(bit.wire, bit.offset)]++;
                                }
                }
 
        // create graph nodes from cells
-       for (auto &cell_it : mod->cells_)
+       for (auto cell : mod->cells())
        {
-               RTLIL::Cell *cell = cell_it.second;
                if (sel && !sel->selected(mod, cell))
                        continue;
 
                std::string type = cell->type.str();
-               if (sel == NULL && type.compare(0, 2, "\\$") == 0)
+               if (sel == nullptr && type.compare(0, 2, "\\$") == 0)
                        type = type.substr(1);
                graph.createNode(cell->name.str(), type, (void*)cell);
 
@@ -221,7 +217,7 @@ bool module2graph(SubCircuit::Graph &graph, RTLIL::Module *mod, bool constports,
                        {
                                auto &bit = conn_sig[i];
 
-                               if (bit.wire == NULL) {
+                               if (bit.wire == nullptr) {
                                        if (constports) {
                                                std::string node = "$const$x";
                                                if (bit == RTLIL::State::S0) node = "$const$0";
@@ -253,9 +249,8 @@ bool module2graph(SubCircuit::Graph &graph, RTLIL::Module *mod, bool constports,
        }
 
        // mark external signals (used in non-selected cells)
-       for (auto &cell_it : mod->cells_)
+       for (auto cell : mod->cells())
        {
-               RTLIL::Cell *cell = cell_it.second;
                if (sel && !sel->selected(mod, cell))
                        for (auto &conn : cell->connections())
                        {
@@ -271,9 +266,8 @@ bool module2graph(SubCircuit::Graph &graph, RTLIL::Module *mod, bool constports,
        }
 
        // mark external signals (used in module ports)
-       for (auto &wire_it : mod->wires_)
+       for (auto wire : mod->wires())
        {
-               RTLIL::Wire *wire = wire_it.second;
                if (wire->port_id > 0)
                {
                        RTLIL::SigSpec conn_sig(wire);
@@ -300,8 +294,7 @@ RTLIL::Cell *replace(RTLIL::Module *needle, RTLIL::Module *haystack, SubCircuit:
        RTLIL::Cell *cell = haystack->addCell(stringf("$extract$%s$%d", needle->name.c_str(), autoidx++), needle->name);
 
        // create cell ports
-       for (auto &it : needle->wires_) {
-               RTLIL::Wire *wire = it.second;
+       for (auto wire : needle->wires()) {
                if (wire->port_id > 0) {
                        for (int i = 0; i < wire->width; i++)
                                sig2port.insert(sigmap(RTLIL::SigSpec(wire, i)), std::pair<RTLIL::IdString, int>(wire->name, i));
@@ -316,7 +309,7 @@ RTLIL::Cell *replace(RTLIL::Module *needle, RTLIL::Module *haystack, SubCircuit:
                RTLIL::Cell *needle_cell = (RTLIL::Cell*)mapping.needleUserData;
                RTLIL::Cell *haystack_cell = (RTLIL::Cell*)mapping.haystackUserData;
 
-               if (needle_cell == NULL)
+               if (needle_cell == nullptr)
                        continue;
 
                for (auto &conn : needle_cell->connections()) {
@@ -587,7 +580,7 @@ struct ExtractPass : public Pass {
                if (map_filenames.empty() && mine_outfile.empty())
                        log_cmd_error("Missing option -map <verilog_or_ilang_file> or -mine <output_ilang_file>.\n");
 
-               RTLIL::Design *map = NULL;
+               RTLIL::Design *map = nullptr;
 
                if (!mine_mode)
                {
@@ -630,24 +623,24 @@ struct ExtractPass : public Pass {
                log_header(design, "Creating graphs for SubCircuit library.\n");
 
                if (!mine_mode)
-                       for (auto &mod_it : map->modules_) {
+                       for (auto module : map->modules()) {
                                SubCircuit::Graph mod_graph;
-                               std::string graph_name = "needle_" + RTLIL::unescape_id(mod_it.first);
+                               std::string graph_name = "needle_" + RTLIL::unescape_id(module->name);
                                log("Creating needle graph %s.\n", graph_name.c_str());
-                               if (module2graph(mod_graph, mod_it.second, constports)) {
+                               if (module2graph(mod_graph, module, constports)) {
                                        solver.addGraph(graph_name, mod_graph);
-                                       needle_map[graph_name] = mod_it.second;
-                                       needle_list.push_back(mod_it.second);
+                                       needle_map[graph_name] = module;
+                                       needle_list.push_back(module);
                                }
                        }
 
-               for (auto &mod_it : design->modules_) {
+               for (auto module : design->modules()) {
                        SubCircuit::Graph mod_graph;
-                       std::string graph_name = "haystack_" + RTLIL::unescape_id(mod_it.first);
+                       std::string graph_name = "haystack_" + RTLIL::unescape_id(module->name);
                        log("Creating haystack graph %s.\n", graph_name.c_str());
-                       if (module2graph(mod_graph, mod_it.second, constports, design, mine_mode ? mine_max_fanout : -1, mine_mode ? &mine_split : NULL)) {
+                       if (module2graph(mod_graph, module, constports, design, mine_mode ? mine_max_fanout : -1, mine_mode ? &mine_split : nullptr)) {
                                solver.addGraph(graph_name, mod_graph);
-                               haystack_map[graph_name] = mod_it.second;
+                               haystack_map[graph_name] = module;
                        }
                }
 
@@ -680,7 +673,7 @@ struct ExtractPass : public Pass {
                                        }
                                        RTLIL::Cell *new_cell = replace(needle_map.at(result.needleGraphId), haystack_map.at(result.haystackGraphId), result);
                                        design->select(haystack_map.at(result.haystackGraphId), new_cell);
-                                       log("  new cell: %s\n", id2cstr(new_cell->name));
+                                       log("  new cell: %s\n", log_id(new_cell->name));
                                }
                        }
                }
@@ -697,12 +690,12 @@ struct ExtractPass : public Pass {
                        for (auto &result: results)
                        {
                                log("\nFrequent SubCircuit with %d nodes and %d matches:\n", int(result.nodes.size()), result.totalMatchesAfterLimits);
-                               log("  primary match in %s:", id2cstr(haystack_map.at(result.graphId)->name));
+                               log("  primary match in %s:", log_id(haystack_map.at(result.graphId)->name));
                                for (auto &node : result.nodes)
                                        log(" %s", RTLIL::unescape_id(node.nodeId).c_str());
                                log("\n");
                                for (auto &it : result.matchesPerGraph)
-                                       log("  matches in %s: %d\n", id2cstr(haystack_map.at(it.first)->name), it.second);
+                                       log("  matches in %s: %d\n", log_id(haystack_map.at(it.first)->name), it.second);
 
                                RTLIL::Module *mod = haystack_map.at(result.graphId);
                                std::set<RTLIL::Cell*> cells;
@@ -717,12 +710,12 @@ struct ExtractPass : public Pass {
                                for (auto &conn : cell->connections()) {
                                        RTLIL::SigSpec sig = sigmap(conn.second);
                                        for (auto &chunk : sig.chunks())
-                                               if (chunk.wire != NULL)
+                                               if (chunk.wire != nullptr)
                                                        wires.insert(chunk.wire);
                                }
 
                                RTLIL::Module *newMod = new RTLIL::Module;
-                               newMod->name = stringf("\\needle%05d_%s_%dx", needleCounter++, id2cstr(haystack_map.at(result.graphId)->name), result.totalMatchesAfterLimits);
+                               newMod->name = stringf("\\needle%05d_%s_%dx", needleCounter++, log_id(haystack_map.at(result.graphId)->name), result.totalMatchesAfterLimits);
                                map->add(newMod);
 
                                for (auto wire : wires) {
@@ -739,8 +732,8 @@ struct ExtractPass : public Pass {
                                        for (auto &conn : cell->connections()) {
                                                std::vector<SigChunk> chunks = sigmap(conn.second);
                                                for (auto &chunk : chunks)
-                                                       if (chunk.wire != NULL)
-                                                               chunk.wire = newMod->wires_.at(chunk.wire->name);
+                                                       if (chunk.wire != nullptr)
+                                                               chunk.wire = newMod->wire(chunk.wire->name);
                                                newCell->setPort(conn.first, chunks);
                                        }
                                }