bugpoint: skip ports with (* keep *) on; add header
authorEddie Hung <eddie@fpgeh.com>
Fri, 24 Apr 2020 18:17:09 +0000 (11:17 -0700)
committerEddie Hung <eddie@fpgeh.com>
Fri, 24 Apr 2020 18:17:09 +0000 (11:17 -0700)
passes/cmds/bugpoint.cc

index 4668da4bdcba3352bcbeca56178a7375d8ae10b8..2bdd551af7f7d6abd9ca14f49c1da538dc8713ca 100644 (file)
@@ -66,7 +66,8 @@ struct BugpointPass : public Pass {
                log("        try to remove modules.\n");
                log("\n");
                log("    -ports\n");
-               log("        try to remove module ports.\n");
+               log("        try to remove module ports. ports with a (* keep *) attribute will be\n");
+               log("        skipped (useful for clocks, resets, etc.)\n");
                log("\n");
                log("    -cells\n");
                log("        try to remove cells.\n");
@@ -162,18 +163,21 @@ struct BugpointPass : public Pass {
 
                                for (auto wire : mod->wires())
                                {
+                                       if (!wire->port_id)
+                                               continue;
+
                                        if (!stage2 && wire->get_bool_attribute(ID($bugpoint)))
                                                continue;
 
-                                       if (wire->port_input || wire->port_output)
+                                       if (wire->get_bool_attribute(ID::keep))
+                                               continue;
+
+                                       if (index++ == seed)
                                        {
-                                               if (index++ == seed)
-                                               {
-                                                       log("Trying to remove module port %s.\n", log_signal(wire));
-                                                       wire->port_input = wire->port_output = false;
-                                                       mod->fixup_ports();
-                                                       return design_copy;
-                                               }
+                                               log("Trying to remove module port %s.\n", log_signal(wire));
+                                               wire->port_input = wire->port_output = false;
+                                               mod->fixup_ports();
+                                               return design_copy;
                                        }
                                }
                        }
@@ -306,6 +310,9 @@ struct BugpointPass : public Pass {
                bool fast = false, clean = false;
                bool modules = false, ports = false, cells = false, connections = false, assigns = false, updates = false, has_part = false;
 
+               log_header(design, "Executing BUGPOINT pass (minimize testcases).\n");
+               log_push();
+
                size_t argidx;
                for (argidx = 1; argidx < args.size(); argidx++)
                {
@@ -449,6 +456,8 @@ struct BugpointPass : public Pass {
                                design->add(module->clone());
                        delete crashing_design;
                }
+
+               log_pop();
        }
 } BugpointPass;