Fix compilation problem; make the cast and the LHS be the same type.
[oota-llvm.git] / docs / GettingStarted.html
index 75731134f5f20bb96f2507966ecbff4bd9f58acd..f930d42add71e99022b378c7d5afbf88a127195e 100644 (file)
@@ -18,6 +18,7 @@
     <ol>
       <li><a href="#hardware">Hardware</a>
       <li><a href="#software">Software</a>
+      <li><a href="#brokengcc">Broken versions of GCC</a>
     </ol></li>
 
   <li><a href="#starting">Getting Started with LLVM</a>
@@ -40,6 +41,7 @@
       <li><a href="#lib"><tt>llvm/lib</tt></a>
       <li><a href="#runtime"><tt>llvm/runtime</tt></a>  
       <li><a href="#test"><tt>llvm/test</tt></a>
+      <li><a href="#llvmtest"><tt>llvm-test</tt></a>
       <li><a href="#tools"><tt>llvm/tools</tt></a>  
       <li><a href="#utils"><tt>llvm/utils</tt></a>
     </ol></li>
@@ -144,9 +146,10 @@ from the LLVM suite.</p>
 
   <li>Build the LLVM Suite:
   <ol>
-      <li>Set your LLVM_LIB_SEARCH_PATH environment variable.
-      <li><tt>gmake -k |& tee gnumake.out
-      &nbsp;&nbsp;&nbsp;# this is csh or tcsh syntax</tt>
+      <li>Set your LLVM_LIB_SEARCH_PATH environment variable.</li>
+      <li><tt>gmake -k |&amp; tee gnumake.out
+      &nbsp;&nbsp;&nbsp;# this is csh or tcsh syntax</tt></li>
+      <li>If you get an "internal compiler error (ICE)" see <a href="#brokengcc">below</a>.</li>
   </ol>
 
 </ol>
@@ -186,31 +189,31 @@ software you will need.</p>
 
   <li>Linux on x86 (Pentium and above)
   <ul>
-    <li>Approximately 1.02 GB of Free Disk Space
+    <li>Approximately 2.6 GB of Free Disk Space
     <ul>
-      <li>Source code: 45 MB</li>
-      <li>Object code: 956 MB</li>
-      <li>GCC front end: 40 MB</li>
+      <li>Source code: 57 MB</li>
+      <li>Object code: 2.5 GB</li>
+      <li>GCC front end: 30 MB</li>
     </ul></li>
   </ul>
   </li>
 
   <li>Solaris on SparcV9 (Ultrasparc)
   <ul>
-    <li>Approximately 1.75 GB of Free Disk Space
+    <li>Approximately 2.6 GB of Free Disk Space
       <ul>
-        <li>Source code: 45 MB</li>
-        <li>Object code: 1705 MB</li>
-        <li>GCC front end: 50 MB</li>
+        <li>Source code: 57 MB</li>
+        <li>Object code: 2.5 GB</li>
+        <li>GCC front end: 46 MB</li>
       </ul></li>
   </ul>
   </li>
 
   <li>FreeBSD on x86 (Pentium and above)
   <ul>
-    <li>Approximately 935 MB of Free Disk Space
+    <li>Approximately 1 GB of Free Disk Space
     <ul>
-      <li>Source code: 45 MB</li>
+      <li>Source code: 57 MB</li>
       <li>Object code: 850 MB</li>
       <li>GCC front end: 40 MB</li>
     </ul></li>
@@ -219,16 +222,28 @@ software you will need.</p>
 
   <li>MacOS X on PowerPC
   <ul>
-    <li>No native code generation
-    <li>Approximately 1.25 GB of Free Disk Space
+    <li>Experimental support for static native code generation
+    <li>Approximately 1.6 GB of Free Disk Space
       <ul>
-        <li>Source code: 45 MB</li>
-        <li>Object code: 1160 MB</li>
-        <li>GCC front end: 40 MB</li>
+        <li>Source code: 57 MB</li>
+        <li>Object code: 1.5 GB</li>
+        <li>GCC front end: 36 MB</li>
       </ul></li>
   </ul>
+  </li>
 
