Skip to content

Commit

Permalink
proc_clean: only consider fully-defined switch operands too.
Browse files Browse the repository at this point in the history
  • Loading branch information
charlottia authored and mwkmwkmwk committed Aug 12, 2023
1 parent bf84861 commit 860e3e4
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
2 changes: 1 addition & 1 deletion passes/proc/proc_clean.cc
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ PRIVATE_NAMESPACE_BEGIN

void proc_clean_switch(RTLIL::SwitchRule *sw, RTLIL::CaseRule *parent, bool &did_something, int &count, int max_depth)
{
if (sw->signal.size() > 0 && sw->signal.is_fully_const())
if (sw->signal.size() > 0 && sw->signal.is_fully_def())
{
int found_matching_case_idx = -1;
for (int i = 0; i < int(sw->cases.size()) && found_matching_case_idx < 0; i++)
Expand Down
19 changes: 17 additions & 2 deletions tests/proc/clean_undef_case.ys
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
read_rtlil <<EOT

module \m
module \a
wire width 1 \w
process $p
switch 3'001
Expand All @@ -14,9 +14,24 @@ module \m
end
end

module \b
wire width 1 \w
process $p
switch 3'--1
case 3'001
assign \w 3'001
case 3'010
assign \w 3'010
case 3'100
assign \w 3'100
end
end
end

EOT

proc_clean # Bug: removes the cases.
proc_clean # Removes the now-empty switch and its containing process.

select -assert-count 1 */p:*
select -assert-count 1 a/p:*
select -assert-count 1 b/p:*

0 comments on commit 860e3e4

Please sign in to comment.