mirror of
https://github.com/YosysHQ/yosys
synced 2025-07-30 07:53:16 +00:00
Improve proc full_case detection and handling, fixes #931
Signed-off-by: Clifford Wolf <clifford@clifford.at>
This commit is contained in:
parent
ea8ac0aaad
commit
88be1cbfa5
2 changed files with 63 additions and 5 deletions
|
@ -28,7 +28,7 @@
|
|||
USING_YOSYS_NAMESPACE
|
||||
PRIVATE_NAMESPACE_BEGIN
|
||||
|
||||
void proc_rmdead(RTLIL::SwitchRule *sw, int &counter)
|
||||
void proc_rmdead(RTLIL::SwitchRule *sw, int &counter, int &full_case_counter)
|
||||
{
|
||||
BitPatternPool pool(sw->signal);
|
||||
|
||||
|
@ -56,11 +56,16 @@ void proc_rmdead(RTLIL::SwitchRule *sw, int &counter)
|
|||
}
|
||||
|
||||
for (auto switch_it : sw->cases[i]->switches)
|
||||
proc_rmdead(switch_it, counter);
|
||||
proc_rmdead(switch_it, counter, full_case_counter);
|
||||
|
||||
if (is_default)
|
||||
pool.take_all();
|
||||
}
|
||||
|
||||
if (pool.empty() && !sw->get_bool_attribute("\\full_case")) {
|
||||
sw->set_bool_attribute("\\full_case");
|
||||
full_case_counter++;
|
||||
}
|
||||
}
|
||||
|
||||
struct ProcRmdeadPass : public Pass {
|
||||
|
@ -87,12 +92,15 @@ struct ProcRmdeadPass : public Pass {
|
|||
for (auto &proc_it : mod->processes) {
|
||||
if (!design->selected(mod, proc_it.second))
|
||||
continue;
|
||||
int counter = 0;
|
||||
int counter = 0, full_case_counter = 0;
|
||||
for (auto switch_it : proc_it.second->root_case.switches)
|
||||
proc_rmdead(switch_it, counter);
|
||||
proc_rmdead(switch_it, counter, full_case_counter);
|
||||
if (counter > 0)
|
||||
log("Removed %d dead cases from process %s in module %s.\n", counter,
|
||||
proc_it.first.c_str(), log_id(mod));
|
||||
log_id(proc_it.first), log_id(mod));
|
||||
if (full_case_counter > 0)
|
||||
log("Marked %d switch rules as full_case in process %s in module %s.\n",
|
||||
full_case_counter, log_id(proc_it.first), log_id(mod));
|
||||
total_counter += counter;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue