summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-08-12 17:35:22 +0200
committerClifford Wolf <clifford@clifford.at>2014-08-12 17:35:22 +0200
commit9d353fc543295db7d6f4b4ba60c2b66a509b3ee2 (patch)
tree0777ef4983eff07323064ff5e55d853ef18ad815
parent1dd8252169654c2bc8cb96a90141a333d3ccd4f6 (diff)
Fixed handling of constant-true branches in proc_clean
-rw-r--r--passes/proc/proc_clean.cc3
-rw-r--r--passes/proc/proc_rmdead.cc2
2 files changed, 3 insertions, 2 deletions
diff --git a/passes/proc/proc_clean.cc b/passes/proc/proc_clean.cc
index 13be0ddb..1e3dd9ce 100644
--- a/passes/proc/proc_clean.cc
+++ b/passes/proc/proc_clean.cc
@@ -59,7 +59,8 @@ void proc_clean_switch(RTLIL::SwitchRule *sw, RTLIL::CaseRule *parent, bool &did
sw->signal = RTLIL::SigSpec();
}
- if (sw->cases.size() == 1 && (sw->signal.size() == 0 || sw->cases[0]->compare.empty()))
+ if (parent->switches.front() == sw && sw->cases.size() == 1 &&
+ (sw->signal.size() == 0 || sw->cases[0]->compare.empty()))
{
did_something = true;
for (auto &action : sw->cases[0]->actions)
diff --git a/passes/proc/proc_rmdead.cc b/passes/proc/proc_rmdead.cc
index 61844d5e..fe3532da 100644
--- a/passes/proc/proc_rmdead.cc
+++ b/passes/proc/proc_rmdead.cc
@@ -31,7 +31,7 @@ static void proc_rmdead(RTLIL::SwitchRule *sw, int &counter)
for (size_t i = 0; i < sw->cases.size(); i++)
{
- bool is_default = sw->cases[i]->compare.size() == 0 && !pool.empty();
+ bool is_default = SIZE(sw->cases[i]->compare) == 0 && (!pool.empty() || SIZE(sw->signal) == 0);
for (size_t j = 0; j < sw->cases[i]->compare.size(); j++) {
RTLIL::SigSpec sig = sw->cases[i]->compare[j];