3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-06-18 11:58:32 +00:00

Merge pull request #1004 from YosysHQ/clifford/fix1002

Fix handling of glob_abort_cnt in opt_muxtree
This commit is contained in:
Clifford Wolf 2019-05-12 15:33:53 +02:00 committed by GitHub
commit 5772732a6d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -184,6 +184,10 @@ struct OptMuxtreeWorker
log_debug(" Root of a mux tree: %s%s\n", log_id(mux2info[mux_idx].cell), root_enable_muxes.at(mux_idx) ? " (pure)" : ""); log_debug(" Root of a mux tree: %s%s\n", log_id(mux2info[mux_idx].cell), root_enable_muxes.at(mux_idx) ? " (pure)" : "");
root_mux_rerun.erase(mux_idx); root_mux_rerun.erase(mux_idx);
eval_root_mux(mux_idx); eval_root_mux(mux_idx);
if (glob_abort_cnt == 0) {
log(" Giving up (too many iterations)\n");
return;
}
} }
while (!root_mux_rerun.empty()) { while (!root_mux_rerun.empty()) {
@ -192,9 +196,14 @@ struct OptMuxtreeWorker
log_assert(root_enable_muxes.at(mux_idx)); log_assert(root_enable_muxes.at(mux_idx));
root_mux_rerun.erase(mux_idx); root_mux_rerun.erase(mux_idx);
eval_root_mux(mux_idx); eval_root_mux(mux_idx);
if (glob_abort_cnt == 0) {
log(" Giving up (too many iterations)\n");
return;
}
} }
log(" Analyzing evaluation results.\n"); log(" Analyzing evaluation results.\n");
log_assert(glob_abort_cnt > 0);
for (auto &mi : mux2info) for (auto &mi : mux2info)
{ {
@ -397,10 +406,8 @@ struct OptMuxtreeWorker
void eval_mux(knowledge_t &knowledge, int mux_idx, bool do_replace_known, bool do_enable_ports, int abort_count) void eval_mux(knowledge_t &knowledge, int mux_idx, bool do_replace_known, bool do_enable_ports, int abort_count)
{ {
if (glob_abort_cnt == 0) { if (glob_abort_cnt == 0)
log(" Giving up (too many iterations)\n");
return; return;
}
glob_abort_cnt--; glob_abort_cnt--;
muxinfo_t &muxinfo = mux2info[mux_idx]; muxinfo_t &muxinfo = mux2info[mux_idx];
@ -454,6 +461,7 @@ struct OptMuxtreeWorker
void eval_root_mux(int mux_idx) void eval_root_mux(int mux_idx)
{ {
log_assert(glob_abort_cnt > 0);
knowledge_t knowledge; knowledge_t knowledge;
knowledge.known_inactive.resize(GetSize(bit2info)); knowledge.known_inactive.resize(GetSize(bit2info));
knowledge.known_active.resize(GetSize(bit2info)); knowledge.known_active.resize(GetSize(bit2info));