bugpoint - minimize testcases

yosys> help bugpoint
bugpoint [options] [-script <filename> | -command "<command>"]
This command minimizes the current design that is known to crash Yosys with the
given script into a smaller testcase. It does this by removing an arbitrary part
of the design and recursively invokes a new Yosys process with this modified
design and the same script, repeating these steps while it can find a smaller
design that still causes a crash. Once this command finishes, it replaces the
current design with the smallest testcase it was able to produce.
In order to save the reduced testcase you must write this out to a file with
another command after `bugpoint` like `write_rtlil` or `write_verilog`.
-script <filename> | -command "<command>"
use this script file or command to crash Yosys. required.
-yosys <filename>
use this Yosys binary. if not specified, `yosys` is used.
-grep "<string>"
only consider crashes that place this string in the log file.
-fast
run `proc_clean; clean -purge` after each minimization step. converges
faster, but produces larger testcases, and may fail to produce any
testcase at all if the crash is related to dangling wires.
-clean
run `proc_clean; clean -purge` before checking testcase and after
finishing. produces smaller and more useful testcases, but may fail to
produce any testcase at all if the crash is related to dangling wires.
It is possible to constrain which parts of the design will be considered for
removal. Unless one or more of the following options are specified, all parts
will be considered.
-modules
try to remove modules. modules with a (* bugpoint_keep *) attribute
will be skipped.
-ports
try to remove module ports. ports with a (* bugpoint_keep *) attribute
will be skipped (useful for clocks, resets, etc.)
-cells
try to remove cells. cells with a (* bugpoint_keep *) attribute will
be skipped.
-connections
try to reconnect ports to 'x.
-processes
try to remove processes. processes with a (* bugpoint_keep *) attribute
will be skipped.
-assigns
try to remove process assigns from cases.
-updates
try to remove process updates from syncs.
-runner "<prefix>"
child process wrapping command, e.g., "timeout 30", or valgrind.