+  <li>AIX on PowerPC
+  <ul>
+    <li><div class="doc_warning">No native code generation</div>
+    <li>Approximately 2 GB of Free Disk Space
+      <ul>
+        <li>Source code: 92 MB</li>
+        <li>Object code: 2.8 GB</li>
+        <li>GCC front end: 123 MB</li>
+      </ul></li>
+  </ul>
   </li>
+
 </ul>
 
 <p>The LLVM suite <i>may</i> compile on other platforms, but it is not
@@ -238,8 +253,8 @@ generation should work as well, although the generated native code may not work
 on your platform.</p>
 
 <p>The GCC front end is not very portable at the moment.  If you want to get it
-to work on another platform, you can download a copy of the source and try to
-compile it on your platform.</p>
+to work on another platform, you can download a copy of the source and <a
+href="CFEBuildInstrs.html">try to compile it</a> on your platform.</p>
 
 </div>
 
@@ -255,7 +270,7 @@ installed:</p>
 
 <ul>
   <li><a href="http://gcc.gnu.org">GCC 3.x with C and C++ language
-  support</a></li>
+  support</a>  (See <a href="#brokengcc">below</a> for specific version info)</li>
 
   <li><a href="http://savannah.gnu.org/projects/make">GNU Make</a></li>
 
@@ -297,26 +312,56 @@ LLVM:</p>
       </li>
 
 </ul>
+</div>
 
-<p>The remainder of this guide is meant to get you up and running with
-LLVM and to give you some basic information about the LLVM environment.
-A <a href="#starting">complete guide to installation</a> is provided in the
-next section.</p>
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="brokengcc">Broken versions of GCC</a>
+</div>
 
-<p>The later sections of this guide describe the <a
-href="#layout">general layout</a> of the the LLVM source tree, a <a
-href="#tutorial">simple example</a> using the LLVM tool chain, and <a
-href="#links">links</a> to find more information about LLVM or to get
-help via e-mail.</p>
+<div class="doc_text">
+
+<p>LLVM is very demanding of the host C++ compiler, and as such tends to expose
+bugs in the compiler.  In particular, several versions of GCC crash when trying
+to compile LLVM.  We routinely use GCC 3.3.3 and GCC 3.4.0 and have had success
+with them.  Other versions of GCC will probably work as well.  GCC versions listed
+here are known to not work.  If you are using one of these versions, please try
+to upgrade your GCC to something more recent.  If you run into a problem with a
+version of GCC not listed here, please <a href="mailto:llvmdev@cs.uiuc.edu">let
+us know</a>.  Please use the "<tt>gcc -v</tt>" command to find out which version
+of GCC you are using.
+</p>
+
+<p><b>GCC versions prior to 3.0</b>: GCC 2.96.x and before had several
+problems in the STL that effectively prevent it from compiling LLVM.
+</p>
+
+<p><b>GCC 3.3.2</b>: This version of GCC suffered from a <a 
+href="http://gcc.gnu.org/PR13392">serious bug</a> which causes it to crash in
+the "<tt>convert_from_eh_region_ranges_1</tt>" GCC function.</p>
 
 </div>
 
+
+
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="starting"><b>Getting Started with LLVM</b></a>
 </div>
 <!-- *********************************************************************** -->
 
+<div class="doc_text">
+
+<p>The remainder of this guide is meant to get you up and running with
+LLVM and to give you some basic information about the LLVM environment.</p>
+
+<p>The later sections of this guide describe the <a
+href="#layout">general layout</a> of the the LLVM source tree, a <a
+href="#tutorial">simple example</a> using the LLVM tool chain, and <a
+href="#links">links</a> to find more information about LLVM or to get
+help via e-mail.</p>
+</div>
+
 <!-- ======================================================================= -->
 <div class="doc_subsection">
   <a name="terminology">Terminology and Notation</a>
@@ -399,23 +444,23 @@ file is a TAR archive that is compressed with the gzip program.
 
 <p> The files are as follows:
 <dl>
-    <dt>llvm-1.2.tar.gz
+    <dt>llvm-1.3.tar.gz
     <dd>This is the source code to the LLVM suite.
     <p>
 
