Auto-initialize OnehotDatabase on-demand in pmux2shiftx.cc
authorClifford Wolf <clifford@clifford.at>
Sat, 20 Apr 2019 16:13:37 +0000 (18:13 +0200)
committerClifford Wolf <clifford@clifford.at>
Sat, 20 Apr 2019 16:13:37 +0000 (18:13 +0200)
Signed-off-by: Clifford Wolf <clifford@clifford.at>
passes/opt/pmux2shiftx.cc

index 5fd49a5713308548892ab4c1efcaac3a8fe1ce62..5f897b13120f33acbf7eed0fb8c53493b8c74bce 100644 (file)
@@ -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())
                        {