blob: 78e3ebdbd9745ad484f0800caec0ed8973fde24e [file] [log] [blame]
Chris Lattner1213bc72003-10-07 20:33:30 +00001<html>
2<title>LLVM: bugpoint tool</title>
3
4<body bgcolor=white>
5
6<center><h1>LLVM: <tt>bugpoint</tt> tool</h1></center>
7<HR>
8
9<h3>NAME</h3>
10<tt>bugpoint</tt>
11
12<h3>SYNOPSIS</h3>
Chris Lattner83273d52003-10-07 20:33:52 +000013<tt>bugpoint [options] [input llvm ll/bc files] [LLVM passes] --args &lt;program arguments&gt;...</tt>
Chris Lattner1213bc72003-10-07 20:33:30 +000014
15<img src="../Debugging.gif" width=444 height=314 align=right>
16<h3>DESCRIPTION</h3>
17
18The <tt>bugpoint</tt> tool is a generally useful tool for narrowing down
Chris Lattnerd1eb6f72003-10-18 20:36:15 +000019problems in LLVM tools and passes. It can be used to debug three types of
20failures: optimizer crashes, miscompilations by optimizers, or invalid native
21code generation. It aims to reduce testcases to something useful. For example,
22if <tt><a href="gccas.html">gccas</a></tt> crashes while optimizing a file, it
23will identify the optimization (or combination of optimizations) that causes the
24crash, and reduce the file down to a small example which triggers the crash.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +000025
Chris Lattner5cd840c2003-10-18 20:54:37 +000026<tt>bugpoint</tt> has been designed to be a useful tool without requiring any
27hooks into the LLVM intrastructure at all. It works with any and all LLVM
28passes and code generators, and does not need to "know" how they work. Because
29of this, it may appear to do a lot of stupid things or miss obvious
30simplifications. Remember, however, that computer time is much cheaper than
31programmer time, so if it takes a long time to reduce a testcase it is still
32worth it. :)<p>
33
34<a name="crashdebug">
35<h4>Automatic Mode Selection</h4>
36
Chris Lattnerd1eb6f72003-10-18 20:36:15 +000037<tt>bugpoint</tt> reads the specified list of <tt>.bc</tt> or <tt>.ll</tt> files
38specified on the command-line and links them together. If any LLVM passes are
39specified on the command line, it runs these passes on the resultant module. If
Chris Lattner5cd840c2003-10-18 20:54:37 +000040any of the passes crash, or if they produce a malformed LLVM module,
41<tt>bugpoint</tt> enters <a href="#crashdebug">crash debugging mode</a>.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +000042
Chris Lattnerd1eb6f72003-10-18 20:36:15 +000043Otherwise, if the <a href="#opt_output"><tt>-output</tt></a> option was not
44specified, <tt>bugpoint</tt> runs the initial program with the C backend (which
45is assumed to generate good code) to generate a reference output. Once
46<tt>bugpoint</tt> has a reference output to match, it tries executing the
47original program with the <a href="#opt_run-">selected</a> code generator. If
48the resultant output is different than the reference output, it exters <a
49href="#codegendebug">code generator debugging mode</a>.<p>
50
51Otherwise, <tt>bugpoint</tt> runs the LLVM program after all of the LLVM passes
52have been applied to it. If the executed program matches the reference output,
53there is no problem <tt>bugpoint</tt> can debug. Otherwise, it enters <a
54href="#miscompilationdebug">miscompilation debugging mode</a>.<p>
55
56<a name="crashdebug">
Chris Lattner1213bc72003-10-07 20:33:30 +000057<h4>Crash debugging mode</h4>
58
Chris Lattnerd1eb6f72003-10-18 20:36:15 +000059If an optimizer crashes, <tt>bugpoint</tt> will try a variety of techniques to
60narrow down the list of passes and the code to a more manageable amount. First,
61<tt>bugpoint</tt> figures out which combination of passes trigger the bug. This
62is useful when debugging a problem exposed by <tt>gccas</tt> for example,
63because it has over 30 optimization it runs.<p>
Misha Brukman3f717222003-10-16 18:14:43 +000064
Chris Lattnerd1eb6f72003-10-18 20:36:15 +000065Next, <tt>bugpoint</tt> tries removing functions from the module, to reduce the
66size of the testcase to a reasonable amount. Usually it is able to get it down
67to a single function for intraprocedural optimizations. Once the number of
68functions has been reduced, it attempts to delete various edges in the control
69flow graph, to reduce the size of the function as much as possible. Finally,
70<tt>bugpoint</tt> deletes any individual LLVM instructions whose absense does
71not eliminate the failure. At the end, <tt>bugpoint</tt> should tell you what
72passes crash, give you a bytecode file, and give you instructions on how to
73reproduce the failure with <tt><a href="opt.html">opt</a></tt> or
74<tt><a href="analyze.html">analyze</a></tt>.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +000075
Chris Lattnerd1eb6f72003-10-18 20:36:15 +000076<a name="codegendebug">
77<h4>Code generator debugging mode</h4>
Chris Lattner1213bc72003-10-07 20:33:30 +000078
Chris Lattner5cd840c2003-10-18 20:54:37 +000079The code generator debugger attempts to narrow down the amount of code that is
80being miscompiled by the <a href="#opt_run-">selected</a> code generator. To do
81this, it takes the LLVM program and partitions it into two pieces: one piece
82which it compiles with the C backend (into a shared object), and one piece which
83it runs with either the JIT or the static LLC compiler. It uses several
84techniques to reduce the amount of code pushed through the LLVM code generator,
85to reduce the potential scope of the problem. After it is finished, it emits
86two bytecode files (the "test" [to be compiled with the code generator] and
87"safe" [to be compiled with the C backend] modules), and instructions for
88reproducing the problem. This module assume the C backend produces good
89code.<p>
90
91If you are using this mode and get an error message that says "Non-instruction
92is using an external function!", try using the <tt>-run-llc</tt> option instead
93of the <tt>-run-jit</tt> option. This is due to an unimplemented feature in the
94code generator debugging mode.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +000095
Chris Lattnerd1eb6f72003-10-18 20:36:15 +000096<a name="miscompilationdebug">
97<h4>Miscompilation debugging mode</h4>
Chris Lattner1213bc72003-10-07 20:33:30 +000098
Chris Lattner5cd840c2003-10-18 20:54:37 +000099The miscompilation debugging mode works similarly to the code generator
100debugging mode. It works by splitting the program into two pieces, running the
101optimizations specified on one piece, relinking the program, then executing it.
102It attempts to narrow down the list of passes to the one (or few) which are
103causing the miscompilation, then reduce the portion of the program which is
104being miscompiled. This module assumes that the selected code generator is
105working properly.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +0000106
107
108<h3>OPTIONS</h3>
109
110<ul>
Chris Lattner5cd840c2003-10-18 20:54:37 +0000111 <li><tt>-additional-so &lt;library.so&gt;</tt><br>
Chris Lattner1213bc72003-10-07 20:33:30 +0000112
Chris Lattner5cd840c2003-10-18 20:54:37 +0000113 Use this option to specify .so files which must be loaded by the program
114 when it is run. This is useful if you are debugging programs which
115 depend on non-LLVM libraries (such as the X or curses libraries) to
116 run.<p>
117
118 <li><tt>-args &lt;arguments&gt;</tt><br>
119 All arguments specified after <tt>-args</tt> are passed into the
120 executed program when the program must be executed.<p>
121
122 <li><tt>-disable-(adce,dce,final-cleanup,simplifycfg)</tt><br>
Chris Lattner1213bc72003-10-07 20:33:30 +0000123 <tt>bugpoint</tt> uses several passes internally for cleanup routines to
John Criswell589d91f2003-10-16 20:15:17 +0000124 reduce the size of the program. If you're trying to find a bug in one
Chris Lattner1213bc72003-10-07 20:33:30 +0000125 of these passes, <tt>bugpoint</tt> may crash. These options tell
Chris Lattner5cd840c2003-10-18 20:54:37 +0000126 <tt>bugpoint</tt> not use the specified passes.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +0000127
Chris Lattner5cd840c2003-10-18 20:54:37 +0000128 <li> <tt>-help</tt><br>
129 Print a summary of command line options.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +0000130
Chris Lattner5cd840c2003-10-18 20:54:37 +0000131 <a name="opt_input"><li><tt>-input &lt;filename&gt;</tt><br>
Chris Lattner1213bc72003-10-07 20:33:30 +0000132 Specify the contents of &lt;stdin&gt; when the program must be executed.
133 <p>
134
Chris Lattner5cd840c2003-10-18 20:54:37 +0000135 <li> <tt>-load &lt;plugin.so&gt;</tt><br>
Chris Lattner1213bc72003-10-07 20:33:30 +0000136 Load the dynamic object plugin.so. This object should register new
137 optimization passes. Once loaded, the object will add new command line
138 options to enable various optimizations. To see the new complete list
139 of optimizations, use the -help and -load options together:
140 <p>
141 <tt>opt -load &lt;plugin.so&gt; -help</tt>
142 <p>
143
Chris Lattner5cd840c2003-10-18 20:54:37 +0000144 <a name="opt_output"><li><tt>-output &lt;filename&gt;</tt><br>
145 Specify a reference output for the &lt;stdout&gt; file stream.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +0000146
Chris Lattner5cd840c2003-10-18 20:54:37 +0000147 <a name="opt_run-"><li><tt>-run-(int|jit|llc|cbe)</tt><br>
Chris Lattner1213bc72003-10-07 20:33:30 +0000148 Specify which code generator <tt>bugpoint</tt> should use to run the
Chris Lattner5cd840c2003-10-18 20:54:37 +0000149 program. You may choose the interpreter, the JIT compiler, the static
150 native code compiler, or the C backend.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +0000151</ul>
152
153<h3>EXIT STATUS</h3>
154
155If <tt>bugpoint</tt> succeeds in finding a problem, it will exit with 0.
156Otherwise, if an error occurs, it will exit with a non-zero value.
157
158<h3>SEE ALSO</h3>
John Criswell589d91f2003-10-16 20:15:17 +0000159<a href="opt.html"><tt>opt</tt></a>,
Chris Lattner1213bc72003-10-07 20:33:30 +0000160<a href="analyze.html"><tt>analyze</tt></a>
161
162<HR>
163Maintained by the <a href="http://llvm.cs.uiuc.edu">LLVM Team</a>.
164</body>
165</html>
166