From 5d9050a9551628f838ee419404cf1b1d3920a3ed Mon Sep 17 00:00:00 2001
From: Eddie Hung <eddie@fpgeh.com>
Date: Tue, 7 Jan 2020 08:00:32 -0800
Subject: abc_exe: move 'count_outputs' check to abc

---
 passes/techmap/abc9.cc     | 27 ++++++++++------
 passes/techmap/abc9_exe.cc | 77 +++++++++++++++++++---------------------------
 2 files changed, 50 insertions(+), 54 deletions(-)

(limited to 'passes')

diff --git a/passes/techmap/abc9.cc b/passes/techmap/abc9.cc
index 7c261e220..0a5454d99 100644
--- a/passes/techmap/abc9.cc
+++ b/passes/techmap/abc9.cc
@@ -219,16 +219,25 @@ struct Abc9Pass : public ScriptPass
 			tempdir_name = make_temp_dir(tempdir_name);
 
 			run(stringf("write_xaiger -map %s/input.sym %s/input.xaig", tempdir_name.c_str(), tempdir_name.c_str()),
-				"write_xaiger -map <abc-temp-dir>/input.sym <abc-temp-dir>/input.xaig");
-			run(stringf("%s -cwd %s", exe_cmd.str().c_str(), tempdir_name.c_str()),
-				"abc9_exe [options] -cwd <abc-temp-dir>");
-
-			run(stringf("read_aiger -xaiger -wideports -module_name %s$abc9 -map %s/input.sym %s/output.aig", log_id(mod->name), tempdir_name.c_str(), tempdir_name.c_str()),
-				"read_aiger -xaiger -wideports -module_name <module-name>$abc9 -map <abc-temp-dir>/input.sym <abc-temp-dir>/output.aig");
-			run("abc9_ops -reintegrate");
+					"write_xaiger -map <abc-temp-dir>/input.sym <abc-temp-dir>/input.xaig");
+
+			int num_outputs = active_design->scratchpad_get_int("write_xaiger.num_outputs");
+			log("Extracted %d AND gates and %d wires to a netlist network with %d inputs and %d outputs.\n",
+					active_design->scratchpad_get_int("write_xaiger.num_ands"),
+					active_design->scratchpad_get_int("write_xaiger.num_wires"),
+					active_design->scratchpad_get_int("write_xaiger.num_inputs"),
+					num_outputs);
+			if (num_outputs) {
+				run(stringf("%s -cwd %s", exe_cmd.str().c_str(), tempdir_name.c_str()),
+						"abc9_exe [options] -cwd <abc-temp-dir>");
+				run(stringf("read_aiger -xaiger -wideports -module_name %s$abc9 -map %s/input.sym %s/output.aig", log_id(mod->name), tempdir_name.c_str(), tempdir_name.c_str()),
+						"read_aiger -xaiger -wideports -module_name <module-name>$abc9 -map <abc-temp-dir>/input.sym <abc-temp-dir>/output.aig");
+				run("abc9_ops -reintegrate");
+			}
+			else
+				log("Don't call ABC as there is nothing to map.\n");
 
-			if (cleanup)
-			{
+			if (cleanup) {
 				log("Removing temp directory.\n");
 				remove_directory(tempdir_name);
 			}
diff --git a/passes/techmap/abc9_exe.cc b/passes/techmap/abc9_exe.cc
index 36d7faf1b..f7dafda96 100644
--- a/passes/techmap/abc9_exe.cc
+++ b/passes/techmap/abc9_exe.cc
@@ -244,56 +244,43 @@ void abc9_module(RTLIL::Design *design, std::string script_file, std::string exe
 	fprintf(f, "%s\n", abc9_script.c_str());
 	fclose(f);
 
-	int count_outputs = design->scratchpad_get_int("write_xaiger.num_outputs");
-	log("Extracted %d AND gates and %d wires to a netlist network with %d inputs and %d outputs.\n",
-			design->scratchpad_get_int("write_xaiger.num_ands"),
-			design->scratchpad_get_int("write_xaiger.num_wires"),
-			design->scratchpad_get_int("write_xaiger.num_inputs"),
-			count_outputs);
-
-	if (count_outputs > 0) {
-		std::string buffer;
-
-		log_header(design, "Executing ABC9.\n");
-
-		if (!lut_costs.empty()) {
-			buffer = stringf("%s/lutdefs.txt", tempdir_name.c_str());
-			f = fopen(buffer.c_str(), "wt");
-			if (f == NULL)
-				log_error("Opening %s for writing failed: %s\n", buffer.c_str(), strerror(errno));
-			for (int i = 0; i < GetSize(lut_costs); i++)
-				fprintf(f, "%d %d.00 1.00\n", i+1, lut_costs.at(i));
-			fclose(f);
-		}
+	std::string buffer;
+
+	log_header(design, "Executing ABC9.\n");
+
+	if (!lut_costs.empty()) {
+		buffer = stringf("%s/lutdefs.txt", tempdir_name.c_str());
+		f = fopen(buffer.c_str(), "wt");
+		if (f == NULL)
+			log_error("Opening %s for writing failed: %s\n", buffer.c_str(), strerror(errno));
+		for (int i = 0; i < GetSize(lut_costs); i++)
+			fprintf(f, "%d %d.00 1.00\n", i+1, lut_costs.at(i));
+		fclose(f);
+	}
 
-		buffer = stringf("%s -s -f %s/abc.script 2>&1", exe_file.c_str(), tempdir_name.c_str());
-		log("Running ABC command: %s\n", replace_tempdir(buffer, tempdir_name, show_tempdir).c_str());
+	buffer = stringf("%s -s -f %s/abc.script 2>&1", exe_file.c_str(), tempdir_name.c_str());
+	log("Running ABC command: %s\n", replace_tempdir(buffer, tempdir_name, show_tempdir).c_str());
 
 #ifndef YOSYS_LINK_ABC
-		abc9_output_filter filt(tempdir_name, show_tempdir);
-		int ret = run_command(buffer, std::bind(&abc9_output_filter::next_line, filt, std::placeholders::_1));
+	abc9_output_filter filt(tempdir_name, show_tempdir);
+	int ret = run_command(buffer, std::bind(&abc9_output_filter::next_line, filt, std::placeholders::_1));
 #else
-		// These needs to be mutable, supposedly due to getopt
-		char *abc9_argv[5];
-		string tmp_script_name = stringf("%s/abc.script", tempdir_name.c_str());
-		abc9_argv[0] = strdup(exe_file.c_str());
-		abc9_argv[1] = strdup("-s");
-		abc9_argv[2] = strdup("-f");
-		abc9_argv[3] = strdup(tmp_script_name.c_str());
-		abc9_argv[4] = 0;
-		int ret = Abc_RealMain(4, abc9_argv);
-		free(abc9_argv[0]);
-		free(abc9_argv[1]);
-		free(abc9_argv[2]);
-		free(abc9_argv[3]);
+	// These needs to be mutable, supposedly due to getopt
+	char *abc9_argv[5];
+	string tmp_script_name = stringf("%s/abc.script", tempdir_name.c_str());
+	abc9_argv[0] = strdup(exe_file.c_str());
+	abc9_argv[1] = strdup("-s");
+	abc9_argv[2] = strdup("-f");
+	abc9_argv[3] = strdup(tmp_script_name.c_str());
+	abc9_argv[4] = 0;
+	int ret = Abc_RealMain(4, abc9_argv);
+	free(abc9_argv[0]);
+	free(abc9_argv[1]);
+	free(abc9_argv[2]);
+	free(abc9_argv[3]);
 #endif
-		if (ret != 0)
-			log_error("ABC: execution of command \"%s\" failed: return code %d.\n", buffer.c_str(), ret);
-	}
-	else
-	{
-		log("Don't call ABC as there is nothing to map.\n");
-	}
+	if (ret != 0)
+		log_error("ABC: execution of command \"%s\" failed: return code %d.\n", buffer.c_str(), ret);
 }
 
 struct Abc9ExePass : public Pass {
-- 
cgit v1.2.3