Add Pass::on_register() and Pass::on_shutdown()
authorClifford Wolf <clifford@clifford.at>
Thu, 9 Jan 2020 20:36:34 +0000 (21:36 +0100)
committerClifford Wolf <clifford@clifford.at>
Thu, 9 Jan 2020 20:36:34 +0000 (21:36 +0100)
Signed-off-by: Clifford Wolf <clifford@clifford.at>
kernel/register.cc
kernel/register.h
kernel/yosys.cc

index 37f2e5e1bf8a676dc9717e8e9220729926cfa7a8..5d0fb3c8c22ae7508c5031b04bc0d30685a58fe6 100644 (file)
@@ -114,20 +114,35 @@ void Pass::run_register()
 
 void Pass::init_register()
 {
+       vector<Pass*> added_passes;
        while (first_queued_pass) {
+               added_passes.push_back(first_queued_pass);
                first_queued_pass->run_register();
                first_queued_pass = first_queued_pass->next_queued_pass;
        }
+       for (auto added_pass : added_passes)
+               added_pass->on_register();
 }
 
 void Pass::done_register()
 {
+       for (auto &it : pass_register)
+               it.second->on_shutdown();
+
        frontend_register.clear();
        pass_register.clear();
        backend_register.clear();
        log_assert(first_queued_pass == NULL);
 }
 
+void Pass::on_register()
+{
+}
+
+void Pass::on_shutdown()
+{
+}
+
 Pass::~Pass()
 {
 }
index 85d552f0dc8fe3173d31702ca573a0bc3f8e2a93..821faff3eed4366748abd75a4cf9b0ed86fae39d 100644 (file)
@@ -62,6 +62,9 @@ struct Pass
        virtual void run_register();
        static void init_register();
        static void done_register();
+
+       virtual void on_register();
+       virtual void on_shutdown();
 };
 
 struct ScriptPass : Pass
index 5018a48883f7c0768767811b6bba29ae8c246850..8190d89028eb4ca553932977adb992379558b047 100644 (file)
@@ -544,6 +544,8 @@ void yosys_shutdown()
        already_shutdown = true;
        log_pop();
 
+       Pass::done_register();
+
        delete yosys_design;
        yosys_design = NULL;
 
@@ -553,7 +555,6 @@ void yosys_shutdown()
        log_errfile = NULL;
        log_files.clear();
 
-       Pass::done_register();
        yosys_celltypes.clear();
 
 #ifdef YOSYS_ENABLE_TCL