Fix wreduce speed more

This commit is contained in:
Akash Levy 2025-09-27 17:59:25 -07:00
parent f7dbfcb278
commit ae2ed5e82a
2 changed files with 14 additions and 0 deletions

View File

@ -78,6 +78,7 @@ struct ModIndex : public RTLIL::Monitor
SigMap sigmap;
RTLIL::Module *module;
std::map<RTLIL::SigBit, SigBitInfo> database;
int reload_counter;
int auto_reload_counter;
bool auto_reload_module;
@ -106,6 +107,10 @@ struct ModIndex : public RTLIL::Monitor
void reload_module(bool reset_sigmap = true)
{
reload_counter++;
if (reload_counter % 10 == 0)
log_warning("ModIndex::reload_module() called %d times.\n", reload_counter);
if (reset_sigmap) {
sigmap.clear();
sigmap.set(module);
@ -231,6 +236,7 @@ struct ModIndex : public RTLIL::Monitor
ModIndex(RTLIL::Module *_m) : sigmap(_m), module(_m)
{
reload_counter = 0;
auto_reload_counter = 0;
auto_reload_module = true;
module->monitors.insert(this);

View File

@ -78,6 +78,8 @@ struct WreduceWorker
for (int i = GetSize(sig_y)-1; i >= 0; i--)
{
auto info = mi.query(sig_y[i]);
if (info == nullptr)
return;
if (!info->is_output && GetSize(info->ports) <= 1 && !keep_bits.count(mi.sigmap(sig_y[i]))) {
bits_removed.push_back(State::Sx);
continue;
@ -408,6 +410,8 @@ struct WreduceWorker
break;
auto info = mi.query(bit);
if (info == nullptr)
return;
if (info->is_output || GetSize(info->ports) > 1)
break;
@ -566,6 +570,10 @@ struct WreduceWorker
for (int i = GetSize(w)-1; i >= 0; i--) {
SigBit bit(w, i);
auto info = mi.query(bit);
if (info == nullptr) {
unused_top_bits = 0;
break;
}
if (info && (info->is_input || info->is_output || GetSize(info->ports) > 0))
break;
unused_top_bits++;