-    <dt>cfrontend-1.2.sparc-sun-solaris2.8.tar.gz
+    <dt>cfrontend-1.3.sparc-sun-solaris2.8.tar.gz
     <dd>This is the binary release of the GCC front end for Solaris/Sparc.
     <p>
 
-    <dt>cfrontend-1.2.i686-redhat-linux-gnu.tar.gz
+    <dt>cfrontend-1.3.i686-redhat-linux-gnu.tar.gz
     <dd>This is the binary release of the GCC front end for Linux/x86.
     <p>
 
-    <dt>cfrontend-1.2.i386-unknown-freebsd5.1.tar.gz
+    <dt>cfrontend-1.3.i386-unknown-freebsd5.1.tar.gz
     <dd>This is the binary release of the GCC front end for FreeBSD/x86.
     <p>
 
-    <dt>cfrontend-1.2.powerpc-apple-darwin7.0.0.tar.gz
+    <dt>cfrontend-1.3.powerpc-apple-darwin7.0.0.tar.gz
     <dd>This is the binary release of the GCC front end for MacOS X/PPC.
 </dl>
 
@@ -449,6 +494,7 @@ revision), you can specify a label.  The following releases have the following
 label:</p>
 
 <ul>
+<li>Release 1.3: <b>RELEASE_13</b></li>
 <li>Release 1.2: <b>RELEASE_12</b></li>
 <li>Release 1.1: <b>RELEASE_11</b></li>
 <li>Release 1.0: <b>RELEASE_1</b></li>
@@ -535,12 +581,8 @@ LLVM.</p>
 <p>The following environment variables are used by the <tt>configure</tt>
 script to configure the build system:</p>
 
-<table border=1>
-  <tr>
-   <th>Variable</th>
-   <th>Purpose</th>
-  </tr>
-
+<table>
+  <tr><th>Variable</th><th>Purpose</th></tr>
   <tr>
     <td>CC</td>
     <td>Tells <tt>configure</tt> which C compiler to use.  By default,
@@ -548,7 +590,6 @@ script to configure the build system:</p>
         <tt>PATH</tt>.  Use this variable to override
         <tt>configure</tt>'s default behavior.</td>
   </tr>
-
   <tr>
     <td>CXX</td>
     <td>Tells <tt>configure</tt> which C++ compiler to use.  By default,
@@ -671,7 +712,11 @@ builds:</p>
 
 <p><tt>gmake</tt></p>
 
-<p>If you have multiple processors in your machine, you may wish to use some of
+<p>If the build fails, please <a href="#brokengcc">check here</a> to see if you
+are using a known broken version of GCC to compile LLVM with.</p>
+
+<p>
+If you have multiple processors in your machine, you may wish to use some of
 the parallel build options provided by GNU Make.  For example, you could use the
 command:</p>
 
@@ -689,18 +734,23 @@ source code:</p>
 
   <dt><tt>gmake distclean</tt>
   <dd>
-  Removes everything that <tt>gmake clean</tt> does, but also removes
-  files generated by <tt>configure</tt>.  It attempts to return the
-  source tree to the original state in which it was shipped.
+  Removes everything that <tt>gmake clean</tt> does, but also removes files
+  generated by <tt>configure</tt>.  It attempts to return the source tree to the
+  original state in which it was shipped.
   <p>
 
   <dt><tt>gmake install</tt>
   <dd>
-  Installs LLVM files into the proper location.  For the most part,
-  this does nothing, but it does install bytecode libraries into the
-  GCC front end's bytecode library directory.  If you need to update
-  your bytecode libraries, this is the target to use once you've built
-  them.
+  Installs LLVM libraries and tools in a heirarchy under $PREFIX, specified with
+  <tt>./configure --prefix=[dir]</tt>, defaults to <tt>/usr/local</tt>.
+  <p>
+  
+  <dt><tt>gmake install-bytecode</tt>
+  <dd>
+  Assuming you built LLVM into $OBJDIR, when this command is run in
+  $OBJDIR/runtime, it will install bytecode libraries into the GCC front end's
+  bytecode library directory.  If you need to update your bytecode libraries,
+  this is the target to use once you've built them.
   <p>
 </dl>
 
