Make note of the -simplify-libcalls pass.
[oota-llvm.git] / docs / ReleaseNotes.html
index 65ea51c8c574a759ce5a760b44845774f1c6d0b2..7c9fb637b36305088bb01f71170bc5b5e119fe03 100644 (file)
@@ -2,12 +2,13 @@
                       "http://www.w3.org/TR/html4/strict.dtd">
 <html>
 <head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   <link rel="stylesheet" href="llvm.css" type="text/css">
-  <title>LLVM 1.3 Release Notes</title>
+  <title>LLVM 1.5 Release Notes</title>
 </head>
 <body>
 
-<div class="doc_title">LLVM 1.3 Release Notes</div>
+<div class="doc_title">LLVM 1.5 Release Notes</div>
  
 <ol>
   <li><a href="#intro">Introduction</a></li>
   <li><a href="GettingStarted.html">Installation Instructions</a></li>
   <li><a href="#portability">Portability and Supported Platforms</a></li>
   <li><a href="#knownproblems">Known Problems</a>
-  <ul>
-    <li><a href="#experimental">Experimental features included in this
-                                release</a>
-    <li><a href="#core">Known problems with the LLVM Core</a>
-    <li><a href="#c-fe">Known problems with the C Front-end</a>
-    <li><a href="#c++-fe">Known problems with the C++ Front-end</a>
-    <li><a href="#x86-be">Known problems with the X86 Back-end</a>
-    <li><a href="#sparcv9-be">Known problems with the SparcV9 Back-end</a>
-    <li><a href="#c-be">Known problems with the C back-end</a>
-  </ul></li>
   <li><a href="#additionalinfo">Additional Information</a></li>
 </ol>
 
 <div class="doc_author">
-  <p>Written by the <a href="http://llvm.cs.uiuc.edu">LLVM team</a><p>
+  <p>Written by the <a href="http://llvm.cs.uiuc.edu">LLVM Team</a><p>
 </div>
 
 <!-- *********************************************************************** -->
 <div class="doc_text">
 
 <p>This document contains the release notes for the LLVM compiler
-infrastructure, release 1.3.  Here we describe the status of LLVM, including any
-known problems and bug fixes from the previous release.  The most up-to-date
-version of this document can be found on the <a
-href="http://llvm.cs.uiuc.edu/releases/1.3/">LLVM 1.3 web site</a>.  If you are
+infrastructure, release 1.5.  Here we describe the status of LLVM, including any
+known problems and major improvements from the previous release.  The most
+up-to-date version of this document can be found on the <a
+href="http://llvm.cs.uiuc.edu/releases/1.5/">LLVM 1.5 web site</a>.  If you are
 not reading this on the LLVM web pages, you should probably go there because
 this document may be updated after the release.</p>
 
-<p>For more information about LLVM, including information about potentially more
-current releases, please check out the <a href="http://llvm.cs.uiuc.edu">main
+<p>For more information about LLVM, including information about the latest
+release, please check out the <a href="http://llvm.cs.uiuc.edu">main LLVM
 web site</a>.  If you have questions or comments, the <a
 href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM developer's mailing
 list</a> is a good place to send them.</p>
 
-<p>Note that if you are reading this file from CVS, this document applies
-to the <i>next</i> release, not the current one.  To see the release notes for
-the current or previous releases, see the <a
+<p>Note that if you are reading this file from CVS or the main LLVM web page,
+this document applies to the <i>next</i> release, not the current one.  To see
+the release notes for the current or previous releases, see the <a
 href="http://llvm.cs.uiuc.edu/releases/">releases page</a>.</p>
 
 </div>
@@ -69,270 +60,216 @@ href="http://llvm.cs.uiuc.edu/releases/">releases page</a>.</p>
 
 <div class="doc_text">
 
-<p>This is the fourth public release of the LLVM compiler infrastructure.  This
-release primarily improves the <a href="#codequality">performance of the
-code</a> produced by all aspects of the LLVM compiler, adds many <a
-href="#newfeatures">new features</a>, <a href="#bugfix">fixes a few
-bugs</a>, and speeds up the compiler.</p>
+<p>This is the sixth public release of the LLVM Compiler Infrastructure.</p>
 
-<p> At this time, LLVM is known to correctly compile and run all C &amp; C++
-SPEC CPU95 &amp; 2000 benchmarks, the Olden benchmarks, and the Ptrdist 
-benchmarks, and <b>many</b> other programs.  LLVM now also works
-with a broad variety of C++ programs.</p>
+<p> At this time, LLVM is known to correctly compile a wide range of C and C++
+programs, including the SPEC CPU95 &amp; 2000 suite.  It includes bug fixes for
+those problems found since the 1.4 release and a large number of new features
+and enhancements, described below.</p>
 
 </div>
 
 <!--=========================================================================-->
