<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>
<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>
<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>
-</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
<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>
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>
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
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
<!-- *********************************************************************** -->
<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>
</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 <stdio.h>
- 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 < 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">