@@ -836,9 +886,7 @@ The following is a brief introduction to code layout:</p>
 </div>
 
 <!-- ======================================================================= -->
-<div class="doc_subsection">
-  <a name="cvsdir"><tt>CVS</tt> directories</a>
-</div>
+<div class="doc_subsection"><a name="cvsdir"><tt>CVS</tt> directories</a></div>
 
 <div class="doc_text">
 
@@ -848,39 +896,36 @@ the most part these can just be ignored.</p>
 </div>
 
 <!-- ======================================================================= -->
-<div class="doc_subsection">
-  <a name="include"><tt>llvm/include</tt></a>
-</div>
+<div class="doc_subsection"><a name="include"><tt>llvm/include</tt></a></div>
 
 <div class="doc_text">
 
 <p>This directory contains public header files exported from the LLVM
 library. The three main subdirectories of this directory are:</p>
 
-<ol>
-  <li><tt>llvm/include/llvm</tt> - This directory contains all of the LLVM
-      specific header files.  This directory also has subdirectories for
-      different portions of LLVM: <tt>Analysis</tt>, <tt>CodeGen</tt>,
-      <tt>Target</tt>, <tt>Transforms</tt>, etc...</li>
-
-  <li><tt>llvm/include/Support</tt> - This directory contains generic
-      support libraries that are independent of LLVM, but are used by LLVM.
-      For example, some C++ STL utilities and a Command Line option processing
-      library store their header files here.</li>
-
-  <li><tt>llvm/include/Config</tt> - This directory contains header files
-      configured by the <tt>configure</tt> script.  They wrap "standard" UNIX
-      and C header files.  Source code can include these header files which
-      automatically take care of the conditional #includes that the
-      <tt>configure</tt> script generates.</li>
-</ol>
-
+<dl>
+  <dt><tt><b>llvm/include/llvm</b></tt></dt>
+  <dd>This directory contains all of the LLVM specific header files.  This 
+  directory also has subdirectories for different portions of LLVM: 
+  <tt>Analysis</tt>, <tt>CodeGen</tt>, <tt>Target</tt>, <tt>Transforms</tt>, 
+  etc...</dd>
+
+  <dt><tt><b>llvm/include/llvm/Support</b></tt></dt>
+  <dd>This directory contains generic support libraries that are provided with 
+  LLVM but not necessarily specific to LLVM. For example, some C++ STL utilities 
+  and a Command Line option processing library store their header files here.
+  </dd>
+
+  <dt><tt><b>llvm/include/llvm/Config</b></tt></dt>
+  <dd>This directory contains header files configured by the <tt>configure</tt> 
+  script.  They wrap "standard" UNIX and C header files.  Source code can 
+  include these header files which automatically take care of the conditional 
+  #includes that the <tt>configure</tt> script generates.</dd>
+</dl>
 </div>
 
 <!-- ======================================================================= -->
-<div class="doc_subsection">
-  <a name="lib"><tt>llvm/lib</tt></a>
-</div>
+<div class="doc_subsection"><a name="lib"><tt>llvm/lib</tt></a></div>
 
 <div class="doc_text">
 
@@ -889,49 +934,60 @@ almost all code exists in libraries, making it very easy to share code among the
 different <a href="#tools">tools</a>.</p>
 
 <dl>
-  <dt><tt>llvm/lib/VMCore/</tt><dd> This directory holds the core LLVM
-  source files that implement core classes like Instruction and BasicBlock.
-
-  <dt><tt>llvm/lib/AsmParser/</tt><dd> This directory holds the source code
-  for the LLVM assembly language parser library.
+  <dt><tt><b>llvm/lib/VMCore/</b></tt></dt>
+  <dd> This directory holds the core LLVM source files that implement core 
+  classes like Instruction and BasicBlock.</dd>
 
-  <dt><tt>llvm/lib/ByteCode/</tt><dd> This directory holds code for reading
-  and write LLVM bytecode.
+  <dt><tt><b>llvm/lib/AsmParser/</b></tt></dt>
+  <dd>This directory holds the source code for the LLVM assembly language parser 
+  library.</dd>
 
