=pod

=head1 NAME

bugpoint - automatic test case reduction tool

=head1 SYNOPSIS

B<bugpoint> [I<options>] [I<input LLVM ll/bc files>] [I<LLVM passes>] B<--args>
I<program arguments>

=head1 DESCRIPTION

B<bugpoint> narrows down the source of problems in LLVM tools and passes.  It
can be used to debug three types of failures: optimizer crashes, miscompilations
by optimizers, or bad native code generation (including problems in the static
and JIT compilers).  It aims to reduce large test cases to small, useful ones.
For more information on the design and inner workings of B<bugpoint>, as well as
advice for using bugpoint, see F<llvm/docs/Bugpoint.html> in the LLVM
distribution.

=head1 OPTIONS

=over 

=item B<--additional-so> F<library>

Load the dynamic shared object F<library> into the test program whenever it is
run.  This is useful if you are debugging programs which depend on non-LLVM
libraries (such as the X or curses libraries) to run.

=item B<--args> I<program args>

Pass all arguments specified after -args to the test program whenever it runs.
Note that if any of the I<program args> start with a '-', you should use:

    bugpoint [bugpoint args] --args -- [program args]

The "--" right after the B<--args> option tells B<bugpoint> to consider any
options starting with C<-> to be part of the B<--args> option, not as options to
B<bugpoint> itself.

=item B<--tool-args> I<tool args>

Pass all arguments specified after --tool-args to the LLVM tool under test
(B<llc>, B<lli>, etc.) whenever it runs.  You should use this option in the
following way:

    bugpoint [bugpoint args] --tool-args -- [tool args]

The "--" right after the B<--tool-args> option tells B<bugpoint> to consider any
options starting with C<-> to be part of the B<--tool-args> option, not as
options to B<bugpoint> itself. (See B<--args>, above.)

=item B<--check-exit-code>=I<{true,false}>

Assume a non-zero exit code or core dump from the test program is a failure.
Defaults to true.

=item B<--disable-{dce,simplifycfg}>

Do not run the specified passes to clean up and reduce the size of the test
program. By default, B<bugpoint> uses these passes internally when attempting to
reduce test programs.  If you're trying to find a bug in one of these passes,
B<bugpoint> may crash.

=item B<-find-bugs>

Continually randomize the specified passes and run them on the test program
until a bug is found or the user kills B<bugpoint>. 

=item B<--help>

Print a summary of command line options.

=item B<--input> F<filename>

Open F<filename> and redirect the standard input of the test program, whenever
it runs, to come from that file.

=item B<--load> F<plugin>

Load the dynamic object F<plugin> into B<bugpoint> itself.  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 B<--help> and B<--load> options together; for example:

    bugpoint --load myNewPass.so --help

=item B<--output> F<filename>

Whenever the test program produces output on its standard output stream, it
should match the contents of F<filename> (the "reference output"). If you
do not use this option, B<bugpoint> will attempt to generate a reference output
by compiling the program with the C backend and running it.

=item B<--profile-info-file> F<filename>

Profile file loaded by B<--profile-loader>.

=item B<--run-{int,jit,llc,cbe}>

Whenever the test program is compiled, B<bugpoint> should generate code for it
using the specified code generator.  These options allow you to choose the
interpreter, the JIT compiler, the static native code compiler, or the C
backend, respectively.

=item B<--enable-valgrind>

Use valgrind to find faults in the optimization phase. This will allow
bugpoint to find otherwise asymptomatic problems caused by memory
mis-management.

=back

=head1 EXIT STATUS

If B<bugpoint> succeeds in finding a problem, it will exit with 0.  Otherwise,
if an error occurs, it will exit with a non-zero value.

=head1 SEE ALSO

L<opt|opt>

=head1 AUTHOR

Maintained by the LLVM Team (L<http://llvm.org>).

=cut
