aboutsummaryrefslogtreecommitdiffstats
path: root/passes/opt/pmux2shiftx.cc
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2019-04-20 18:13:37 +0200
committerClifford Wolf <clifford@clifford.at>2019-04-20 18:13:37 +0200
commitfc23af170768926e645b6c94c54b4c2e6e8d0808 (patch)
tree76428161a9ca1b3a46bb97045d6fcdfc9c7b2a58 /passes/opt/pmux2shiftx.cc
parent97e9caa4fa1f874b693a9d948f48418f22babb6c (diff)
downloadyosys-fc23af170768926e645b6c94c54b4c2e6e8d0808.tar.gz
yosys-fc23af170768926e645b6c94c54b4c2e6e8d0808.tar.bz2
yosys-fc23af170768926e645b6c94c54b4c2e6e8d0808.zip
Auto-initialize OnehotDatabase on-demand in pmux2shiftx.cc
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'passes/opt/pmux2shiftx.cc')
-rw-r--r--passes/opt/pmux2shiftx.cc11
1 files changed, 7 insertions, 4 deletions
diff --git a/passes/opt/pmux2shiftx.cc b/passes/opt/pmux2shiftx.cc
index 5fd49a571..5f897b131 100644
--- a/passes/opt/pmux2shiftx.cc
+++ b/passes/opt/pmux2shiftx.cc
@@ -28,6 +28,7 @@ struct OnehotDatabase
Module *module;
const SigMap &sigmap;
bool verbose = false;
+ bool initialized = false;
pool<SigBit> init_ones;
dict<SigSpec, pool<SigSpec>> sig_sources_db;
@@ -40,6 +41,9 @@ struct OnehotDatabase
void initialize()
{
+ log_assert(!initialized);
+ initialized = true;
+
for (auto wire : module->wires())
{
auto it = wire->attributes.find("\\init");
@@ -176,6 +180,9 @@ struct OnehotDatabase
if (verbose)
log("** ONEHOT QUERY START (%s)\n", log_signal(sig));
+ if (!initialized)
+ initialize();
+
query_worker(sig, retval, cache, 3);
if (verbose)
@@ -273,9 +280,6 @@ struct Pmux2ShiftxPass : public Pass {
OnehotDatabase onehot_db(module, sigmap);
onehot_db.verbose = verbose_onehot;
- if (optimize_onehot)
- onehot_db.initialize();
-
dict<SigBit, pair<SigSpec, Const>> eqdb;
for (auto cell : module->cells())
@@ -743,7 +747,6 @@ struct OnehotPass : public Pass {
SigMap sigmap(module);
OnehotDatabase onehot_db(module, sigmap);
onehot_db.verbose = verbose_onehot;
- onehot_db.initialize();
for (auto cell : module->selected_cells())
{