diff --git a/passes/opt/opt_expr.cc b/passes/opt/opt_expr.cc index 238006b1d..48f30883a 100644 --- a/passes/opt/opt_expr.cc +++ b/passes/opt/opt_expr.cc @@ -1206,8 +1206,13 @@ skip_fine_alu: replace_cell(assign_map, module, cell, "isneq", ID::Y, new_y); goto next_cell; } - if (a[i] == b[i]) - continue; + if (keepdc) { + if (!a[i].is_wire() && !b[i].is_wire() && a[i].data != RTLIL::State::Sx && b[i].data != RTLIL::State::Sx && a[i] == b[i]) + continue; + } else { + if (a[i] == b[i]) + continue; + } new_a.append(a[i]); new_b.append(b[i]); }