mirror of https://github.com/YosysHQ/yosys.git
Fix wreduce speed more
This commit is contained in:
parent
f7dbfcb278
commit
ae2ed5e82a
|
|
@ -78,6 +78,7 @@ struct ModIndex : public RTLIL::Monitor
|
||||||
SigMap sigmap;
|
SigMap sigmap;
|
||||||
RTLIL::Module *module;
|
RTLIL::Module *module;
|
||||||
std::map<RTLIL::SigBit, SigBitInfo> database;
|
std::map<RTLIL::SigBit, SigBitInfo> database;
|
||||||
|
int reload_counter;
|
||||||
int auto_reload_counter;
|
int auto_reload_counter;
|
||||||
bool auto_reload_module;
|
bool auto_reload_module;
|
||||||
|
|
||||||
|
|
@ -106,6 +107,10 @@ struct ModIndex : public RTLIL::Monitor
|
||||||
|
|
||||||
void reload_module(bool reset_sigmap = true)
|
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) {
|
if (reset_sigmap) {
|
||||||
sigmap.clear();
|
sigmap.clear();
|
||||||
sigmap.set(module);
|
sigmap.set(module);
|
||||||
|
|
@ -231,6 +236,7 @@ struct ModIndex : public RTLIL::Monitor
|
||||||
|
|
||||||
ModIndex(RTLIL::Module *_m) : sigmap(_m), module(_m)
|
ModIndex(RTLIL::Module *_m) : sigmap(_m), module(_m)
|
||||||
{
|
{
|
||||||
|
reload_counter = 0;
|
||||||
auto_reload_counter = 0;
|
auto_reload_counter = 0;
|
||||||
auto_reload_module = true;
|
auto_reload_module = true;
|
||||||
module->monitors.insert(this);
|
module->monitors.insert(this);
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,8 @@ struct WreduceWorker
|
||||||
for (int i = GetSize(sig_y)-1; i >= 0; i--)
|
for (int i = GetSize(sig_y)-1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
auto info = mi.query(sig_y[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]))) {
|
if (!info->is_output && GetSize(info->ports) <= 1 && !keep_bits.count(mi.sigmap(sig_y[i]))) {
|
||||||
bits_removed.push_back(State::Sx);
|
bits_removed.push_back(State::Sx);
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -408,6 +410,8 @@ struct WreduceWorker
|
||||||
break;
|
break;
|
||||||
|
|
||||||
auto info = mi.query(bit);
|
auto info = mi.query(bit);
|
||||||
|
if (info == nullptr)
|
||||||
|
return;
|
||||||
if (info->is_output || GetSize(info->ports) > 1)
|
if (info->is_output || GetSize(info->ports) > 1)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -566,6 +570,10 @@ struct WreduceWorker
|
||||||
for (int i = GetSize(w)-1; i >= 0; i--) {
|
for (int i = GetSize(w)-1; i >= 0; i--) {
|
||||||
SigBit bit(w, i);
|
SigBit bit(w, i);
|
||||||
auto info = mi.query(bit);
|
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))
|
if (info && (info->is_input || info->is_output || GetSize(info->ports) > 0))
|
||||||
break;
|
break;
|
||||||
unused_top_bits++;
|
unused_top_bits++;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue