diff options
Diffstat (limited to 'passes/proc')
| -rw-r--r-- | passes/proc/proc_clean.cc | 32 | 
1 files changed, 24 insertions, 8 deletions
| diff --git a/passes/proc/proc_clean.cc b/passes/proc/proc_clean.cc index 52141a8ec..97f4c6573 100644 --- a/passes/proc/proc_clean.cc +++ b/passes/proc/proc_clean.cc @@ -143,7 +143,7 @@ void proc_clean_case(RTLIL::CaseRule *cs, bool &did_something, int &count, int m  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; @@ -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);  	} -	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;  } @@ -171,7 +171,10 @@ struct ProcCleanPass : public Pass {  	{  		//   |---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"); @@ -180,9 +183,20 @@ struct ProcCleanPass : public Pass {  	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; @@ -191,10 +205,11 @@ struct ProcCleanPass : public Pass {  			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) { -					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);  				}  			} @@ -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; | 