-<div class="doc_subsubsection">
-<a name="newfeatures">This release implements the following new features:</a>
-</div>
-
-<div class="doc_text">
-
-<ol>
-<li>The LLVM <a href="LangRef.html#i_select"><tt>select</tt></a> instruction is
-now fully implemented and supported by all transformations, native code
-generators, and the interpreter.</li>
-<li>Bugpoint can now narrow down code-generation bugs to a loop nest, where
-before it could only narrow them down to a function being miscompiled.</li>
-<li><a href="http://llvm.cs.uiuc.edu/PR40">Bugpoint can now debug arbitrary
-modes of llc</a> and lli, by passing them command line flags (e.g.
-<tt>-regalloc=linearscan</tt>).</li>
-<li>The Control Flow Graph in the native code generators is no longer
-constrained to be the same as the CFG for the LLVM input code.</li>
-<li>The LLVM induction variable analysis routines have been rewritten.</li>
-<li>LLVM now has new loop unrolling and loop unswitching passes.</li>
-<li>The induction variable substitution pass performs linear function test
-replacement and exit value replacement optimizations.</li>
-<li>LLVM now has first-class support for <a
-href="GarbageCollection.html">Accurate Garbage Collection</a>, enabling the use
-of aggressive copying and generational collectors.</li>
-<li>LLVM now includes a simple implementation of <a 
-href="AliasAnalysis.html#anders-aa">Andersen's interprocedural alias 
-analysis</a> algorithm.</li>
-<li>Bugpoint can <a href="http://llvm.cs.uiuc.edu/PR327">extract individual
-basic blocks</a> to track down reduce miscompilation testcases.</li>
-<li>LLVM and the C front-end now work under Win32 using the
-<a href="http://www.cygwin.com">Cygwin</a> runtime libraries.  
-This includes the JIT compiler.</li>
-<li>The LLVM code generator is now being <a
-href="CodeGenerator.html">documented</a>.</li>
-<li>LLVM includes a new tool, <a 
-href="CommandGuide/html/llvm-bcanalyzer.html">llvm-bcanalyzer</a>,  This tool 
-can compute various statistics and dump information about LLVM bytecode
-encoding.</li>
-<li>The <a href="BytecodeFormat.html">LLVM bytecode file format</a> is now 
-documented.</li>
-<li>LLVM now provides an <a
-href="LangRef.html#i_isunordered">llvm.isunordered</a> intrinsic for efficient
-implementation of unordered floating point comparisons.</li>
-<li>The llvmgcc front-end now supports the GCC builtins for ISO C99 floating
-point comparison macros (e.g., <tt>__builtin_islessequal</tt>).</li>
-<li>We now generate <a href="CommandGuide/">HTML documentation and man pages</a>
-for the tools from a single source (perl-style POD files).</li>
-<li>The LLVM code generator can now dynamically load targets from shared 
-objects.</li>
-<li>LLVM now includes a "skeleton" target, which makes it easier to get 
-started porting LLVM to new architectures.</li>
-<li>The linear scan register allocator is now enabled by default in the 
-target-independent code generator.</li>
-<li>LLVM now includes a dead store elimination pass.</li>
-<li>Bugpoint can now debug miscompilations that lead to the program going 
-into an infinite loop.</li>
-<li>LLVM now provides interfaces to support ML-style pattern matching on the 
-LLVM IR.</li>
-<li>LLVM now includes a <a 
-href="AliasAnalysis.html#globalsmodref">context-sensitive mod/ref analysis</a> 
-for global variables, which is now enabled by default in gccld.</li>
-<li>LLVM can now autogenerate assembly printers for code generators from the 
-tablegen description of the target (before they were hand coded).</li>
-<li>All LLVM tools will now respond to the 
-<a href="http://llvm.cs.uiuc.edu/PR413"><tt>--version</tt> option</a> which 
-will tell you the version of LLVM on which the tool is based.</li>
-<li>An experimental PowerPC backend has been added, capable of compiling several
-SPEC benchmarks.</li>
-</ol>
-
+<div class="doc_subsection">
+<a name="newfeatures">New Features in LLVM 1.5</a>
 </div>
 
-
-<!--=========================================================================-->
-<div class="doc_subsubsection">
-In this release, the following missing features were implemented:
-</div>
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection">New Native Code Generators</div>
 
 <div class="doc_text">
