add llvm ir bitcode definition file
[oota-llvm.git] / docs / GettingStarted.html
index b6a710dec7c8cd49ef082ab57d483f21801e482e..0e871336deb83ca2aa1345113c8439ded797076a 100644 (file)
@@ -54,7 +54,6 @@
   <li><a href="#tutorial">An Example Using the LLVM Tool Chain</a>
       <ol>
          <li><a href="#tutorial4">Example with llvm-gcc4</a></li>
-         <li><a href="#tutorial3">Example with llvm-gcc3</a></li>
       </ol>
   <li><a href="#problems">Common Problems</a>
   <li><a href="#links">Links</a>
@@ -90,7 +89,7 @@ used to test the LLVM tools and the GCC front end.</p>
 
 <p>The second piece is the GCC front end.  This component provides a version of
 GCC that compiles C and C++ code into LLVM bytecode.  Currently, the GCC front
-end is a modified version of GCC 3.4 (we track the GCC 3.4 development).  Once
+end uses the GCC parser to convert code to LLVM.  Once
 compiled into LLVM bytecode, a program can be manipulated with the LLVM tools
 from the LLVM suite.</p>
 
@@ -526,6 +525,8 @@ the "<tt>convert_from_eh_region_ranges_1</tt>" GCC function.</p>
    possibly others) does not compile LLVM correctly (it appears that exception 
    handling is broken in some cases).  Please download the FSF 3.3.3 or upgrade
    to a newer version of GCC.</p>