-  <dt><tt>llvm/lib/CWriter/</tt><dd> This directory implements the LLVM to C
-  converter.
+  <dt><tt><b>llvm/lib/ByteCode/</b></tt></dt>
+  <dd>This directory holds code for reading and write LLVM bytecode.</dd>
 
-  <dt><tt>llvm/lib/Analysis/</tt><dd> This directory contains a variety of
+  <dt><tt><b>llvm/lib/Analysis/</b></tt><dd>This directory contains a variety of
   different program analyses, such as Dominator Information, Call Graphs,
   Induction Variables, Interval Identification, Natural Loop Identification,
-  etc...
-
-  <dt><tt>llvm/lib/Transforms/</tt><dd> This directory contains the source
-  code for the LLVM to LLVM program transformations, such as Aggressive Dead
-  Code Elimination, Sparse Conditional Constant Propagation, Inlining, Loop
-  Invariant Code Motion, Dead Global Elimination, and many others...
-
-  <dt><tt>llvm/lib/Target/</tt><dd> This directory contains files that
-  describe various target architectures for code generation.  For example,
-  the llvm/lib/Target/SparcV9 directory holds the Sparc machine
-  description.<br>
+  etc.</dd>
+
+  <dt><tt><b>llvm/lib/Transforms/</b></tt></dt>
+  <dd> This directory contains the source code for the LLVM to LLVM program 
+  transformations, such as Aggressive Dead Code Elimination, Sparse Conditional 
+  Constant Propagation, Inlining, Loop Invariant Code Motion, Dead Global 
+  Elimination, and many others.</dd>
+
+  <dt><tt><b>llvm/lib/Target/</b></tt></dt>
+  <dd> This directory contains files that describe various target architectures
+  for code generation.  For example, the <tt>llvm/lib/Target/SparcV9</tt> 
+  directory holds the Sparc machine description while
+  <tt>llvm/lib/Target/CBackend</tt> implements the LLVM-to-C converter</dd>
     
-  <dt><tt>llvm/lib/CodeGen/</tt><dd> This directory contains the major parts
-  of the code generator: Instruction Selector, Instruction Scheduling, and
-  Register Allocation.
-
-  <dt><tt>llvm/lib/Support/</tt><dd> This directory contains the source code
-  that corresponds to the header files located in
-  <tt>llvm/include/Support/</tt>.
+  <dt><tt><b>llvm/lib/CodeGen/</b></tt></dt>
+  <dd> This directory contains the major parts of the code generator: Instruction 
+  Selector, Instruction Scheduling, and Register Allocation.</dd>
+
+  <dt><tt><b>llvm/lib/Debugger/</b></tt></dt>
+  <dd> This directory contains the source level debugger library that makes 
+  it possible to instrument LLVM programs so that a debugger could identify 
+  source code locations at which the program is executing.</dd>
+
+  <dt><tt><b>llvm/lib/ExecutionEngine/</b></tt></dt>
+  <dd> This directory contains libraries for executing LLVM bytecode directly 
+  at runtime in both interpreted and JIT compiled fashions.</dd>
+
+  <dt><tt><b>llvm/lib/Support/</b></tt></dt>
+  <dd> This directory contains the source code that corresponds to the header 
+  files located in <tt>llvm/include/Support/</tt>.</dd>
+
+  <dt><tt><b>llvm/lib/System/</b></tt></dt>
+  <dd>This directory contains the operating system abstraction layer that
+  shields LLVM from platform-specific coding.</dd>
 </dl>
 
 </div>
 
 <!-- ======================================================================= -->
-<div class="doc_subsection">
-  <a name="runtime"><tt>llvm/runtime</tt></a>
-</div>
-
+<div class="doc_subsection"><a name="runtime"><tt>llvm/runtime</tt></a></div>
 <div class="doc_text">
 
 <p>This directory contains libraries which are compiled into LLVM bytecode and
@@ -945,22 +1001,27 @@ end to compile.</p>
 </div>
 
 <!-- ======================================================================= -->
-<div class="doc_subsection">
-  <a name="test"><tt>llvm/test</tt></a>
-</div>
-
+<div class="doc_subsection"><a name="test"><tt>llvm/test</tt></a></div>
 <div class="doc_text">
