3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-07 09:55:20 +00:00

Bugfix in wreduce

This commit is contained in:
Clifford Wolf 2015-02-16 09:08:00 +01:00
parent 162432a722
commit 0748ef638d

View file

@ -281,6 +281,10 @@ struct WreduceWorker
work_queue_cells.insert(port.cell); work_queue_cells.insert(port.cell);
} }
pool<SigSpec> complete_wires;
for (auto w : module->wires())
complete_wires.insert(mi.sigmap(w));
for (auto w : module->selected_wires()) for (auto w : module->selected_wires())
{ {
int unused_top_bits = 0; int unused_top_bits = 0;
@ -296,15 +300,18 @@ struct WreduceWorker
unused_top_bits++; unused_top_bits++;
} }
if (0 < unused_top_bits && unused_top_bits < GetSize(w)) { if (unused_top_bits == 0 || unused_top_bits == GetSize(w))
continue;
if (complete_wires[mi.sigmap(w).extract(0, GetSize(w) - unused_top_bits)])
continue;
log("Removed top %d bits (of %d) from wire %s.%s.\n", unused_top_bits, GetSize(w), log_id(module), log_id(w)); log("Removed top %d bits (of %d) from wire %s.%s.\n", unused_top_bits, GetSize(w), log_id(module), log_id(w));
Wire *nw = module->addWire(NEW_ID, w); Wire *nw = module->addWire(NEW_ID, GetSize(w) - unused_top_bits);
nw->width = GetSize(w) - unused_top_bits;
module->connect(nw, SigSpec(w).extract(0, GetSize(nw))); module->connect(nw, SigSpec(w).extract(0, GetSize(nw)));
module->swap_names(w, nw); module->swap_names(w, nw);
} }
} }
}
}; };
struct WreducePass : public Pass { struct WreducePass : public Pass {