+<p><b>GCC 3.4.x</b> on X86-64/amd64</b>: GCC <a href="http://llvm.org/PR1056">
+   miscompiles portions of LLVM</a>.</p>
 <p><b>IA-64 GCC 4.0.0</b>: The IA-64 version of GCC 4.0.0 is known to
    miscompile LLVM.</p>
 <p><b>Apple Xcode 2.3</b>: GCC crashes when compiling LLVM at -O3 (which is the
@@ -538,6 +539,8 @@ the "<tt>convert_from_eh_region_ranges_1</tt>" GCC function.</p>
    miscompiles portions of LLVM</a> when compiling llvm itself into 64-bit 
    code.  LLVM will appear to mostly work but will be buggy, e.g. failing 
    portions of its testsuite.</p>
+<p><b>GCC 4.1.2 on OpenSUSE</b>: Seg faults during libstdc++ build and on x86_64
+platforms compiling md5.c gets a mangled constant.</p>
 <p><b>GNU ld 2.16.X</b>. Some 2.16.X versions of the ld linker will produce very
 long warning messages complaining that some ".gnu.linkonce.t.*" symbol was
 defined in a discarded section. You can safely ignore these messages as they are
@@ -648,12 +651,6 @@ compressed with the gzip program.
   <dt><tt>llvm-test-x.y.tar.gz</tt></dt>
   <dd>Source release for the LLVM test suite.</dd>
 
-  <dt><tt>llvm-gcc3.4-x.y.source.tar.gz</tt></dt>
-  <dd>Source release of the LLVM GCC 3.4 front end.<br/></dd>
-       
-  <dt><tt>llvm-gcc3.4-x.y-platform.tar.gz</tt></dt>
-  <dd>Binary release of the LLVM GCC 3.4 for a specific platform.<br/></dd>
-
   <dt><tt>llvm-gcc4-x.y.source.tar.gz</tt></dt>
   <dd>Source release of the llvm-gcc4 front end.  See README.LLVM in the root
       directory for build instructions.<br/></dd>
@@ -719,14 +716,9 @@ you get it from the CVS repository:</p>
 configured by the LLVM configure script as well as automatically updated when
 you run <tt>cvs update</tt>.</p>
 
-<p>If you would like to get the GCC 3.4 front end source code, you can also get it from the CVS repository:</p>
-
-<pre>
-  cvs -z3 -d :pserver:anon@llvm.org:/var/cvs/llvm co llvm-gcc
-</pre>
-
-<p>Please note that you must follow <a href="CFEBuildInstrs.html">these 
-instructions</a> to successfully build the LLVM GCC front-end.</p>
+<p>If you would like to get the GCC front end source code, you can also get it 
+and build it yourself.  Please follow <a href="CFEBuildInstrs.html">these 
+instructions</a> to successfully get and build the LLVM GCC front-end.</p>
 
 </div>
 
@@ -737,10 +729,11 @@ instructions</a> to successfully build the LLVM GCC front-end.</p>
 
 <div class="doc_text">
 
-<p>Before configuring and compiling the LLVM suite, you need to extract the LLVM
-GCC front end from the binary distribution.  It is used for building the
-bytecode libraries later used by the GCC front end for linking programs, and its
-location must be specified when the LLVM suite is configured.</p>
+<p>Before configuring and compiling the LLVM suite, you can optionally extract the 
+LLVM GCC front end from the binary distribution.  It is used for running the 
+llvm-test testsuite and for compiling C/C++ programs.  Note that you can optionally
+<a href="CFEBuildInstrs.html">build llvm-gcc yourself</a> after building the
+main LLVM repository.</p>
 
 <p>To install the GCC front end, do the following:</p>
 
@@ -750,10 +743,13 @@ location must be specified when the LLVM suite is configured.</p>
       -</tt></li>
 </ol>
 
-<p>Next, you will need to fix your system header files (llvm-gcc3.4 only):</p>
-
-<p><tt>cd llvm-gcc3.4/<i>platform</i><br>
-   ./fixheaders</tt></p>
+<p>Once the binary is uncompressed, you should add a symlink for llvm-gcc and 
+llvm-g++ to some directory in your path.  When you configure LLVM, it will 
+automatically detect llvm-gcc's presence (if it is in your path) enabling its
+use in llvm-test.  Note that you can always build or install llvm-gcc at any
+pointer after building the main LLVM repository: just reconfigure llvm and 
+llvm-test will pick it up.
+</p>
 
 <p>The binary versions of the GCC front end may not suit all of your needs.  For
 example, the binary distribution may include an old version of a system header
@@ -762,7 +758,7 @@ linked with libraries not available on your system.</p>
 
 <p>In cases like these, you may want to try <a
 href="CFEBuildInstrs.html">building the GCC front end from source.</a> This is
-not for the faint of heart, so be forewarned.</p>
+much easier now than it was in the past.</p>
 
 </div>
 
@@ -861,6 +857,11 @@ script to configure the build system:</p>
   documentation from the source code. This is disabled by default because 
   generating the documentation can take a long time and producess 100s of 
   megabytes of output.</dd>
+  <dt><i>--with-udis86</i></dt>
+  <dd>LLVM can use external disassembler library for various purposes (now it's
+  used only for examining code produced by JIT). This option will enable usage
+  of <a href="http://udis86.sourceforge.net/">udis86</a> x86 (both 32 and 64
+  bits) disassembler library.</dd>
 </dl>
 
 <p>To configure LLVM, follow these steps:</p>
@@ -1349,11 +1350,10 @@ information is in the <a href="CommandGuide/index.html">Command Guide</a>.</p>
   LLVM assembly.</dd>
 
   <dt><tt><b>llvm-ld</b></tt></dt>
-  <dd><tt>llvm-ld</tt> is very similar to gccld and provides a general purpose
-  and extensible linker for LLVM. This is the linker invoked by <tt>llvmc</tt>.
-  It allows optimization modules to be loaded so that language specific
-  optimizations can be applied at link time. This tool is considered
-  experimental.</dd>
+  <dd><tt>llvm-ld</tt> is a general purpose and extensible linker for LLVM. 
+  This is the linker invoked by <tt>llvmc</tt>. It performsn standard link time
+  optimizations and allows optimization modules to be loaded and run so that 
+  language specific optimizations can be applied at link time.</dd>
 
   <dt><tt><b>llvm-link</b></tt></dt>
   <dd><tt>llvm-link</tt>, not surprisingly, links multiple LLVM modules into 
@@ -1375,36 +1375,13 @@ information is in the <a href="CommandGuide/index.html">Command Guide</a>.</p>
   the -march=c option).</dd>
 
   <dt><tt><b>llvm-gcc</b></tt></dt>