-
-<p>This directory contains regression tests and source code that is used to test
-the LLVM infrastructure.</p>
-
+  <p>This directory contains feature and regression tests and other basic sanity
+  checks on the LLVM infrastructure. These are intended to run quickly and cover
+  a lot of territory without being exhaustive.</p>
 </div>
 
 <!-- ======================================================================= -->
-<div class="doc_subsection">
-  <a name="tools"><tt>llvm/tools</tt></a>
+<div class="doc_subsection"><a name="llvmtest"><tt>llvm-test</tt></a></div>
+<div class="doc_text">
+  <p>This is not a directory in the normal llvm module, it is a separate CVS
+  module that must be checked out (usually to <tt>test/projects</tt>).  This
+  module contains a comprehensive correctness, performance and benchmarking test
+  suite for LLVM. It is a separate CVS module because not every LLVM user is
+  interested in downloading or building such a comprehensive test. For further
+  details on this test suite, please see the 
+  <a href="TestingGuide.html">Testing Guide</a> document.</p>
 </div>
 
+<!-- ======================================================================= -->
+<div class="doc_subsection"><a name="tools"><tt>llvm/tools</tt></a></div>
 <div class="doc_text">
 
 <p>The <b>tools</b> directory contains the executables built out of the
@@ -969,88 +1030,104 @@ always get help for a tool by typing <tt>tool_name --help</tt>.  The
 following is a brief introduction to the most important tools:</p>
 
 <dl>
-  <dt><tt><b>analyze</b></tt> <dd><tt>analyze</tt> is used to run a specific
+  <dt><tt><b>analyze</b></tt></dt>
+  <dd><tt>analyze</tt> is used to run a specific
   analysis on an input LLVM bytecode file and print out the results.  It is
   primarily useful for debugging analyses, or familiarizing yourself with
-  what an analysis does.<p>
+  what an analysis does.</dd>
 
-  <dt><tt><b>bugpoint</b></tt> <dd><tt>bugpoint</tt> is used to debug
+  <dt><tt><b>bugpoint</b></tt></dt>
+  <dd><tt>bugpoint</tt> is used to debug
   optimization passes or code generation backends by narrowing down the
   given test case to the minimum number of passes and/or instructions that
   still cause a problem, whether it is a crash or miscompilation. See <a
   href="HowToSubmitABug.html">HowToSubmitABug.html</a> for more information
-  on using <tt>bugpoint</tt>.<p>
-
-  <dt><tt><b>llvm-ar</b></tt> <dd>The archiver produces an archive containing
+  on using <tt>bugpoint</tt>.</dd>
+
+  <dt><tt><b>llvmc</b></tt></dt>
+  <dd>The LLVM Compiler Driver. This program can
+  be configured to utilize both LLVM and non-LLVM compilation tools to enable
+  pre-processing, translation, optimization, assembly, and linking of programs
+  all from one command line. <tt>llvmc</tt> also takes care of processing the
+  dependent libraries found in bytecode. This reduces the need to get the
+  traditional <tt>-l&lt;name&gt;</tt> options right on the command line.</dd>
+
+  <dt><tt><b>llvm-ar</b></tt></dt>
+  <dd>The archiver produces an archive containing
   the given LLVM bytecode files, optionally with an index for faster
-  lookup.<p>
+  lookup.</dd>
   
-  <dt><tt><b>llvm-as</b></tt> <dd>The assembler transforms the human readable
-  LLVM assembly to LLVM bytecode.<p>
+  <dt><tt><b>llvm-as</b></tt></dt>
+  <dd>The assembler transforms the human readable LLVM assembly to LLVM 
+  bytecode.</dd>
 
-  <dt><tt><b>llvm-dis</b></tt><dd>The disassembler transforms the LLVM
-  bytecode to human readable LLVM assembly.<p>
+  <dt><tt><b>llvm-dis</b></tt></dt>
+  <dd>The disassembler transforms the LLVM bytecode to human readable 
+  LLVM assembly.</dd>
 
