From b525a0280a4630cd3d4347c2d2f545b54e6077c2 Mon Sep 17 00:00:00 2001 From: Alain Dargelas Date: Thu, 19 Dec 2024 14:08:37 -0800 Subject: [PATCH] Move helper code to peepopt.cc, check offset --- passes/pmgen/peepopt.cc | 12 ++++++++++++ passes/pmgen/peepopt_muldiv_c.pmg | 2 +- passes/pmgen/pmgen.py | 7 ------- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/passes/pmgen/peepopt.cc b/passes/pmgen/peepopt.cc index e7a729ecb..fe4fc89e0 100644 --- a/passes/pmgen/peepopt.cc +++ b/passes/pmgen/peepopt.cc @@ -28,6 +28,9 @@ bool did_something; // scratchpad configurations for pmgen int shiftadd_max_ratio; +// Helper function, removes LSB 0s +SigSpec remove_bottom_padding(SigSpec sig); + #include "passes/pmgen/peepopt_pm.h" struct PeepoptPass : public Pass { @@ -117,4 +120,13 @@ struct PeepoptPass : public Pass { } } PeepoptPass; + +SigSpec remove_bottom_padding(SigSpec sig) +{ + int i = 0; + for (; i < sig.size() - 1 && sig[i] == State::S0; i++) { + } + return sig.extract(i, sig.size() - i); +} + PRIVATE_NAMESPACE_END diff --git a/passes/pmgen/peepopt_muldiv_c.pmg b/passes/pmgen/peepopt_muldiv_c.pmg index fff4ad2a9..5841d396e 100644 --- a/passes/pmgen/peepopt_muldiv_c.pmg +++ b/passes/pmgen/peepopt_muldiv_c.pmg @@ -60,7 +60,7 @@ code reject; if (b_const.size() > 64) reject; - if (c_const.size() > 64) + if (c_const.size() + offset > 64) reject; // Check for potential mult overflow diff --git a/passes/pmgen/pmgen.py b/passes/pmgen/pmgen.py index b07612f50..6e2fabeeb 100644 --- a/passes/pmgen/pmgen.py +++ b/passes/pmgen/pmgen.py @@ -429,13 +429,6 @@ with open(outfile, "w") as f: print(" }", file=f) print("", file=f) - print(" SigSpec remove_bottom_padding(SigSpec sig) {", file=f) - print(" int i = 0;", file=f) - print(" for (; i < sig.size() - 1 && sig[i] == State::S0; i++) {} ", file=f) - print(" return sig.extract(i, sig.size() - i);", file=f) - print(" }", file=f) - print("", file=f) - print(" void blacklist(Cell *cell) {", file=f) print(" if (cell != nullptr && blacklist_cells.insert(cell).second) {", file=f) print(" auto ptr = rollback_cache.find(cell);", file=f)