-
-<ol>
-<li><a href="http://llvm.cs.uiuc.edu/PR82">LLVM cannot handle structures with
-more than 256 elements</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR38">[bugpoint] External functions used in
-non-instruction entities, such as global constant initializer</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR178">Stacker does not handle targets 
-with 64-bit pointers.</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR290">Bugpoint doesn't support
-uses of external fns by immediate constant exprs</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR407">Can't add function passes that 
-depend on immutable passes to the FunctionPassManager</a>.</li>
-<li><a href="http://llvm.cs.uiuc.edu/PR308">Archive file reader doesn't
-understand abbreviated names in headers</a></li>
-</ol>
-
+<p>
+This release includes new native code generators for <a
+href="#alpha-be">Alpha</a>, <a href="#ia64-be">IA-64</a>, and SPARC-V8 (32-bit
+SPARC).  These code generators are still beta quality, but are progressing
+rapidly.
+</p>
 </div>
 
-<!--=========================================================================-->
-<div class="doc_subsubsection">
-<a name="qualityofimp">In this release, the following Quality of Implementation
-issues were fixed:</a>
-</div>
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection">New Instruction Selector Framework</div>
 
 <div class="doc_text">
+<p>This release includes a <a href="CodeGenerator.html#instselect">new framework
+for building instruction selectors</a>, which has long been the hardest part of
+building a new LLVM target.  This framework handles a lot of the mundane (but
+easy to get wrong) details of writing the instruction selector, such as
+generating efficient code for <a
+href="LangRef.html#i_getelementptr">getelementptr</a> instructions, promoting
+small integer types to larger types (e.g.  for RISC targets with one size of
+integer registers), expanding 64-bit integer operations for 32-bit hosts, etc.
+Currently, the X86, PowerPC, Alpha, and IA-64 backends use this framework.  The
+SPARC backends will be migrated when time permits.
+</p>
+</div>
+
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection">New Support For Custom Calling Convetions</div>
 
-<ol>
-<li><a href="http://llvm.cs.uiuc.edu/PR305">LLVM tools will happily spew
-bytecode onto your terminal</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR329">[llvmgcc] type names are not emitted
-for structure typedefs</a></li>
-<li>All documentation is now conformant to the HTML 4.01 (Strict) level.</li>
-<li>The spurious "WARNING: Found global types that are not compatible" warning
-produced when linking C++ programs has been fixed.</li>
-<li><a href="http://llvm.cs.uiuc.edu/PR391">lli Doesn't Handle Exceptions From 
-Bytecode Reader</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR392">Global Vars Have (Somewhat) Limited 
-  Type Range</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR341">operator&lt;&lt; on a Value* now
-prints the address of the object instead of its contents.</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR402">Bytecode Enhancements
-Needed</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR404">[loopsimplify] Loop simplify is
-really slow on 252.eon</a></li>
-<li><a href="Http://llvm.cs.uiuc.edu/PR122">[code-cleanup] SymbolTable class
-cleanup, Type should not derive from Value, eliminate ConstantPointerRef
-class</a>.</li>
-<li>The memory footprint of the LLVM IR has been reduced substantially.</li>
-<li>The LLVM linker and many core classes have been sped up substantially.</li>
-</ol>
-
-</div>
+<div class="doc_text">
+<p>LLVM 1.5 adds supports for <a href="LangRef.html#callingconv">custom and
+target-specific calling conventions</a>.  Traditionally, the LLVM code
+generators match the native C calling conventions for a target.  This is
+important for compatibility, but is not very flexible.  This release allows
+custom calling conventions to be established for functions, and defines three
+target-independent conventions (C call, fast call, and cold call) which may be
+supported by code generators.  When possible, the LLVM optimizer promotes C
+functions to use the "fastcc" convention, allowing the use of more efficient
+calling sequences (e.g., parameters are passed in registers in the X86 target).
+</p>
+
+<p>Targets may now also define target-specific calling conventions, allowing
+LLVM to fully support calling convention altering options (e.g. GCC's
+<tt>-mregparm</tt> flag) and well-defined target conventions (e.g. stdcall and
+fastcall on X86).</p>
+</div>
+
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection">New Support for "Proper Tail Calls"</div>
 
