diff options
author | Clifford Wolf <clifford@clifford.at> | 2014-09-21 15:13:06 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2014-09-21 15:13:06 +0200 |
commit | b28be0759f46326d4d2a7ac74f1d1f79477435da (patch) | |
tree | 33e35fabe9372f43138b3ff61c6f55391ad5a6d9 /passes | |
parent | a6c08b40fe281a69e1e6cb369b73c55ab6192f45 (diff) | |
download | yosys-b28be0759f46326d4d2a7ac74f1d1f79477435da.tar.gz yosys-b28be0759f46326d4d2a7ac74f1d1f79477435da.tar.bz2 yosys-b28be0759f46326d4d2a7ac74f1d1f79477435da.zip |
Added "share -limit"
Diffstat (limited to 'passes')
-rw-r--r-- | passes/opt/share.cc | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/passes/opt/share.cc b/passes/opt/share.cc index cdda29349..5ed9af009 100644 --- a/passes/opt/share.cc +++ b/passes/opt/share.cc @@ -27,6 +27,7 @@ PRIVATE_NAMESPACE_BEGIN struct ShareWorkerConfig { + int limit; bool opt_force; bool opt_aggressive; bool opt_fast; @@ -751,7 +752,7 @@ struct ShareWorker log("Found %d cells in module %s that may be considered for resource sharing.\n", SIZE(shareable_cells), log_id(module)); - while (!shareable_cells.empty()) + while (!shareable_cells.empty() && config.limit != 0) { RTLIL::Cell *cell = *shareable_cells.begin(); shareable_cells.erase(cell); @@ -959,6 +960,9 @@ struct ShareWorker for (auto c : topo_bit_drivers[bit]) topo_cell_drivers[cell].insert(c); + if (config.limit > 0) + config.limit--; + topo_cell_drivers[cell].insert(topo_cell_drivers[other_cell].begin(), topo_cell_drivers[other_cell].end()); topo_cell_drivers[other_cell] = topo_cell_drivers[cell]; break; @@ -1013,11 +1017,15 @@ struct SharePass : public Pass { log(" in much easier SAT problems at the cost of maybe missing some oportunities\n"); log(" for resource sharing.\n"); log("\n"); + log(" -limit N\n"); + log(" Only perform the first N merges, then stop. This is useful for debugging.\n"); + log("\n"); } virtual void execute(std::vector<std::string> args, RTLIL::Design *design) { ShareWorkerConfig config; + config.limit = -1; config.opt_force = false; config.opt_aggressive = false; config.opt_fast = false; @@ -1073,6 +1081,10 @@ struct SharePass : public Pass { config.opt_fast = true; continue; } + if (args[argidx] == "-limit" && argidx+1 < args.size()) { + config.limit = atoi(args[++argidx].c_str()); + continue; + } break; } extra_args(args, argidx, design); |