From 0e30f20be33b04fc22025e94c240dfceaf0161bb Mon Sep 17 00:00:00 2001 From: "Emil J. Tywoniak" Date: Mon, 26 Jan 2026 12:02:09 +0100 Subject: [PATCH] proc_mux: include switch expression location in $eq src (cherry picked from commit 383daa1eb3a64d4239f0ecd43f65d936c6a1a5f0) --- passes/proc/proc_mux.cc | 9 +++++++-- tests/proc/proc_mux_src.ys | 6 +++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/passes/proc/proc_mux.cc b/passes/proc/proc_mux.cc index f6517af3c..64d863e95 100644 --- a/passes/proc/proc_mux.cc +++ b/passes/proc/proc_mux.cc @@ -242,8 +242,13 @@ struct MuxGenCtx { // create compare cell RTLIL::Cell *eq_cell = mod->addCell(mod->design->twines.add(std::string{stringf("%s_CMP%d", sstr.str(), cmp_wire->width)}), ifxmode ? TW($eqx) : TW($eq)); apply_attrs(eq_cell, cs); - if (cs->compare_src != Twine::Null) - eq_cell->set_src_attribute(cs->compare_src); + std::vector eq_sources; + if (sw->signal_src != Twine::Null) + eq_sources.push_back(sw->signal_src); + if (cs->compare_src != Twine::Null && cs->compare_src != sw->signal_src) + eq_sources.push_back(cs->compare_src); + if (!eq_sources.empty()) + eq_cell->set_src_attribute(mod->design->twines.concat(std::span{eq_sources})); eq_cell->parameters[ID::A_SIGNED] = RTLIL::Const(0); eq_cell->parameters[ID::B_SIGNED] = RTLIL::Const(0); diff --git a/tests/proc/proc_mux_src.ys b/tests/proc/proc_mux_src.ys index d72977a1c..1f41f7f5f 100644 --- a/tests/proc/proc_mux_src.ys +++ b/tests/proc/proc_mux_src.ys @@ -1,10 +1,10 @@ read_verilog proc_mux_src.v proc -noopt check -assert -# eq refer to the values compared against +# eq refer to both sides of the comparison of switch signal vs case value select -assert-count 2 tiny2/t:$eq -select -assert-count 1 tiny2/t:$eq a:src=proc_mux_src.v:81.4-81.10 %i -select -assert-count 1 tiny2/t:$eq a:src=proc_mux_src.v:84.4-84.10 %i +select -assert-count 1 tiny2/t:$eq a:src=proc_mux_src.v:80.9-80.11|proc_mux_src.v:81.4-81.10 %i +select -assert-count 1 tiny2/t:$eq a:src=proc_mux_src.v:80.9-80.11|proc_mux_src.v:84.4-84.10 %i # Flops cover the assigned to wire and whole process select -assert-count 1 tiny2/t:$dff select -assert-count 1 tiny2/t:$dff a:src=proc_mux_src.v:76.19-76.22|proc_mux_src.v:78.2-91.5