-<!--=========================================================================-->
-<div class="doc_subsubsection">
-In this release, the following build problems were fixed:
-</div>
+<div class="doc_text">
+<p>The release now includes support for <a
+href="http://doi.acm.org/10.1145/277650.277719">proper tail calls</a>, as
+required to implement languages like Scheme.  Tail calls make use of two
+features: custom calling conventions (described above), which allow the code
+generator to emit code for the caller to deallocate its own stack when it
+returns.  The second feature is a flag on the <a href="LangRef.html#i_call">call
+instruction</a>, which indicates that the callee does not access the callers
+stack frame (indicating that it is acceptable to deallocate the caller stack
+before invoking the callee).  LLVM proper tail calls run on the system stack (as
+do normal calls), supports indirect tail calls, tail calls with arbitrary
+numbers of arguments, tail calls where the callee requires more argument space
+than the caller, etc.  The only case not supported are varargs calls, but that
+could be added if desired.
+</p>
+
+<p>In order for a front-end to get guaranteed tail call, it must mark functions
+as "fastcc", mark calls with the 'tail' marker, and follow the call with a
+return of the called value (or void).  The optimizer and code generator attempt
+to handle more general cases, but the simple case will always work if the code
+generator supports tail calls.  Here is a simple example:</p>
+
+<p><pre>
+fastcc int %bar(int %X, int(double, int)* %FP) {        ;<i> fastcc</i>
+     %Y = tail call fastcc int %FP(double 0.0, int %X)  ;<i> tail, fastcc</i>
+     ret int %Y
+}
+</pre></p>
+
+<p>In LLVM 1.5, the X86 code generator is the only target that has been enhanced
+to support proper tail calls (other targets will be enhanced in future).
+Further, because this support was added very close to the release, it is
+disabled by default.  Pass <tt>-enable-x86-fastcc</tt> to llc to enable it.  X86
+support will be enabled by default in the next LLVM release.</p>
+</div>
+
+<!--_________________________________________________________________________-->
+<div class="doc_subsubsection">Other New Features</div>
 
 <div class="doc_text">
 <ol>
-<li><a href="http://llvm.cs.uiuc.edu/PR301">Minor configure bugs with
--disable/enable-povray and -disable-spec</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR289">shell scripts output by gccld don't
-work if you change PATH</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR364">[llvmgcc] llvmgcc does not compile 
-with gcc 3.4</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR373">[llvmgcc] obstack.h relies on 
-obsolete casts-as-lvalues GCC extension</a></li>
+  <li>LLVM now includes an <a href="http://llvm.cs.uiuc.edu/PR415">
+      Interprocedural Sparse Conditional Constant Propagation</a> pass, named
+     -ipsccp, which is run by default at link-time.</li>
+  <li>LLVM 1.5 is now about 15% faster than LLVM 1.4 and its core data 
+      structures use about 30% less memory.</li>
+  <li>Support for Microsoft Visual Studio is improved, and <a 
+      href="GettingStartedVS.html">now documented</a>.</li>
+  <li><a href="GettingStarted.html#config">Configuring LLVM to build a subset
+      of the available targets</a> is now implemented, via the
+      <tt>--enable-targets=</tt> option.</li>
+   <li>LLVM can now create native shared libraries with '<tt>llvm-gcc ...
+       -shared -Wl,-native</tt>' (or with <tt>-Wl,-native-cbe</tt>).</li>
+   <li>LLVM now supports a new "<a href="LangRef.html#i_prefetch">llvm.prefetch
+       </a>" intrinsic, and llvm-gcc now supports __builtin_prefetch.
+  <li>LLVM now supports intrinsics for <a href="LangRef.html#int_count">bit
+      counting</a> and llvm-gcc now implements the GCC
+      <tt>__builtin_popcount</tt>, <tt>__builtin_ctz</tt>, and
+      <tt>__builtin_clz</tt> builtins.</li>
+  <li>LLVM now builds on HP-UX with the HP aCC Compiler.</li>
+  <li>The LLVM X86 backend can now emit Cygwin-compatible .s files.</li>
+  <li>LLVM now includes workarounds in the code generator generator which
+      reduces the likelyhood of <a href="http://llvm.cs.uiuc.edu/PR448">GCC
+      hitting swap during optimized builds</a>.</li>
 </ol>
 </div>
 
 <!--=========================================================================-->
-<div class="doc_subsubsection">
-<a name="codequality">This release includes the following Code Quality
-improvements:</a>
+<div class="doc_subsection">
+<a name="codequality">Code Quality Improvements in LLVM 1.5</a>
 </div>
 
 <div class="doc_text">
 <ol>
-<li>Fixed: <a href="http://llvm.cs.uiuc.edu/PR309">[vmcore] Code quality problem
-due to long operand of getelementptr</a></li>
-
-<li>The X86 backend now generates substantially better code for 64-bit integer
-and floating point operations.</li>
-
-<li>The -inline pass no longer inlines mutually recursive functions until it
-hits the inlining threshold.</li>
-
-<li>The -inline pass no longer misses obvious inlining opportunities just
-because the callee eventually calls into an external function.</li>
-
-<li>The -simplifycfg pass can now "if convert" simple statements into the 
-<tt>select</tt> instruction.</li>
-
-<li>The -loopsimplify pass can now break <a
-href="http://llvm.cs.uiuc.edu/PR35">natural loops with multiple backedges</a>
-into multiple nested loops.  This enables a variety of subsequent
-optimizations.</li>
-
-<li>The -adce pass can now eliminate calls to functions that do not not write to
-memory.</li>
+<li>The -globalopt pass now promotes non-address-taken static globals that are
+only accessed in main to SSA registers.</li>
 