-  <dd><tt>llvm-gcc</tt> is a GCC-based C frontend
-  that has been retargeted to emit LLVM code as the machine code output.  It
-  works just like any other GCC compiler, taking the typical <tt>-c, -S, -E,
-  -o</tt> options that are typically used.  The source code for the
-  <tt>llvm-gcc</tt> tool is available as a separate CVS module.
-  <blockquote>
-    <dl>
-      <dt><tt><b>gccas</b></tt></dt>
-      <dd>This tool is invoked by the <tt>llvm-gcc</tt> frontend as the 
-      "assembler" part of the compiler.  This tool actually assembles LLVM 
-      assembly to LLVM bytecode, performs a variety of optimizations, and 
-      outputs LLVM bytecode.  Thus when you invoke 
-      <tt>llvm-gcc -c x.c -o x.o</tt>, you are causing <tt>gccas</tt> to be 
-      run, which writes the <tt>x.o</tt> file (which is an LLVM bytecode file 
-      that can be disassembled or manipulated just like any other bytecode 
-      file).  The command line interface to <tt>gccas</tt> is designed to be 
-      as close as possible to the <b>system</b> `<tt>as</tt>' utility so that 
-      the gcc frontend itself did not have to be modified to interface to 
-      a "weird" assembler.</dd>
-
-      <dt><tt><b>gccld</b></tt></dt>
-      <dd><tt>gccld</tt> links together several LLVM bytecode files into one 
-      bytecode file and does some optimization.  It is the linker invoked by 
-      the GCC frontend when multiple .o files need to be linked together.  
-      Like <tt>gccas</tt>, the command line interface of <tt>gccld</tt> is 
-      designed to match the system linker, to aid interfacing with the GCC 
-      frontend.</dd>
-    </dl>
-  </blockquote>
-  </dd>
+  <dd><tt>llvm-gcc</tt> is a GCC-based C frontend that has been retargeted to 
+  use LLVM as its backend instead of GCC's RTL backend. It can also emit LLVM 
+  byte code or assembly (with the <tt>-emit-llvm</tt> option) instead of the
+  usual machine code output.  It works just like any other GCC compiler, 
+  taking the typical <tt>-c, -S, -E, -o</tt> options that are typically used.  
+  Additionally, the the source code for <tt>llvm-gcc</tt> is available as a 
+  separate CVS module.</dd>
 
   <dt><tt><b>opt</b></tt></dt>
   <dd><tt>opt</tt> reads LLVM bytecode, applies a series of LLVM to LLVM 
@@ -1504,8 +1481,8 @@ are code generators for parts of LLVM infrastructure.</p>
 <!-- *********************************************************************** -->
 
 <div class="doc_text">
-<p>This section gives an example of using LLVM.  Since we are currently 
-transitioning from llvm-gcc3 to llvm-gcc4, we include examples for both.
+<p>This section gives an example of using LLVM.  llvm-gcc3 is now obsolete,
+so we only include instructiosn for llvm-gcc4.
 </p>
 
 <p><b>Note:</b> The <i>gcc4</i> frontend's invocation is <b><i>considerably different</i></b>
@@ -1588,66 +1565,6 @@ output.</p>
 
 </div>
 
-<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="tutorial3">Example with llvm-gcc3</a></div>
-
-<div class="doc_text">
-
-<ol>
-  <li>First, create a simple C file, name it 'hello.c':
-       <pre>
-   #include &lt;stdio.h&gt;
-   int main() {
-     printf("hello world\n");
-     return 0;
-   }
-       </pre></li>
-
-  <li><p>Next, compile the C file into a LLVM bytecode file:</p>
-      <p><tt>% llvm-gcc hello.c -o hello</tt></p>
-
-      <p>Note that you should have already built the tools and they have to be
-      in your path, at least <tt>gccas</tt> and <tt>gccld</tt>.</p>
-
-      <p>This will create two result files: <tt>hello</tt> and
-      <tt>hello.bc</tt>. The <tt>hello.bc</tt> is the LLVM bytecode that
-      corresponds the the compiled program and the library facilities that it
-      required.  <tt>hello</tt> is a simple shell script that runs the bytecode
-      file with <tt>lli</tt>, making the result directly executable.  Note that
-      all LLVM optimizations are enabled by default, so there is no need for a 
-      "-O3" switch.</p></li>
-
-  <li><p>Run the program. To make sure the program ran, execute one of the
-      following commands:</p>
-
-      <p><tt>% ./hello</tt></p>
-
-      <p>or</p>
-
-      <p><tt>% lli hello.bc</tt></p></li>
-
-  <li><p>Use the <tt>llvm-dis</tt> utility to take a look at the LLVM assembly
-      code:</p>
-
-      <p><tt>% llvm-dis &lt; hello.bc | less</tt><br><br></li>
-
-  <li><p>Compile the program to native assembly using the LLC code
-      generator:</p>
-
-      <p><tt>% llc hello.bc -o hello.s</tt></p>
-
-  <li><p>Assemble the native assembly language file into a program:</p>
-
-      <p><b>Solaris:</b><tt>% /opt/SUNWspro/bin/cc -xarch=v9 hello.s -o hello.native</tt></p>
-      <p><b>Others:</b><tt>% gcc hello.s -o hello.native</tt></p>
-
-  <li><p>Execute the native code program:</p>
-
-      <p><tt>% ./hello.native</tt></p></li>
-
-</ol>
-
-</div>
 
 <!-- *********************************************************************** -->
 <div class="doc_section">