[llvm-commits] CVS: llvm/www/docs/HowToSubmitABug.html

Michael Brukman brukman at cs.uiuc.edu
Wed Sep 17 13:53:01 PDT 2003


Changes in directory llvm/www/docs:

HowToSubmitABug.html updated: 1.4 -> 1.5

---
Log message:

Added sections about debugging mis-compilations and incorrect code generation.


---
Diffs of the changes:

Index: llvm/www/docs/HowToSubmitABug.html
diff -u llvm/www/docs/HowToSubmitABug.html:1.4 llvm/www/docs/HowToSubmitABug.html:1.5
--- llvm/www/docs/HowToSubmitABug.html:1.4	Sun Aug 24 12:30:55 2003
+++ llvm/www/docs/HowToSubmitABug.html	Wed Sep 17 13:51:47 2003
@@ -20,8 +20,10 @@
     <li><a href="#passes">Bugs in LLVM passes</a>
     </ul>
   <li><a href="#miscompilations">Miscompilations</a>
+  <li><a href="#codegen">Incorrect code generation (JIT and LLC)</a>
 
-  <p><b>Written by <a href="mailto:sabre at nondot.org">Chris Lattner</a></b><p>
+  <p><b>Written by <a href="mailto:sabre at nondot.org">Chris Lattner</a> and
+                   <a href="http://misha.brukman.net">Misha Brukman</a></b><p>
 </ol><p></font>
 </td><td valign=top align=right>
 <img src="Debugging.gif" width=444 height=314>
@@ -138,7 +140,7 @@
 the full list of objects linked).  Then run:<p>
 
 <pre>
-  <b>as</b> < /dev/null > null.bc
+  <b>llvm-as</b> < /dev/null > null.bc
   <b>gccld</b> -debug-pass=Arguments null.bc
 </pre><p>
 
@@ -180,13 +182,80 @@
 <!-- *********************************************************************** -->
 </ul><table width="100%" bgcolor="#330077" border=0 cellpadding=4 cellspacing=0>
 <tr><td align=center><font color="#EEEEFF" size=+2 face="Georgia,Palatino"><b>
-<a name="miscompilations">Miscompilations
+<a name="miscompilations">Miscompilations</a>
 </b></font></td></tr></table><ul>
 <!-- *********************************************************************** -->
 
-Fortunately we haven't had too many miscompilations.  Because of this, this
-section is a TODO.  Basically, use bugpoint to track down the problem.<p>
+A miscompilation occurs when a pass does not correctly transform a program, thus
+producing errors that are only noticed during execution. This is different from
+producing invalid LLVM code (i.e., code not in SSA form, using values before
+defining them, etc.) which the verifier will check for after a pass finishes its
+run.<p>
 
+To debug a miscompilation, you should choose which program you wish to run the
+output through, e.g. C backend, the JIT, or LLC, and a selection of passes, one
+of which may be causing the error, and run, for example:
+
+<pre>
+  <b>bugpoint</b> -run-cbe -mode=compile [... optimization passes ...] file-to-test.bc
+</pre>
+
+<tt>bugpoint</tt> will try to narrow down your list of passes to the one pass
+that causes an error, and simplify the bytecode file as much as it can to assist
+you. It will print a message letting you know how to reproduce the resulting
+error.
+
+<!-- *********************************************************************** -->
+</ul><table width="100%" bgcolor="#330077" border=0 cellpadding=4 cellspacing=0>
+<tr><td align=center><font color="#EEEEFF" size=+2 face="Georgia,Palatino"><b>
+<a name="codegen">Incorrect code generation</a>
+</b></font></td></tr></table><ul>
+<!-- *********************************************************************** -->
+
+Similarly to debugging incorrect compilation by mis-behaving passes, you can
+debug incorrect code generation by either LLC or the JIT, using
+<tt>bugpoint</tt>. The process <tt>bugpoint</tt> follows in this case is to try
+to narrow the code down to a function that is miscompiled by one or the other
+method, but since for correctness, the entire program must be run,
+<tt>bugpoint</tt> will compile the code it deems to not be affected with the C
+Backend, and then link in the shared object it generates.<p>
+
+To debug the JIT:
+<pre>
+  <b>bugpoint</b> -run-jit -mode=codegen -output=[correct output file] [bytecodefile]
+</pre>
+
+Similarly, to debug the LLC, one would run:
+<pre>
+  <b>bugpoint</b> -run-llc -mode=codegen -output=[correct output file] [bytecodefile]
+</pre>
+
+At the end of a successful <tt>bugpoint</tt> run, you will be presented
+with two bytecode files: a <em>safe</em> file which can be compiled with the C
+backend and the <em>test</em> file which either LLC or the JIT
+mis-codegenerates, and thus causes the error.<p>
+
+To reproduce the error that <tt>bugpoint</tt> found, it is sufficient to do the
+following:
+
+<ol>
+  <li>Regenerate the shared object from the safe bytecode file:<br>
+<pre>
+  <b>llvm-dis</b> -c safe.bc -o safe.c<br>
+  <b>gcc</b> -shared safe.c -o safe.so
+</pre></li>
+  <li>If debugging LLC, compile test bytecode native and link with the shared object:<br>
+<pre>
+  <b>llc</b> test.bc -o test.s -f<br>
+  gcc test.s safe.so -o test.llc<br>
+  ./test.llc [program options]
+</pre></li>
+      <p>
+     If debugging the JIT, load the shared object and supply the test bytecode:<br>
+<pre>
+  <b>lli</b> -load=safe.so test.bc [program options]
+</pre></li>  
+</ol>
 
 <!-- *********************************************************************** -->
 </ul>
@@ -196,6 +265,6 @@
 <address><a href="mailto:sabre at nondot.org">Chris Lattner</a></address>
 <!-- Created: Tue Aug  6 15:00:33 CDT 2002 -->
 <!-- hhmts start -->
-Last modified: Fri May 23 09:48:53 CDT 2003
+Last modified: Wed Sep 17 13:49:15 CDT 2003
 <!-- hhmts end -->
 </font></body></html>





More information about the llvm-commits mailing list