-  <dt><tt><b>llvm-link</b></tt><dd> <tt>llvm-link</tt>, not surprisingly,
-  links multiple LLVM modules into a single program.<p>
+  <dt><tt><b>llvm-link</b></tt></dt>
+  <dd><tt>llvm-link</tt>, not surprisingly, links multiple LLVM modules into 
+  a single program.</dd>
   
-  <dt><tt><b>lli</b></tt><dd> <tt>lli</tt> is the LLVM interpreter, which
+  <dt><tt><b>lli</b></tt></dt>
+  <dd><tt>lli</tt> is the LLVM interpreter, which
   can directly execute LLVM bytecode (although very slowly...). In addition
   to a simple interpreter, <tt>lli</tt> also has a tracing mode (entered by
   specifying <tt>-trace</tt> on the command line). Finally, for
   architectures that support it (currently only x86 and Sparc), by default,
   <tt>lli</tt> will function as a Just-In-Time compiler (if the
   functionality was compiled in), and will execute the code <i>much</i>
-  faster than the interpreter.<p>
+  faster than the interpreter.</dd>
 
-  <dt><tt><b>llc</b></tt><dd> <tt>llc</tt> is the LLVM backend compiler, which
+  <dt><tt><b>llc</b></tt></dt>
+  <dd> <tt>llc</tt> is the LLVM backend compiler, which
   translates LLVM bytecode to a SPARC or x86 assembly file, or to C code (with
-  the -march=c option).<p>
+  the -march=c option).</dd>
 
-  <dt><tt><b>llvmgcc</b></tt><dd> <tt>llvmgcc</tt> is a GCC-based C frontend
+  <dt><tt><b>llvmgcc</b></tt></dt>
+  <dd><tt>llvmgcc</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>llvmgcc</tt> tool is currently not included in the LLVM CVS tree
-  because it is quite large and not very interesting.<p>
-
+  because it is quite large and not very interesting.
   <blockquote>
     <dl>
-    <dt><tt><b>gccas</b></tt> <dd>This tool is invoked by the
-    <tt>llvmgcc</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>llvmgcc -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.<p>
-
-    <dt><tt><b>gccld</b></tt> <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.</dl><p>
+      <dt><tt><b>gccas</b></tt></dt>
+      <dd>This tool is invoked by the <tt>llvmgcc</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>llvmgcc -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>
 
-  <dt><tt><b>opt</b></tt><dd> <tt>opt</tt> reads LLVM bytecode, applies a
+  <dt><tt><b>opt</b></tt></dt>
+  <dd><tt>opt</tt> reads LLVM bytecode, applies a
   series of LLVM to LLVM transformations (which are specified on the command
   line), and then outputs the resultant bytecode.  The '<tt>opt --help</tt>'
   command is a good way to get a list of the program transformations
-  available in LLVM.
-
+  available in LLVM.</dd>
 </dl>
-
 </div>
 
 <!-- ======================================================================= -->
-<div class="doc_subsection">
-  <a name="utils"><tt>llvm/utils</tt></a>
-</div>
-
+<div class="doc_subsection"><a name="utils"><tt>llvm/utils</tt></a></div>
 <div class="doc_text">
 
 <p>This directory contains utilities for working with LLVM source code, and some
@@ -1090,6 +1167,12 @@ are code generators for parts of LLVM infrastructure.</p>
   <tt>xemacs `utils/getsources.sh`</tt> from the top of your LLVM source
   tree.<p>
   
+  <dt><tt><b>llvmgrep</b></tt></dt>
+  <dd>This little tool performs an "egrep -H -n" on each source file in LLVM and
+  passes to it a regular expression provided on <tt>llvmgrep</tt>'s command
+  line. This is a very efficient way of searching the source base for a
+  particular regular expression.</dd>
+
   <dt><tt><b>makellvm</b></tt> <dd>The <tt>makellvm</tt> script compiles all
   files in the current directory and then compiles and links the tool that
   is the first argument. For example, assuming you are in the directory
@@ -1230,9 +1313,9 @@ out:</p>
   src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>
 
   <a href="mailto:sabre@nondot.org">Chris Lattner</a><br>
+  <a href="http://llvm.x10sys.com/rspencer/">Reid Spencer</a><br>
   <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a><br>
   Last modified: $Date$
 </address>
-
 </body>
 </html>