Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 1 | bugpoint - automatic test case reduction tool |
| 2 | ============================================= |
| 3 | |
James Henderson | a056684 | 2019-06-27 13:24:46 +0000 | [diff] [blame] | 4 | .. program:: bugpoint |
| 5 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 6 | SYNOPSIS |
| 7 | -------- |
| 8 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 9 | **bugpoint** [*options*] [*input LLVM ll/bc files*] [*LLVM passes*] **--args** |
| 10 | *program arguments* |
| 11 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 12 | DESCRIPTION |
| 13 | ----------- |
| 14 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 15 | **bugpoint** narrows down the source of problems in LLVM tools and passes. It |
| 16 | can be used to debug three types of failures: optimizer crashes, miscompilations |
| 17 | by optimizers, or bad native code generation (including problems in the static |
| 18 | and JIT compilers). It aims to reduce large test cases to small, useful ones. |
| 19 | For more information on the design and inner workings of **bugpoint**, as well as |
Sean Silva | c28b495 | 2016-03-23 00:31:21 +0000 | [diff] [blame] | 20 | advice for using bugpoint, see :doc:`/Bugpoint` in the LLVM |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 21 | distribution. |
| 22 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 23 | OPTIONS |
| 24 | ------- |
| 25 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 26 | **--additional-so** *library* |
| 27 | |
| 28 | Load the dynamic shared object *library* into the test program whenever it is |
| 29 | run. This is useful if you are debugging programs which depend on non-LLVM |
| 30 | libraries (such as the X or curses libraries) to run. |
| 31 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 32 | **--append-exit-code**\ =\ *{true,false}* |
| 33 | |
| 34 | Append the test programs exit code to the output file so that a change in exit |
| 35 | code is considered a test failure. Defaults to false. |
| 36 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 37 | **--args** *program args* |
| 38 | |
Dmitri Gribenko | 5cb3f10 | 2012-11-28 21:40:54 +0000 | [diff] [blame] | 39 | Pass all arguments specified after **--args** to the test program whenever it runs. |
| 40 | Note that if any of the *program args* start with a "``-``", you should use: |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 41 | |
Dmitri Gribenko | 194d368 | 2012-11-29 12:00:32 +0000 | [diff] [blame] | 42 | .. code-block:: bash |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 43 | |
| 44 | bugpoint [bugpoint args] --args -- [program args] |
| 45 | |
Dmitri Gribenko | 5cb3f10 | 2012-11-28 21:40:54 +0000 | [diff] [blame] | 46 | The "``--``" right after the **--args** option tells **bugpoint** to consider |
| 47 | any options starting with "``-``" to be part of the **--args** option, not as |
| 48 | options to **bugpoint** itself. |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 49 | |
| 50 | **--tool-args** *tool args* |
| 51 | |
Dmitri Gribenko | 5cb3f10 | 2012-11-28 21:40:54 +0000 | [diff] [blame] | 52 | Pass all arguments specified after **--tool-args** to the LLVM tool under test |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 53 | (**llc**, **lli**, etc.) whenever it runs. You should use this option in the |
| 54 | following way: |
| 55 | |
Dmitri Gribenko | 194d368 | 2012-11-29 12:00:32 +0000 | [diff] [blame] | 56 | .. code-block:: bash |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 57 | |
| 58 | bugpoint [bugpoint args] --tool-args -- [tool args] |
| 59 | |
Dmitri Gribenko | 5cb3f10 | 2012-11-28 21:40:54 +0000 | [diff] [blame] | 60 | The "``--``" right after the **--tool-args** option tells **bugpoint** to |
| 61 | consider any options starting with "``-``" to be part of the **--tool-args** |
| 62 | option, not as options to **bugpoint** itself. (See **--args**, above.) |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 63 | |
| 64 | **--safe-tool-args** *tool args* |
| 65 | |
| 66 | Pass all arguments specified after **--safe-tool-args** to the "safe" execution |
| 67 | tool. |
| 68 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 69 | **--gcc-tool-args** *gcc tool args* |
| 70 | |
| 71 | Pass all arguments specified after **--gcc-tool-args** to the invocation of |
| 72 | **gcc**. |
| 73 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 74 | **--opt-args** *opt args* |
| 75 | |
| 76 | Pass all arguments specified after **--opt-args** to the invocation of **opt**. |
| 77 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 78 | **--disable-{dce,simplifycfg}** |
| 79 | |
| 80 | Do not run the specified passes to clean up and reduce the size of the test |
| 81 | program. By default, **bugpoint** uses these passes internally when attempting to |
| 82 | reduce test programs. If you're trying to find a bug in one of these passes, |
| 83 | **bugpoint** may crash. |
| 84 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 85 | **--enable-valgrind** |
| 86 | |
| 87 | Use valgrind to find faults in the optimization phase. This will allow |
| 88 | bugpoint to find otherwise asymptomatic problems caused by memory |
| 89 | mis-management. |
| 90 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 91 | **-find-bugs** |
| 92 | |
| 93 | Continually randomize the specified passes and run them on the test program |
| 94 | until a bug is found or the user kills **bugpoint**. |
| 95 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 96 | **-help** |
| 97 | |
| 98 | Print a summary of command line options. |
| 99 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 100 | **--input** *filename* |
| 101 | |
| 102 | Open *filename* and redirect the standard input of the test program, whenever |
| 103 | it runs, to come from that file. |
| 104 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 105 | **--load** *plugin* |
| 106 | |
| 107 | Load the dynamic object *plugin* into **bugpoint** itself. This object should |
| 108 | register new optimization passes. Once loaded, the object will add new command |
| 109 | line options to enable various optimizations. To see the new complete list of |
| 110 | optimizations, use the **-help** and **--load** options together; for example: |
| 111 | |
Dmitri Gribenko | 194d368 | 2012-11-29 12:00:32 +0000 | [diff] [blame] | 112 | .. code-block:: bash |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 113 | |
| 114 | bugpoint --load myNewPass.so -help |
| 115 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 116 | **--mlimit** *megabytes* |
| 117 | |
| 118 | Specifies an upper limit on memory usage of the optimization and codegen. Set |
| 119 | to zero to disable the limit. |
| 120 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 121 | **--output** *filename* |
| 122 | |
| 123 | Whenever the test program produces output on its standard output stream, it |
| 124 | should match the contents of *filename* (the "reference output"). If you |
| 125 | do not use this option, **bugpoint** will attempt to generate a reference output |
| 126 | by compiling the program with the "safe" backend and running it. |
| 127 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 128 | **--run-{int,jit,llc,custom}** |
| 129 | |
| 130 | Whenever the test program is compiled, **bugpoint** should generate code for it |
| 131 | using the specified code generator. These options allow you to choose the |
| 132 | interpreter, the JIT compiler, the static native code compiler, or a |
| 133 | custom command (see **--exec-command**) respectively. |
| 134 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 135 | **--safe-{llc,custom}** |
| 136 | |
| 137 | When debugging a code generator, **bugpoint** should use the specified code |
| 138 | generator as the "safe" code generator. This is a known-good code generator |
| 139 | used to generate the "reference output" if it has not been provided, and to |
| 140 | compile portions of the program that as they are excluded from the testcase. |
| 141 | These options allow you to choose the |
| 142 | static native code compiler, or a custom command, (see **--exec-command**) |
| 143 | respectively. The interpreter and the JIT backends cannot currently |
| 144 | be used as the "safe" backends. |
| 145 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 146 | **--exec-command** *command* |
| 147 | |
| 148 | This option defines the command to use with the **--run-custom** and |
| 149 | **--safe-custom** options to execute the bitcode testcase. This can |
| 150 | be useful for cross-compilation. |
| 151 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 152 | **--compile-command** *command* |
| 153 | |
| 154 | This option defines the command to use with the **--compile-custom** |
Sean Silva | 232c331 | 2016-03-23 00:25:13 +0000 | [diff] [blame] | 155 | option to compile the bitcode testcase. The command should exit with a |
| 156 | failure exit code if the file is "interesting" and should exit with a |
| 157 | success exit code (i.e. 0) otherwise (this is the same as if it crashed on |
| 158 | "interesting" inputs). |
| 159 | |
| 160 | This can be useful for |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 161 | testing compiler output without running any link or execute stages. To |
| 162 | generate a reduced unit test, you may add CHECK directives to the |
| 163 | testcase and pass the name of an executable compile-command script in this form: |
| 164 | |
Dmitri Gribenko | a99fa5b | 2012-06-12 15:45:07 +0000 | [diff] [blame] | 165 | .. code-block:: sh |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 166 | |
| 167 | #!/bin/sh |
| 168 | llc "$@" |
| 169 | not FileCheck [bugpoint input file].ll < bugpoint-test-program.s |
| 170 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 171 | This script will "fail" as long as FileCheck passes. So the result |
| 172 | will be the minimum bitcode that passes FileCheck. |
| 173 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 174 | **--safe-path** *path* |
| 175 | |
| 176 | This option defines the path to the command to execute with the |
| 177 | **--safe-{int,jit,llc,custom}** |
| 178 | option. |
| 179 | |
Sebastian Pop | 8f7d019 | 2016-07-15 23:15:06 +0000 | [diff] [blame] | 180 | **--verbose-errors**\ =\ *{true,false}* |
| 181 | |
| 182 | The default behavior of bugpoint is to print "<crash>" when it finds a reduced |
| 183 | test that crashes compilation. This flag prints the output of the crashing |
| 184 | program to stderr. This is useful to make sure it is the same error being |
| 185 | tracked down and not a different error that happens to crash the compiler as |
| 186 | well. Defaults to false. |
| 187 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 188 | EXIT STATUS |
| 189 | ----------- |
| 190 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 191 | If **bugpoint** succeeds in finding a problem, it will exit with 0. Otherwise, |
| 192 | if an error occurs, it will exit with a non-zero value. |
| 193 | |
Daniel Dunbar | 8f4a8a6 | 2012-05-08 16:50:35 +0000 | [diff] [blame] | 194 | SEE ALSO |
| 195 | -------- |
| 196 | |
Alex Brachet | 09a066b | 2019-07-04 21:19:05 +0000 | [diff] [blame] | 197 | :manpage:`opt(1)` |