blob: 502bca56232accc12874f31ef19b2e42ee712fa7 [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>
Brian Gaekeb9b3c332003-10-19 17:03:59 +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
Brian Gaekeb9b3c332003-10-19 17:03:59 +000021code generation. It aims to reduce test cases to something useful. For example,
Chris Lattnerd1eb6f72003-10-18 20:36:15 +000022if <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
Brian Gaekeb9b3c332003-10-19 17:03:59 +000027hooks into the LLVM infrastructure at all. It works with any and all LLVM
Chris Lattner5cd840c2003-10-18 20:54:37 +000028passes 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
Brian Gaekeb9b3c332003-10-19 17:03:59 +000031programmer time, so if it takes a long time to reduce a test case it is still
Chris Lattner5cd840c2003-10-18 20:54:37 +000032worth 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
Brian Gaekeb9b3c332003-10-19 17:03:59 +000048the resultant output is different than the reference output, it enters <a
Chris Lattnerd1eb6f72003-10-18 20:36:15 +000049href="#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,
Brian Gaekeb9b3c332003-10-19 17:03:59 +000063because it runs over 30 optimizations.<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
Brian Gaekeb9b3c332003-10-19 17:03:59 +000066size of the test case to a reasonable amount. Usually it is able to get it down
Chris Lattnerd1eb6f72003-10-18 20:36:15 +000067to 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,
Brian Gaekeb9b3c332003-10-19 17:03:59 +000070<tt>bugpoint</tt> deletes any individual LLVM instructions whose absence does
Chris Lattnerd1eb6f72003-10-18 20:36:15 +000071not 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
Chris Lattner634ec562003-10-18 21:34:15 +0000108<a name="bugpoint notes">
109<h4>Advice for using <tt>bugpoint</tt></h4>
110
111<tt>bugpoint</tt> can be a remarkably useful tool, but it sometimes works in
112non-obvious ways. Here are some hints and tips:<p>
113
114<ol>
115<li>In code generator and miscompilation debugging modes, <tt>bugpoint</tt> only
116 works with programs that have deterministic output. Thus, if the program
Brian Gaekeb9b3c332003-10-19 17:03:59 +0000117 outputs the date, time, or any other "random" data, <tt>bugpoint</tt> may
118 misinterpret differences in these data, when output, as the result of a
119 miscompilation. Programs should be temporarily modified to disable
120 outputs that are likely to vary from run to run.
Chris Lattner634ec562003-10-18 21:34:15 +0000121
122<li>In code generator and miscompilation debugging modes, debugging will go
123 faster if you manually modify the program or its inputs to reduce the
124 runtime, but still exhibit the problem.
125
126<li><tt>bugpoint</tt> is extremely useful when working on a new optimization:
127 it helps track down regressions quickly. To avoid having to relink
Brian Gaekeb9b3c332003-10-19 17:03:59 +0000128 <tt>bugpoint</tt> every time you change your optimization however, have
Chris Lattner634ec562003-10-18 21:34:15 +0000129 <tt>bugpoint</tt> dynamically load your optimization with the <a
130 href="#opt_load"><tt>-load</tt></a> option.
131
132<li><tt>bugpoint</tt> can generate a lot of output and run for a long period of
133 time. It is often useful to capture the output of the program to file. For
Brian Gaekeb9b3c332003-10-19 17:03:59 +0000134 example, in the C shell, you can type:<br>
135 <tt>bugpoint ..... |& tee bugpoint.log</tt>
136 <br>to get a copy of <tt>bugpoint</tt>'s output in the file
137 <tt>bugpoint.log</tt>, as well as on your terminal.<p>
Chris Lattner634ec562003-10-18 21:34:15 +0000138
139</ol>
140
141
Chris Lattner1213bc72003-10-07 20:33:30 +0000142<h3>OPTIONS</h3>
143
144<ul>
Chris Lattner5cd840c2003-10-18 20:54:37 +0000145 <li><tt>-additional-so &lt;library.so&gt;</tt><br>
Brian Gaekeb9b3c332003-10-19 17:03:59 +0000146 Load <tt>&lt;library.so&gt;</tt> into the test program whenever it is run.
147 This is useful if you are debugging programs which depend on non-LLVM
148 libraries (such as the X or curses libraries) to run.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +0000149
Brian Gaekeb9b3c332003-10-19 17:03:59 +0000150 <li><tt>-args &lt;program args&gt;</tt><br>
151 Pass all arguments specified after <tt>-args</tt> to the
152 test program whenever it runs. Note that if any of
153 the <tt>&lt;program args&gt;</tt> start with a '-', you should use:
Chris Lattner0b4ffea2003-10-18 20:57:23 +0000154 <p>
Brian Gaekeb9b3c332003-10-19 17:03:59 +0000155 <tt>bugpoint &lt;bugpoint args&gt; -args -- &lt;program args&gt;</tt>
Chris Lattner0b4ffea2003-10-18 20:57:23 +0000156 <p>
157 The "<tt>--</tt>" right after the <tt>-args</tt> option tells
158 <tt>bugpoint</tt> to consider any options starting with <tt>-</tt> to be
159 part of the <tt>-args</tt> option, not as options to <tt>bugpoint</tt>
160 itself.<p>
Chris Lattner5cd840c2003-10-18 20:54:37 +0000161
Brian Gaekeb9b3c332003-10-19 17:03:59 +0000162 <li><tt>-disable-{adce,dce,final-cleanup,simplifycfg}</tt><br>
163 Do not run the specified passes to clean up and reduce the size of the
164 test program. By default, <tt>bugpoint</tt> uses these passes internally
165 when attempting to reduce test programs. If you're trying to find
166 a bug in one of these passes, <tt>bugpoint</tt> may crash.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +0000167
Chris Lattner5cd840c2003-10-18 20:54:37 +0000168 <li> <tt>-help</tt><br>
169 Print a summary of command line options.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +0000170
Chris Lattner5cd840c2003-10-18 20:54:37 +0000171 <a name="opt_input"><li><tt>-input &lt;filename&gt;</tt><br>
Brian Gaekeb9b3c332003-10-19 17:03:59 +0000172 Open <tt>&lt;filename&gt;</tt> and redirect the standard input of the
173 test program, whenever it runs, to come from that file.
Chris Lattner1213bc72003-10-07 20:33:30 +0000174 <p>
175
Chris Lattner634ec562003-10-18 21:34:15 +0000176 <a name="opt_load"><li> <tt>-load &lt;plugin.so&gt;</tt><br>
Brian Gaekeb9b3c332003-10-19 17:03:59 +0000177 Load the dynamic object <tt>&lt;plugin.so&gt;</tt> into <tt>bugpoint</tt>
178 itself. This object should register new
Chris Lattner1213bc72003-10-07 20:33:30 +0000179 optimization passes. Once loaded, the object will add new command line
180 options to enable various optimizations. To see the new complete list
181 of optimizations, use the -help and -load options together:
182 <p>
Brian Gaekeb9b3c332003-10-19 17:03:59 +0000183 <tt>bugpoint -load &lt;plugin.so&gt; -help</tt>
Chris Lattner1213bc72003-10-07 20:33:30 +0000184 <p>
185
Chris Lattner5cd840c2003-10-18 20:54:37 +0000186 <a name="opt_output"><li><tt>-output &lt;filename&gt;</tt><br>
Brian Gaekeb9b3c332003-10-19 17:03:59 +0000187 Whenever the test program produces output on its standard output
188 stream, it should match the contents of <tt>&lt;filename&gt;</tt>
189 (the "reference output"). If you do not use this option,
190 <tt>bugpoint</tt> will attempt to generate a reference output by
191 compiling the program with the C backend and running it.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +0000192
Brian Gaekeb9b3c332003-10-19 17:03:59 +0000193 <a name="opt_run-"><li><tt>-run-{int|jit|llc|cbe}</tt><br>
194 Whenever the test program is compiled, <tt>bugpoint</tt> should generate
195 code for it using the specified code generator. These options allow
196 you to choose the interpreter, the JIT compiler, the static native
197 code compiler, or the C backend, respectively.<p>
Chris Lattner1213bc72003-10-07 20:33:30 +0000198</ul>
199
200<h3>EXIT STATUS</h3>
201
202If <tt>bugpoint</tt> succeeds in finding a problem, it will exit with 0.
203Otherwise, if an error occurs, it will exit with a non-zero value.
204
205<h3>SEE ALSO</h3>
John Criswell589d91f2003-10-16 20:15:17 +0000206<a href="opt.html"><tt>opt</tt></a>,
Chris Lattner1213bc72003-10-07 20:33:30 +0000207<a href="analyze.html"><tt>analyze</tt></a>
208
209<HR>
210Maintained by the <a href="http://llvm.cs.uiuc.edu">LLVM Team</a>.
211</body>
212</html>