diff --git a/kernel/consteval.h b/kernel/consteval.h index 844120ef0..adcf86f8a 100644 --- a/kernel/consteval.h +++ b/kernel/consteval.h @@ -349,7 +349,11 @@ struct ConstEval return false; bool eval_err = false; - RTLIL::Const eval_ret = CellTypes::eval(cell, sig_a.as_const(), sig_b.as_const(), sig_c.as_const(), sig_d.as_const(), &eval_err); + RTLIL::Const eval_ret; + if (sig_s.size() > 0 && eval(sig_s, undef, cell)) { + eval_ret = CellTypes::eval(cell, sig_a.as_const(), sig_b.as_const(), sig_s.as_const(), &eval_err); + } else + eval_ret = CellTypes::eval(cell, sig_a.as_const(), sig_b.as_const(), sig_c.as_const(), sig_d.as_const(), &eval_err); if (eval_err) return false; diff --git a/passes/tests/test_cell.cc b/passes/tests/test_cell.cc index 3a7e413ee..068386b49 100644 --- a/passes/tests/test_cell.cc +++ b/passes/tests/test_cell.cc @@ -1044,9 +1044,7 @@ struct TestCellPass : public Pass { // $pmux doesn't work in sat, and is not supported with 'techmap -assert' if (nosat && techmap_cmd.compare("aigmap") == 0) cell_types[ID($pmux)] = "*"; - // $bwmux is not supported by ConstEval - if (noeval) - cell_types[ID($bwmux)] = "A"; + cell_types[ID($bwmux)] = "A"; cell_types[ID($slice)] = "A"; cell_types[ID($concat)] = "AB";