aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorEddie Hung <eddie@fpgeh.com>2020-01-09 17:06:13 -0800
committerEddie Hung <eddie@fpgeh.com>2020-01-09 17:06:13 -0800
commitdd718838bbbfe2fb3453eeda1580db39338698ec (patch)
tree90c16fa4b9c235d0703d0c15cf7d3e20b6bb9692 /kernel
parentfbd9636e08b9a4ac5e58161ca6a6b5308cd795cb (diff)
parentcd92a974f4cf8d4db74d504c38e51ce043e02403 (diff)
downloadyosys-dd718838bbbfe2fb3453eeda1580db39338698ec.tar.gz
yosys-dd718838bbbfe2fb3453eeda1580db39338698ec.tar.bz2
yosys-dd718838bbbfe2fb3453eeda1580db39338698ec.zip
Merge remote-tracking branch 'origin/clifford/onpassreg' into eddie/abc9_scratchpad
Diffstat (limited to 'kernel')
-rw-r--r--kernel/register.cc15
-rw-r--r--kernel/register.h3
-rw-r--r--kernel/yosys.cc3
3 files changed, 20 insertions, 1 deletions
diff --git a/kernel/register.cc b/kernel/register.cc
index 37f2e5e1b..5d0fb3c8c 100644
--- a/kernel/register.cc
+++ b/kernel/register.cc
@@ -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()
{
}
diff --git a/kernel/register.h b/kernel/register.h
index 85d552f0d..821faff3e 100644
--- a/kernel/register.h
+++ b/kernel/register.h
@@ -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
diff --git a/kernel/yosys.cc b/kernel/yosys.cc
index cd6955c3f..6956cbdc3 100644
--- a/kernel/yosys.cc
+++ b/kernel/yosys.cc
@@ -579,6 +579,8 @@ void yosys_shutdown()
already_shutdown = true;
log_pop();
+ Pass::done_register();
+
delete yosys_design;
yosys_design = NULL;
@@ -588,7 +590,6 @@ void yosys_shutdown()
log_errfile = NULL;
log_files.clear();
- Pass::done_register();
yosys_celltypes.clear();
#ifdef YOSYS_ENABLE_TCL