|  | bugpoint - automatic test case reduction tool | 
|  | ============================================= | 
|  |  | 
|  | SYNOPSIS | 
|  | -------- | 
|  |  | 
|  | **bugpoint** [*options*] [*input LLVM ll/bc files*] [*LLVM passes*] **--args** | 
|  | *program arguments* | 
|  |  | 
|  | DESCRIPTION | 
|  | ----------- | 
|  |  | 
|  | **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 **bugpoint**, as well as | 
|  | advice for using bugpoint, see :doc:`/Bugpoint` in the LLVM | 
|  | distribution. | 
|  |  | 
|  | OPTIONS | 
|  | ------- | 
|  |  | 
|  | **--additional-so** *library* | 
|  |  | 
|  | Load the dynamic shared object *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. | 
|  |  | 
|  | **--append-exit-code**\ =\ *{true,false}* | 
|  |  | 
|  | Append the test programs exit code to the output file so that a change in exit | 
|  | code is considered a test failure. Defaults to false. | 
|  |  | 
|  | **--args** *program args* | 
|  |  | 
|  | Pass all arguments specified after **--args** to the test program whenever it runs. | 
|  | Note that if any of the *program args* start with a "``-``", you should use: | 
|  |  | 
|  | .. code-block:: bash | 
|  |  | 
|  | bugpoint [bugpoint args] --args -- [program args] | 
|  |  | 
|  | The "``--``" right after the **--args** option tells **bugpoint** to consider | 
|  | any options starting with "``-``" to be part of the **--args** option, not as | 
|  | options to **bugpoint** itself. | 
|  |  | 
|  | **--tool-args** *tool args* | 
|  |  | 
|  | Pass all arguments specified after **--tool-args** to the LLVM tool under test | 
|  | (**llc**, **lli**, etc.) whenever it runs.  You should use this option in the | 
|  | following way: | 
|  |  | 
|  | .. code-block:: bash | 
|  |  | 
|  | bugpoint [bugpoint args] --tool-args -- [tool args] | 
|  |  | 
|  | The "``--``" right after the **--tool-args** option tells **bugpoint** to | 
|  | consider any options starting with "``-``" to be part of the **--tool-args** | 
|  | option, not as options to **bugpoint** itself. (See **--args**, above.) | 
|  |  | 
|  | **--safe-tool-args** *tool args* | 
|  |  | 
|  | Pass all arguments specified after **--safe-tool-args** to the "safe" execution | 
|  | tool. | 
|  |  | 
|  | **--gcc-tool-args** *gcc tool args* | 
|  |  | 
|  | Pass all arguments specified after **--gcc-tool-args** to the invocation of | 
|  | **gcc**. | 
|  |  | 
|  | **--opt-args** *opt args* | 
|  |  | 
|  | Pass all arguments specified after **--opt-args** to the invocation of **opt**. | 
|  |  | 
|  | **--disable-{dce,simplifycfg}** | 
|  |  | 
|  | Do not run the specified passes to clean up and reduce the size of the test | 
|  | program. By default, **bugpoint** uses these passes internally when attempting to | 
|  | reduce test programs.  If you're trying to find a bug in one of these passes, | 
|  | **bugpoint** may crash. | 
|  |  | 
|  | **--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. | 
|  |  | 
|  | **-find-bugs** | 
|  |  | 
|  | Continually randomize the specified passes and run them on the test program | 
|  | until a bug is found or the user kills **bugpoint**. | 
|  |  | 
|  | **-help** | 
|  |  | 
|  | Print a summary of command line options. | 
|  |  | 
|  | **--input** *filename* | 
|  |  | 
|  | Open *filename* and redirect the standard input of the test program, whenever | 
|  | it runs, to come from that file. | 
|  |  | 
|  | **--load** *plugin* | 
|  |  | 
|  | Load the dynamic object *plugin* into **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 **-help** and **--load** options together; for example: | 
|  |  | 
|  |  | 
|  | .. code-block:: bash | 
|  |  | 
|  | bugpoint --load myNewPass.so -help | 
|  |  | 
|  | **--mlimit** *megabytes* | 
|  |  | 
|  | Specifies an upper limit on memory usage of the optimization and codegen. Set | 
|  | to zero to disable the limit. | 
|  |  | 
|  | **--output** *filename* | 
|  |  | 
|  | Whenever the test program produces output on its standard output stream, it | 
|  | should match the contents of *filename* (the "reference output"). If you | 
|  | do not use this option, **bugpoint** will attempt to generate a reference output | 
|  | by compiling the program with the "safe" backend and running it. | 
|  |  | 
|  | **--run-{int,jit,llc,custom}** | 
|  |  | 
|  | Whenever the test program is compiled, **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 a | 
|  | custom command (see **--exec-command**) respectively. | 
|  |  | 
|  | **--safe-{llc,custom}** | 
|  |  | 
|  | When debugging a code generator, **bugpoint** should use the specified code | 
|  | generator as the "safe" code generator. This is a known-good code generator | 
|  | used to generate the "reference output" if it has not been provided, and to | 
|  | compile portions of the program that as they are excluded from the testcase. | 
|  | These options allow you to choose the | 
|  | static native code compiler, or a custom command, (see **--exec-command**) | 
|  | respectively. The interpreter and the JIT backends cannot currently | 
|  | be used as the "safe" backends. | 
|  |  | 
|  | **--exec-command** *command* | 
|  |  | 
|  | This option defines the command to use with the **--run-custom** and | 
|  | **--safe-custom** options to execute the bitcode testcase. This can | 
|  | be useful for cross-compilation. | 
|  |  | 
|  | **--compile-command** *command* | 
|  |  | 
|  | This option defines the command to use with the **--compile-custom** | 
|  | option to compile the bitcode testcase. The command should exit with a | 
|  | failure exit code if the file is "interesting" and should exit with a | 
|  | success exit code (i.e. 0) otherwise (this is the same as if it crashed on | 
|  | "interesting" inputs). | 
|  |  | 
|  | This can be useful for | 
|  | testing compiler output without running any link or execute stages. To | 
|  | generate a reduced unit test, you may add CHECK directives to the | 
|  | testcase and pass the name of an executable compile-command script in this form: | 
|  |  | 
|  | .. code-block:: sh | 
|  |  | 
|  | #!/bin/sh | 
|  | llc "$@" | 
|  | not FileCheck [bugpoint input file].ll < bugpoint-test-program.s | 
|  |  | 
|  | This script will "fail" as long as FileCheck passes. So the result | 
|  | will be the minimum bitcode that passes FileCheck. | 
|  |  | 
|  | **--safe-path** *path* | 
|  |  | 
|  | This option defines the path to the command to execute with the | 
|  | **--safe-{int,jit,llc,custom}** | 
|  | option. | 
|  |  | 
|  | 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|opt |