Fix a problem with use of undefined variables. Print an error message if
[oota-llvm.git] / docs / FAQ.html
index cc1fef79427e43db57e232dd5808e2b85a5cb942..2ab00ac7e9056d137067faa74870bbbdff91feb1 100644 (file)
   target".</li>
   </ol></li>
 
+  <li><a href="#felangs">Source Languages</a>
+  <ol>
+    <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>
+  </ol>
+
   <li><a href="#cfe">Using the GCC Front End</a>
   <ol>
     <li>
@@ -72,6 +79,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>
 
@@ -383,6 +392,39 @@ which list dependencies for source files, and rebuild:</p>
 rebuilding.</p>
 </div>
 
+<!-- *********************************************************************** -->
+<div class="doc_section"><a name="felangs">Source Languages</a></div>
+
+<div class="question"><p>
+  <a name="langs">What source languages are supported?</a></p>
+</div>
+<div class="answer">
+  <p>LLVM currently has full support for C and C++ source languages. These are
+  available through a special version of GCC that LLVM calls the 
+  <a href="#cfe">C Front End</a></p>
+  <p>There is an incomplete version of a Java front end available in the
+  <tt>llvm-java</tt> CVS repository. There is no documentation on this yet so
+  you'll need to download the code, compile it, and try it.</p>
+  <p>In the <tt>examples/BFtoLLVM</tt> directory is a translator for the 
+  BrainF*** language (2002 Language Specification).</p>
+  <p>In the <tt>projects/Stacker</tt> directory is a compiler and runtime
+  library for the Stacker language, a "toy" language loosely based on Forth.</p>
+  <p>The PyPy developers are working on integrating LLVM into the PyPy backend
+  so that PyPy language can translate to LLVM.</p>
+</div>
+<div class="question"><a name="langhlsupp">
+  <p>What support is there for a higher level source language constructs for 
+  building a compiler?</a></p>
+</div>
+<div class="answer">
+  <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 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>
+</div>
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="cfe">Using the GCC Front End</a>
@@ -461,6 +503,61 @@ 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
+ llvm-g++ b.cpp -c
+ 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>
+</div>
+
+
+
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="cfe_code">Questions about code generated by the GCC front-end</a>