-<li>The link-time optimizer now runs the -prune-eh pass (to remove unused
-exception handlers).</li>
+<li>Loops with trip counts based on array pointer comparisons (e.g. "<tt>for (i
+= 0; &amp;A[i] != &amp;A[100]; ++i) ...</tt>") are optimized better than before,
+which primarily helps iterator-intensive C++ codes.</li>
 
-<li>The link-time optimizer now runs dead store elimination and uses a simple
-interprocedural alias analysis.</li>
+<li>The code generator now uses information about takes advantage of commutative
+two-address instructions when performing register allocation.</li>
 
-<li>The -simplifycfg pass can now eliminate simple correlated branches (such as
-"<tt>if (A &lt; B &amp;&amp; A &lt; B)</tt>", and can turn short-circuiting
-operators into the strict versions when useful (such as "<tt>if (A &lt; B || A
-&gt; C)</tt>" into "<tt>if (A &lt; B | A &gt; C)</tt>"</li>
+<li>A new pass has been added to gccas to simplify well-known library calls. The
+pass will short circuit calls to many of the string, memory, and printf type 
+functions or replace the calls with simpler/faster calls, where possible given
+information known statically about the arguments to the call. To use the
+pass, specify <tt>-simplify-libcalls</tt> to the <tt>opt</tt> tool.</li>
 
-<li>LLVM now has infrastructure for (simple and sparse conditional) constant
-propagation of function calls.  It currently supports a few math library
-functions like sqrt/sin/cos/etc.</li>
-
-<li>The C backend now emits <a href="http://llvm.cs.uiuc.edu/PR334">syntactic
-loops</a> in the code to help C compilers whose optimizers do not recognize 
-loops formed from gotos (like GCC).</li>
-
-<li>The SparcV9 backend no longers <a 
-href="http://llvm.cs.uiuc.edu/PR368">spills the null constant to the constant 
-pool</a>.</li>
+   
 </ol>
 </div>
 
 <!--=========================================================================-->
-<div class="doc_subsubsection">
-<a name="bugfix">In this release, the following bugs in the previous release
-were fixed:</a>
+<div class="doc_subsection">
+<a name="bugfix">Significant Bugs Fixed in LLVM 1.5</a>
 </div>
 
 <div class="doc_text">
 
+
 <p>Bugs fixed in the LLVM Core:</p>
+<ol>
+   <li><a href="http://llvm.cs.uiuc.edu/PR491">[dse] DSE deletes stores that 
+       are partially overwritten by smaller stores</a></li>
+   <li><a href="http://llvm.cs.uiuc.edu/PR548">[instcombine] miscompilation of 
+       setcc or setcc in one case</a></li>
+   <li>Transition code for LLVM 1.0 style varargs was removed from the .ll file
+   parser.  LLVM 1.0 bytecode files are still supported. </li>
+</ol>
 
+<p>Code Generator Bugs:</p>
 <ol>
-<li><a href="http://llvm.cs.uiuc.edu/PR306">[loopsimplify] Loop simplify
-incorrectly updates dominator information</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR310">[tailduplicate] DemoteRegToStack
-breaks SSA form</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR313">[X86] JIT miscompiles unsigned short
-to floating point cast</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR330">[vmcore] Linker causes erroneous
-asssertion</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR332">[adce] Crash handling unreachable
-code that unwinds</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR333">[sparcv9] LLC can't emit 2 functions
-of the same name, both having constant pools</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR337">[livevar] Live variables missed
-physical register use of aliased definition</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR369">[X86] stackifier crash on floating 
-point setcc X, X</a></li>
+   <li><a href="http://llvm.cs.uiuc.edu/PR490">[cbackend] Logical constant 
+       expressions (and/or/xor) not implemented</a></li>
+   <li><a href="http://llvm.cs.uiuc.edu/PR511">[cbackend] C backend does not 
+       respect 'volatile'</a></li>
 </ol>
 
 <p>Bugs in the C/C++ front-end:</p>
-
 <ol>
-<li><a href="http://llvm.cs.uiuc.edu/PR298">[llvmgcc] Variable length array
-indexing miscompiled</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR326">[llvmgcc] Crash on use of undeclared
-enum type</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR355">[llvmgcc] Errors handling function 
-prototypes that take opaque structs by-value</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR374">[llvmgcc] Crash compiling variable 
-length array of structures</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR377">[llvmgcc] miscompilation of staticly
-initialized unsigned bitfields</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR396">[llvm-gcc] Crash casting function to void</a></li>
+   <li><a href="http://llvm.cs.uiuc.edu/PR487">[llvmgcc] llvm-gcc incorrectly 
+       rejects some constant initializers involving the addresses of array 
+       elements</a></li>
+   <li><a href="http://llvm.cs.uiuc.edu/PR501">[llvm-g++] Crash compiling 
+       anonymous union</a></li>
+   <li><a href="http://llvm.cs.uiuc.edu/PR509">[llvm-g++] Do not use dynamic 
+       initialization where static init will do</a></li>
+   <li><a href="http://llvm.cs.uiuc.edu/PR510">[llvmgcc] Field offset 
+       miscalculated for some structure fields following bit fields</a></li>
+   <li><a href="http://llvm.cs.uiuc.edu/PR513">[llvm-g++] Temporary lifetimes 
+       incorrect for short circuit logical operations</a></li>
+   <li><a href="http://llvm.cs.uiuc.edu/PR517">[llvm-gcc] Crash compiling 
+       bitfield &lt;-&gt; aggregate assignment</a></li>
+   <li><a href="http://llvm.cs.uiuc.edu/PR520">[llvm-g++] Error compiling 
+       virtual function thunk with an unnamed argument</a></li>
+   <li><a href="http://llvm.cs.uiuc.edu/PR522">[llvm-gcc] Crash on certain 
+       C99 complex number routines</a></li>
+   <li><a href="http://llvm.cs.uiuc.edu/PR529">[llvm-g++] Crash using placement
+       new on an array type</a></li>
 </ol>
+
 </div>
 
 <!-- *********************************************************************** -->
@@ -343,14 +280,17 @@ initialized unsigned bitfields</a></li>
 
 <div class="doc_text">
 
-<p>LLVM is known to work in the following platforms:</p>
+<p>LLVM is known to work on the following platforms:</p>
 
 <ul>
 <li>Intel and AMD machines running Red Hat Linux and FreeBSD (and probably 
     other unix-like systems).</li>
 <li>Sun UltraSPARC workstations running Solaris 8.</li>
-<li>PowerPC-based Mac OS X boxes, running 10.2 and above.</li>
-<li>Intel and AMD machines running on Win32 with the Cygwin libraries.</li>
+<li>Intel and AMD machines running on Win32 with the Cygwin libraries (limited
+    support is available for native builds with Visual C++).</li>
+<li>PowerPC-based Mac OS X systems, running 10.2 and above.</li>
+<li>Alpha-based machines running Debian GNU/Linux.</li>
+<li>Itanium-based machines running Linux and HP-UX.</li>
 </ul>
 
 <p>The core LLVM infrastructure uses
@@ -359,13 +299,6 @@ to the machine and operating system on which it is built.  However, minor
 porting may be required to get LLVM to work on new platforms.  We welcome your
 portability patches and reports of successful builds or error messages.</p>
 
-<p>Note that the LLVM build system does not currently support directories with 
-spaces on them when running on Win32/cygwin.  We strongly recommend running
-LLVM and the C frontend out of a top-level directory without spaces (e.g., 
-<tt>/cygdrive/c/llvm</tt>).  Also, make sure to install <b>all</b> of the 
-cygwin packages.  By default, many important tools are not installed that 
-are needed by the LLVM build process or test suite (e.g., /bin/time).</p>
-
 </div>
 
 <!-- *********************************************************************** -->
@@ -398,15 +331,13 @@ useful to some people.  In particular, if you would like to work on one of these
 components, please contact us on the llvmdev list.</p>
 
 <ul>
-<li>The PowerPC backend is incomplete and is known to miscompile several SPEC
-benchmarks. The file <tt>llvm/lib/Target/PowerPC/README.txt</tt> has
-details.</li>
-<li>The following passes are incomplete or buggy: <tt>-pgmdep, -memdep,
-    -ipmodref, -cee</tt></li>
-<li>The <tt>-pre</tt> pass is incomplete (there are cases it doesn't handle that
-    it should) and not thoroughly tested.</li>
-<li>The <tt>llvm-ar</tt> tool is incomplete and probably buggy.</li>
-<li>The <tt>llvm-db</tt> tool is in a very early stage of development.</li>
+<li>The following passes are incomplete or buggy, and may be removed in future
+    releases: <tt>-cee, -branch-combine, -instloops, -paths, -pre</tt></li>
+<li>The <tt>llvm-db</tt> tool is in a very early stage of development, but can
+    be used to step through programs and inspect the stack.</li>
+<li>The "iterative scan" register allocator (enabled with 
+    <tt>-regalloc=iterativescan</tt>) is not stable.</li>
+<li>The SparcV8, Alpha, and IA64 code generators are experimental.</li>
 </ul>
 
 </div>
@@ -419,26 +350,16 @@ details.</li>
 <div class="doc_text">
 
 <ul>
-
-<li>In the JIT, <tt>dlsym</tt> on a symbol compiled by the JIT will not
-work.</li>
-
-<li>The JIT does not use mutexes to protect its internal data structures.  As
-such, execution of a threaded program could cause these data structures to be
-corrupted.</li>
-
-<li>It is not possible to <tt>dlopen</tt> an LLVM bytecode file in the JIT.</li>
-
-<li>Linking in static archive files (.a files) is very slow (there is no symbol
-table in the archive).</li>
-
-<li>The gccld program <a href="http://llvm.cs.uiuc.edu/PR139">does not link
-objects/archives in the order specified on the command line.</a></li>
-
-<li><a href="http://llvm.cs.uiuc.edu/PR240">The lower-invoke pass does not mark
-values live across a setjmp as volatile</a>.  This missing feature only affects
-targets whose setjmp/longjmp libraries do not save and restore the entire
-register file.</li>
+  <li>In the JIT, <tt>dlsym()</tt> on a symbol compiled by the JIT will not
+  work.</li>
+  <li>The JIT does not use mutexes to protect its internal data structures. As
+  such, execution of a threaded program could cause these data structures to be
+  corrupted.
+  </li>
+  <li><a href="http://llvm.cs.uiuc.edu/PR240">The lower-invoke pass does not 
+    mark values live across a setjmp as volatile</a>. This missing feature 
+  only affects targets whose setjmp/longjmp libraries do not save and restore 
+  the entire register file.</li>
 </ul>
 </div>
 
@@ -462,11 +383,7 @@ register file.</li>
 </pre></li>
 
 <li>Initialization of global union variables can only be done <a
-href="http://llvm.cs.uiuc.edu/bugs/show_bug.cgi?id=162">with the largest union
-member</a>.</li>
-
-<li><a href="http://llvm.cs.uiuc.edu/PR244">[llvm-gcc] Error when an implicitly
-external function is re-declared as static</a></li>
+href="http://llvm.cs.uiuc.edu/PR162">with the largest union member</a>.</li>
 
 </ul>
 </div>
@@ -508,7 +425,7 @@ work:
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Explicit-Reg-Vars.html#Explicit%20Reg%20Vars">Explicit Reg Vars</a>: Defining variables residing in specified registers.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html#Vector%20Extensions">Vector Extensions</a>: Using vector instructions through built-in functions.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Target-Builtins.html#Target%20Builtins">Target Builtins</a>:   Built-in functions specific to particular targets.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Thread-Local.html#Thread-Local">Thread-Local</a>: Per-thread variables.</li>
+  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Thread_002dLocal.html">Thread-Local</a>: Per-thread variables.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pragmas.html#Pragmas">Pragmas</a>: Pragmas accepted by GCC.</li>
   </ol>
 
@@ -529,10 +446,11 @@ work:
       return.<br>
 
       <b>Supported:</b> <tt>format</tt>, <tt>format_arg</tt>, <tt>non_null</tt>,
-      <tt>constructor</tt>, <tt>destructor</tt>, <tt>unused</tt>,
+      <tt>noreturn</tt>, <tt>constructor</tt>, <tt>destructor</tt>,
+      <tt>unused</tt>,
       <tt>deprecated</tt>, <tt>warn_unused_result</tt>, <tt>weak</tt><br>
 
-      <b>Ignored:</b> <tt>noreturn</tt>, <tt>noinline</tt>,
+      <b>Ignored:</b> <tt>noinline</tt>,
       <tt>always_inline</tt>, <tt>pure</tt>, <tt>const</tt>, <tt>nothrow</tt>,
       <tt>malloc</tt>, <tt>no_instrument_function</tt>, <tt>cdecl</tt><br>
 
@@ -565,7 +483,9 @@ work:
          <tt>__builtin_types_compatible_p</tt>, <tt>__builtin_choose_expr</tt>,
          <tt>__builtin_constant_p</tt>, and <tt>__builtin_expect</tt>
          (currently ignored).  We also support builtins for ISO C99 floating
-         point comparison macros (e.g., <tt>__builtin_islessequal</tt>).</li>
+         point comparison macros (e.g., <tt>__builtin_islessequal</tt>), 
+         <tt>__builtin_prefetch</tt>, <tt>__builtin_popcount[ll]</tt>,
+         <tt>__builtin_clz[ll]</tt>, and <tt>__builtin_ctz[ll]</tt>.</li>
   </ol>
 
   <p>The following extensions <b>are</b> known to be supported:</p>
@@ -593,7 +513,7 @@ or arrays as values.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html#Case%20Ranges">Case Ranges</a>: `case 1 ... 9' and such.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Mixed-Declarations.html#Mixed%20Declarations">Mixed Declarations</a>: Mixing declarations and code.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Prototypes.html#Function%20Prototypes">Function Prototypes</a>: Prototype declarations and old-style definitions.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/C---Comments.html#C++%20Comments">C++ Comments</a>: C++ comments are recognized.</li>
+  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Comments.html#C_002b_002b-Comments">C++ Comments</a>: C++ comments are recognized.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar%20Signs">Dollar Signs</a>: Dollar sign is allowed in identifiers.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Character-Escapes.html#Character%20Escapes">Character Escapes</a>: <code>\e</code> stands for the character &lt;ESC&gt;.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Alignment.html#Alignment">Alignment</a>: Inquiring about the alignment of a type or variable.</li>
@@ -620,10 +540,9 @@ lists, please let us know (also including whether or not they work).</p>
 
 <div class="doc_text">
 
-<p>For this release, the C++ front-end is considered to be fully functional but
-has not been tested as thoroughly as the C front-end.  It has been tested and 
-works for a number of non-trivial programs, but there may be lurking bugs.
-Please report any bugs or problems.</p>
+<p>For this release, the C++ front-end is considered to be fully
+tested and works for a number of non-trivial programs, including LLVM
+itself.</p>
 
 </div>
 
@@ -689,7 +608,7 @@ href="http://gcc.gnu.org/gcc-3.4/changes.html">GCC 3.4 release notes</a>.</li>
 <div class="doc_text">
 
 <ul>
-  <li>none yet</li>
+  <li>None yet</li>
 </ul>
 
 </div>
@@ -708,6 +627,19 @@ several programs in the LLVM test suite</a></li>
 
 </div>
 
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="ppc-be">Known problems with the PowerPC back-end</a>
+</div>
+
+<div class="doc_text">
+
+<ul>
+<li>None yet</li>
+</ul>
+
+</div>
+
 <!-- ======================================================================= -->
 <div class="doc_subsection">
   <a name="c-be">Known problems with the C back-end</a>
@@ -722,10 +654,6 @@ Analysis rules.  As such, special options may be necessary to compile the code
 (for example, GCC requires the <tt>-fno-strict-aliasing</tt> option).  This
 problem probably cannot be fixed.</li>
 
-<li><a href="http://llvm.cs.uiuc.edu/PR33">Initializers for global variables</a>
-cannot include special floating point numbers like Not-A-Number or
-Infinity.</li>
-
 <li><a href="http://llvm.cs.uiuc.edu/PR56">Zero arg vararg functions are not 
 supported</a>.  This should not affect LLVM produced by the C or C++ 
 frontends.</li>
@@ -734,6 +662,49 @@ frontends.</li>
 
 </div>
 
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="alpha-be">Known problems with the Alpha back-end</a>
+</div>
+
+<div class="doc_text">
+
+<ul>
+
+<li>On 21164s, some rare FP arithmatic sequences which may trap do not have the appropriate nops inserted to ensure restartability.</li>
+
+<li>Vararg functions are not supported.</li>
+
+<li>Due to the vararg problems, C++ exceptions do not work.  Small changes are required to the CFE (which break correctness in the exception handler) to compile the exception handling library (and thus the C++ standard library).</li>
+
+</ul>
+
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="ia64-be">Known problems with the IA64 back-end</a>
+</div>
+
+<div class="doc_text">
+
+<ul>
+
+<li>C++ programs are likely to fail on IA64, as calls to <tt>setjmp</tt> are
+made where the argument is not 16-byte aligned, as required on IA64. (Strictly
+speaking this is not a bug in the IA64 back-end; it will also be encountered
+when building C++ programs using the C back-end.)</li>
+
+<li>There are a few ABI violations which will lead to problems
+when mixing LLVM output with code built with other compilers,
+particularly for C++ and floating-point programs.</li>
+
+<li>Vararg functions are not supported.</li>
+
+</ul>
+
+</div>
+
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="additionalinfo">Additional Information</a>
@@ -743,11 +714,12 @@ frontends.</li>
 <div class="doc_text">
 
 <p>A wide variety of additional information is available on the LLVM web page,
-including mailing lists and publications describing algorithms and components
-implemented in LLVM.  The web page also contains versions of the API
-documentation which is up-to-date with the CVS version of the source code.  You
-can access versions of these documents specific to this release by going into
-the "<tt>llvm/doc/</tt>" directory in the LLVM tree.</p>
+including <a href="http://llvm.cs.uiuc.edu/docs/#maillist">mailing lists</a> and
+<a href="http://llvm.cs.uiuc.edu/pubs/">publications describing algorithms and
+components implemented in LLVM</a>.  The web page also contains versions of the
+API documentation which is up-to-date with the CVS version of the source code.
+You can access versions of these documents specific to this release by going
+into the "<tt>llvm/doc/</tt>" directory in the LLVM tree.</p>
 
 <p>If you have any questions or comments about LLVM, please feel free to contact
 us via the <a href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">mailing