Accidental enable of bad code
[oota-llvm.git] / docs / FAQ.html
index de90be4185d0027631e30f840c267f3de8293962..2dffd203ffdc406b61f45c1892979b74c338c388 100644 (file)
@@ -60,6 +60,8 @@
     <li><a href="#langs">What source languages are supported?</a></li>
     <li><a href="#langhlsupp">What support is there for higher level source
       language constructs for building a compiler?</a></li>
+    <li><a href="GetElementPtr.html">I don't understand the GetElementPtr
+      instruction. Help!</a></li>
   </ol>
 
   <li><a href="#cfe">Using the GCC Front End</a>
@@ -79,6 +81,8 @@
     How can I disable all optimizations when compiling code using the LLVM GCC front end?
     </li>
 
+    <li><a href="#translatec++">Can I use LLVM to convert C++ code to C code?</a></li>
+
   </ol>
   </li>
 
@@ -418,14 +422,21 @@ rebuilding.</p>
   <p>Currently, there isn't much. LLVM supports an intermediate representation
   which is useful for code representation but will not support the high level
   (abstract syntax tree) representation needed by most compilers. There are no
-  facilities for lexical nor semantical analysis. There is, however, a <i>mostly
+  facilities for lexical nor semantic analysis. There is, however, a <i>mostly
     implemented</i> configuration-driven 
   <a href="CompilerDriver.html">compiler driver</a> which simplifies the task
   of running optimizations, linking, and executable generation.</p>
-  <p>You might be interested in following the progress of the <a
-    href="http://hlvm.org">HLVM Project</a> which is attempting to address these
-  issues.</p>
 </div>
+
+<div class="question"><a name="langhlsupp">
+  <p>I don't understand the GetElementPtr
+      instruction. Help!</a></p>
+</div>
+<div class="answer">
+  <p>See <a href="GetElementPtr.html">The Often Misunderstood GEP
+   Instruction</a>.</li>
+</div>
+
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="cfe">Using the GCC Front End</a>
@@ -504,6 +515,70 @@ code that you desire.
 </p>
 </div>
 
+
+<div class="question">
+<p>
+<a name="translatec++">Can I use LLVM to convert C++ code to C code?</a>
+</p>
+</div>
+
+<div class="answer">
+<p>Yes, you can use LLVM to convert code from any language LLVM supports to C.
+Note that the generated C code will be very low level (all loops are lowered
+to gotos, etc) and not very pretty (comments are stripped, original source
+formatting is totally lost, variables are renamed, expressions are regrouped), 
+so this may not be what you're looking for.  However, this is a good way to add
+C++ support for a processor that does not otherwise have a C++ compiler.
+</p>
+
+<p>Use commands like this:</p>
+
+<ol>
+<li><p>Compile your program as normal with llvm-g++:</p></li>
+
+<div class="doc_code">$ llvm-g++ x.cpp -o program</div>
+
+<p>or:</p>
+
+<div class="doc_code">
+ llvm-g++ a.cpp -c<br>
+ llvm-g++ b.cpp -c<br>
+ llvm-g++ a.o b.o -o program
+</div>
+
+<p>With llvm-gcc3, this will generate program and program.bc.  The .bc file is 
+the LLVM version of the program all linked together.</p>
+
+<li><p>Convert the LLVM code to C code, using the LLC tool with the C
+backend:</p></li>
+
+<div class="doc_code">$ llc -march=c program.bc -o program.c</div>
+
+<li><p>Finally, compile the c file:</p></li>
+
+<div class="doc_code">$ cc x.c</div>
+
+</ol>
+
+<p>Note that, by default, the C backend does not support exception handling.
+If you want/need it for a certain program, you can enable it by passing
+"-enable-correct-eh-support" to the llc program.  The resultant code will
+use setjmp/longjmp to implement exception support that is correct but
+relatively slow.
+</p>
+
+<p>Also note: this specific sequence of commands won't work if you use a 
+function defined in the C++ runtime library (or any other C++ library).  To 
+access an external C++ library, you must manually 
+compile libstdc++ to LLVM bytecode, statically link it into your program, then
+use the commands above to convert the whole result into C code.  Alternatively,
+you can compile the libraries and your application into two different chunks
+of C code and link them.</p>
+
+</div>
+
+
+
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="cfe_code">Questions about code generated by the GCC front-end</a>