proc_clean: add -quiet option.
authorwhitequark <whitequark@whitequark.org>
Tue, 9 Jul 2019 08:57:57 +0000 (08:57 +0000)
committerwhitequark <whitequark@whitequark.org>
Tue, 9 Jul 2019 09:27:43 +0000 (09:27 +0000)
This is useful for other passes that call it often, like bugpoint.

passes/proc/proc_clean.cc

index 52141a8ec623d004cf5f1b637b9cda7bcd4f85f9..97f4c6573f4d9cabfc96a0f9df9108f5aef4d5b4 100644 (file)
@@ -143,7 +143,7 @@ void proc_clean_case(RTLIL::CaseRule *cs, bool &did_something, int &count, int m
 YOSYS_NAMESPACE_END
 PRIVATE_NAMESPACE_BEGIN
 
 YOSYS_NAMESPACE_END
 PRIVATE_NAMESPACE_BEGIN
 
-void proc_clean(RTLIL::Module *mod, RTLIL::Process *proc, int &total_count)
+void proc_clean(RTLIL::Module *mod, RTLIL::Process *proc, int &total_count, bool quiet)
 {
        int count = 0;
        bool did_something = true;
 {
        int count = 0;
        bool did_something = true;
@@ -160,7 +160,7 @@ void proc_clean(RTLIL::Module *mod, RTLIL::Process *proc, int &total_count)
                did_something = false;
                proc_clean_case(&proc->root_case, did_something, count, -1);
        }
                did_something = false;
                proc_clean_case(&proc->root_case, did_something, count, -1);
        }
-       if (count > 0)
+       if (count > 0 && !quiet)
                log("Found and cleaned up %d empty switch%s in `%s.%s'.\n", count, count == 1 ? "" : "es", mod->name.c_str(), proc->name.c_str());
        total_count += count;
 }
                log("Found and cleaned up %d empty switch%s in `%s.%s'.\n", count, count == 1 ? "" : "es", mod->name.c_str(), proc->name.c_str());
        total_count += count;
 }
@@ -171,7 +171,10 @@ struct ProcCleanPass : public Pass {
        {
                //   |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
                log("\n");
        {
                //   |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
                log("\n");
-               log("    proc_clean [selection]\n");
+               log("    proc_clean [options] [selection]\n");
+               log("\n");
+               log("    -quiet\n");
+               log("        do not print any messages.\n");
                log("\n");
                log("This pass removes empty parts of processes and ultimately removes a process\n");
                log("if it contains only empty structures.\n");
                log("\n");
                log("This pass removes empty parts of processes and ultimately removes a process\n");
                log("if it contains only empty structures.\n");
@@ -180,9 +183,20 @@ struct ProcCleanPass : public Pass {
        void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
        {
                int total_count = 0;
        void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
        {
                int total_count = 0;
-               log_header(design, "Executing PROC_CLEAN pass (remove empty switches from decision trees).\n");
+               bool quiet = false;
+
+               if (find(args.begin(), args.end(), "-quiet") == args.end())
+                       log_header(design, "Executing PROC_CLEAN pass (remove empty switches from decision trees).\n");
 
 
-               extra_args(args, 1, design);
+               size_t argidx;
+               for (argidx = 1; argidx < args.size(); argidx++)
+               {
+                       if (args[argidx] == "-quiet") {
+                               quiet = true;
+                               continue;
+                       }
+               }
+               extra_args(args, argidx, design);
 
                for (auto mod : design->modules()) {
                        std::vector<RTLIL::IdString> delme;
 
                for (auto mod : design->modules()) {
                        std::vector<RTLIL::IdString> delme;
@@ -191,10 +205,11 @@ struct ProcCleanPass : public Pass {
                        for (auto &proc_it : mod->processes) {
                                if (!design->selected(mod, proc_it.second))
                                        continue;
                        for (auto &proc_it : mod->processes) {
                                if (!design->selected(mod, proc_it.second))
                                        continue;
-                               proc_clean(mod, proc_it.second, total_count);
+                               proc_clean(mod, proc_it.second, total_count, quiet);
                                if (proc_it.second->syncs.size() == 0 && proc_it.second->root_case.switches.size() == 0 &&
                                                proc_it.second->root_case.actions.size() == 0) {
                                if (proc_it.second->syncs.size() == 0 && proc_it.second->root_case.switches.size() == 0 &&
                                                proc_it.second->root_case.actions.size() == 0) {
-                                       log("Removing empty process `%s.%s'.\n", log_id(mod), proc_it.second->name.c_str());
+                                       if (!quiet)
+                                               log("Removing empty process `%s.%s'.\n", log_id(mod), proc_it.second->name.c_str());
                                        delme.push_back(proc_it.first);
                                }
                        }
                                        delme.push_back(proc_it.first);
                                }
                        }
@@ -204,7 +219,8 @@ struct ProcCleanPass : public Pass {
                        }
                }
 
                        }
                }
 
-               log("Cleaned up %d empty switch%s.\n", total_count, total_count == 1 ? "" : "es");
+               if (!quiet)
+                       log("Cleaned up %d empty switch%s.\n", total_count, total_count == 1 ? "" : "es");
        }
 } ProcCleanPass;
 
        }
 } ProcCleanPass;