mirror of
https://github.com/YosysHQ/yosys
synced 2026-07-17 12:45:44 +00:00
opt_prienc: give each round-robin req candidate its own fingerprint budget
The max_pairs budget was a single running counter shared across all req_wire iterations, so once a start-candidate-heavy first req size exhausted it, every later req size broke on its first start candidate and was silently skipped. Reset the budget per req_wire so all req sizes get a fair chance. (Completeness only; fingerprint_rr still validates every match, so this never affected correctness.) Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
00e48706df
commit
f5c54e5905
1 changed files with 4 additions and 1 deletions
|
|
@ -782,7 +782,6 @@ struct OptPriEncWorker {
|
|||
std::sort(req_cands.begin(), req_cands.end(),
|
||||
[](Wire* a, Wire* b) { return a->width > b->width; });
|
||||
|
||||
int pairs = 0;
|
||||
bool matched = false;
|
||||
for (Wire* req_wire : req_cands) {
|
||||
if (matched) break;
|
||||
|
|
@ -791,6 +790,10 @@ struct OptPriEncWorker {
|
|||
pool<SigBit> req_bits;
|
||||
for (auto bit : req_sig)
|
||||
if (bit.wire) req_bits.insert(bit);
|
||||
// Per-req_wire fingerprint budget: a start-candidate-heavy
|
||||
// first req size must not exhaust a shared budget and starve
|
||||
// later (narrower) req sizes.
|
||||
int pairs = 0;
|
||||
for (Wire* start_wire : start_cands) {
|
||||
if (start_wire == req_wire) continue;
|
||||
if (++pairs > max_pairs) break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue