abc_exe: move 'count_outputs' check to abc
authorEddie Hung <eddie@fpgeh.com>
Tue, 7 Jan 2020 16:00:32 +0000 (08:00 -0800)
committerEddie Hung <eddie@fpgeh.com>
Tue, 7 Jan 2020 16:00:32 +0000 (08:00 -0800)
passes/techmap/abc9.cc
passes/techmap/abc9_exe.cc

index 7c261e220be91bba06c17fa54203ec3deac9ac23..0a5454d995828db682e104a280a8124bc311fae9 100644 (file)
@@ -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);
                        }
index 36d7faf1b9f365d139d8ce843e07cc2516163a4a..f7dafda9690e4574c408f69a9f83f79b2d266adb 100644 (file)
@@ -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 {