bugpoint reads the specified list of .bc or .ll files specified on the command-line and links them together. If any LLVM passes are specified on the command line, it runs these passes on the resultant module. If any of the passes crash, or if they produce an LLVM module which is not verifiable, bugpoint enters crash debugging mode.
Otherwise, if the -output option was not specified, bugpoint runs the initial program with the C backend (which is assumed to generate good code) to generate a reference output. Once bugpoint has a reference output to match, it tries executing the original program with the selected code generator. If the resultant output is different than the reference output, it exters code generator debugging mode.
Otherwise, bugpoint runs the LLVM program after all of the LLVM passes have been applied to it. If the executed program matches the reference output, there is no problem bugpoint can debug. Otherwise, it enters miscompilation debugging mode.
Next, bugpoint tries removing functions from the module, to reduce the
size of the testcase to a reasonable amount. Usually it is able to get it down
to a single function for intraprocedural optimizations. Once the number of
functions has been reduced, it attempts to delete various edges in the control
flow graph, to reduce the size of the function as much as possible. Finally,
bugpoint deletes any individual LLVM instructions whose absense does
not eliminate the failure. At the end, bugpoint should tell you what
passes crash, give you a bytecode file, and give you instructions on how to
reproduce the failure with opt or
analyze.
opt -load <plugin.so> -help
Crash debugging mode
If an optimizer crashes, bugpoint will try a variety of techniques to
narrow down the list of passes and the code to a more manageable amount. First,
bugpoint figures out which combination of passes trigger the bug. This
is useful when debugging a problem exposed by gccas for example,
because it has over 30 optimization it runs.Code generator debugging mode
TODO
Miscompilation debugging mode
TODO
OPTIONS
All arguments specified after -args are passed into the
executed program when the program must be executed.
bugpoint uses several passes internally for cleanup routines to
reduce the size of the program. If you're trying to find a bug in one
of these passes, bugpoint may crash. These options tell
bugpoint not use the specified passes.
Print a summary of command line options.
Specify the contents of <stdin> when the program must be executed.
Load the dynamic object plugin.so. This object should register new
optimization passes. Once loaded, the object will add new command line
options to enable various optimizations. To see the new complete list
of optimizations, use the -help and -load options together:
Specify a reference output for the <stdout> file stream.
Specify which code generator bugpoint should use to run the
program.
EXIT STATUS
If bugpoint succeeds in finding a problem, it will exit with 0.
Otherwise, if an error occurs, it will exit with a non-zero value.
SEE ALSO
opt,
analyze
Maintained by the LLVM Team.