* Add a space between words
[oota-llvm.git] / docs / ReleaseNotes.html
index 73068181840198c36532a6a139f4ef8adde0f921..a3509c4203936616c25146f731324bed02b950f7 100644 (file)
@@ -3,11 +3,11 @@
 <html>
 <head>
   <link rel="stylesheet" href="llvm.css" type="text/css">
-  <title>LLVM 1.3 Release Notes</title>
+  <title>LLVM 1.4 Release Notes</title>
 </head>
 <body>
 
-<div class="doc_title">LLVM 1.3 Release Notes</div>
+<div class="doc_title">LLVM 1.4 Release Notes</div>
  
 <ol>
   <li><a href="#intro">Introduction</a></li>
     <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="#sparc-be">Known problems with the Sparc 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_text">
-  <p><b>Written by the <a href="http://llvm.cs.uiuc.edu">LLVM team</a></b><p>
+<div class="doc_author">
+  <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
+infrastructure, release 1.4.  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
+href="http://llvm.cs.uiuc.edu/releases/1.4/">LLVM 1.4 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>
 
@@ -69,57 +69,49 @@ 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 and adds some <a
-href="#newfeatures">new features</a>, though it does <a href="#bugfix">fix a few
-bugs</a> as well.</p>
+<p>This is the fifth 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 CPU2000 benchmarks, the Olden benchmarks, and the Ptrdist benchmarks.  It
-has also been used to compile <b>many</b> other programs.  LLVM now also works
-with a broad variety of C++ programs, though it has still received less testing
-than the C front-end.</p>
+SPEC CPU95 &amp; 2000 benchmarks, the Olden benchmarks, and the Ptrdist 
+benchmarks, and <b>many</b> other C and C++ programs.</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>, <tt>-enable-correct-eh-support</tt>, etc.) </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>The test/Programs hierarchy <a href="http://llvm.cs.uiuc.edu/PR257">has
+      been moved out of the main LLVM tree</a> into a separate CVS repo and
+      tarball.</li>
+  <li>LLVM now optimizes global variables significantly more than it did
+      before.</li>
+  <li>LLVM now includes the new '<tt>undef</tt>' value and <a
+      href="LangRef.html#i_unreachable"><tt>unreachable</tt></a> instruction,
+      which give the optimizer more information about the behavior of the
+      program.</li>
 </ol>
 
+</div>
+
 
 <!--=========================================================================-->
 <div class="doc_subsubsection">
 In this release, the following missing features were implemented:
 </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/PR419">JIT interface should support
+    arbitrary calls</a></li>
 </ol>
 
+</div>
 
 <!--=========================================================================-->
 <div class="doc_subsubsection">
@@ -127,24 +119,27 @@ uses of external fns by immediate constant exprs</a></li>
 issues were fixed:</a>
 </div>
 
+<div class="doc_text">
+
 <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><a href="http://llvm.cs.uiuc.edu/PR426">[llvmg++] Tons of warnings are spewed when 
+    linking to libstdc++</a></li>
+<li><a href="http://llvm.cs.uiuc.edu/PR352">include/{Support,Config} -> 
+    include/llvm/{Support,Config}</a></li>
 </ol>
 
+</div>
+
 <!--=========================================================================-->
 <div class="doc_subsubsection">
 In this release, the following build problems were fixed:
 </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></li>
 </ol>
+</div>
 
 <!--=========================================================================-->
 <div class="doc_subsubsection">
@@ -152,43 +147,12 @@ work if you change PATH</a></li>
 improvements:</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 new
-<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 link-time optimizer now runs the -prune-eh pass (to remove unused
-exception handlers).</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>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><a href="http://llvm.cs.uiuc.edu/PR362">Ugly code generated for  
+    std::min/std::max</a></li>
 </ol>
-
+</div>
 
 <!--=========================================================================-->
 <div class="doc_subsubsection">
@@ -196,32 +160,34 @@ functions like sqrt/sin/cos/etc.</li>
 were fixed:</a>
 </div>
 
-<p>Bugs in the LLVM Core:</p>
+<div class="doc_text">
+
+<p>Bugs fixed in the LLVM Core:</p>
 
 <ol>
-<li><a href="http://llvm.cs.uiuc.edu/PR330">[vmcore] Linker causes erroneous
-asssertion</a></li>
-<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/PR332">[adce] Crash handling unreachable
-code that unwinds</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR333">[sparc] 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/PR420">[licm] LICM invalidates alias analysis info
+    and uses broken information</a> (optimizer crash)</li>
+<li><a href="http://llvm.cs.uiuc.edu/PR422">[asmwriter] Asmwriter is really slow for
+    functions with lots of values</a></li>
+<li><a href="http://llvm.cs.uiuc.edu/PR423">[anders-aa] Andersen's AA is completely 
+    broken in LLVM 1.3</a></li>
+<li><a href="http://llvm.cs.uiuc.edu/PR430">[bcwriter] Empty compaction tables 
+    defined</a></li>
 </ol>
 
 <p>Bugs in the C/C++ front-end:</p>
 
 <ol>
-<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/PR298">[llvmgcc] Variable length array
-indexing miscompiled</a></li>
+<li><a href="http://llvm.cs.uiuc.edu/PR445">[llvmg++] not enough templates are instantiated</a></li>
+<li><a href="http://llvm.cs.uiuc.edu/PR450">[llvmg++] Extern const globals cannot be 
+marked 'constant' if they have nontrivial ctors or dtors</a></li>
+</ol>
+
+<p>Bugs fixed in the Sparc V9 back-end:</p>
+
+<ol>
+<li><a href="http://llvm.cs.uiuc.edu/PR428">[sparcv9] regalloc assertion
+    failure with certain indirect calls</a></li>
 </ol>
 
 </div>
@@ -234,11 +200,17 @@ indexing miscompiled</a></li>
 
 <div class="doc_text">
 
-<p>LLVM has been extensively tested on Intel and AMD machines running Red Hat
-Linux.  It has also been tested under FreeBSD, and on Sun UltraSPARC
-workstations running Solaris 8.  Additionally, LLVM works on Mac OS X 10.3 and
-above, but only with the C backend and interpreter; no native machine-code
-generator for the PowerPC is available yet.</p>
+<p>LLVM is known to work in 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>Intel and AMD machines running on Win32 with the Cygwin libraries.</li>
+<li>PowerPC-based Mac OS X boxes, running 10.2 and above.  Note that no JIT
+support is available yet, and LLC support is beta.  The C backend can be used
+to produce stable code for this platform.</li>
+</ul>
 
 <p>The core LLVM infrastructure uses
 <a href="http://www.gnu.org/software/autoconf/">GNU autoconf</a> to adapt itself
@@ -246,20 +218,17 @@ 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>
 
-</div>
+<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).  Finally,
+please make sure that there are no directories with spaces in them in your
+PATH environment variable.</p>
 
-<!--=========================================================================-->
-<div class="doc_subsection">
-In this release, the following portability problems were fixed:
 </div>
 
-<ol>
-<li><a href="http://llvm.cs.uiuc.edu/PR304">warnings compiling Stacker compiler
-on Mac OS X</a></li>
-<li><a href="http://llvm.cs.uiuc.edu/PR308">Archive file reader doesn't
-understand abbreviated names in headers</a></li>
-</ol>
-
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="knownproblems">Known Problems</a>
@@ -290,9 +259,11 @@ 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, -sortstructs, -swapstructs, -cee</tt></li>
-
+    -ipmodref, -cee, -branch-combine, -instloops, -paths</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>
@@ -317,9 +288,7 @@ work.</li>
 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
+<li>Linking in static archive files (.a files) is 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
@@ -453,8 +422,9 @@ work:
       We support all builtins which have a C language equivalent (e.g., 
          <tt>__builtin_cos</tt>),  <tt>__builtin_alloca</tt>, 
          <tt>__builtin_types_compatible_p</tt>, <tt>__builtin_choose_expr</tt>,
-         <tt>__builtin_constant_p</tt>, and <tt>__builtin_expect</tt> (ignored).</li>
-
+         <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>
   </ol>
 
   <p>The following extensions <b>are</b> known to be supported:</p>
@@ -463,7 +433,7 @@ work:
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels%20as%20Values">Labels as Values</a>: Getting pointers to labels and computed gotos.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement%20Exprs">Statement Exprs</a>:   Putting statements and declarations inside expressions.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Typeof.html#Typeof">Typeof</a>: <code>typeof</code>: referring to the type of an expression.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Lvalues.html#Lvalues">Lvalues</a>: Using <code>?:</code>, "<code>,</code>" and casts in lvalues.</li>
+  <li><a href="http://gcc.gnu.org/onlinedocs/gcc-3.4.0/gcc/Lvalues.html#Lvalues">Lvalues</a>: Using <code>?:</code>, "<code>,</code>" and casts in lvalues.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Conditionals.html#Conditionals">Conditionals</a>: Omitting the middle operand of a <code>?:</code> expression.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Long-Long.html#Long%20Long">Long Long</a>: Double-word integers.</li>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Complex.html#Complex">Complex</a>:   Data types for complex numbers.</li>
@@ -524,7 +494,15 @@ Please report any bugs or problems.</p>
 <ul>
 <li>The C++ front-end inherits all problems afflicting the <a href="#c-fe">C
     front-end</a>.</li>
+
+<li><b>IA-64 specific</b>: The C++ front-end does not use <a 
+href="http://llvm.cs.uiuc.edu/PR406">IA64 ABI compliant layout of v-tables</a>.
+In particular, it just stores function pointers instead of function
+descriptors in the vtable.  This bug prevents mixing C++ code compiled with
+LLVM with C++ objects compiled by other C++ compilers.</li>
+
 </ul>
+
 </div>
 
 <!-- _______________________________________________________________________ -->
@@ -570,20 +548,21 @@ href="http://gcc.gnu.org/gcc-3.4/changes.html">GCC 3.4 release notes</a>.</li>
 <div class="doc_text">
 
 <ul>
-<li>None so far.
+  <li>none yet</li>
 </ul>
 
 </div>
 
 <!-- ======================================================================= -->
 <div class="doc_subsection">
-  <a name="sparc-be">Known problems with the Sparc back-end</a>
+  <a name="sparcv9-be">Known problems with the SparcV9 back-end</a>
 </div>
 
 <div class="doc_text">
 
 <ul>
-<li>There are several programs in the LLVM testsuite that the Sparc code generator is known to miscompile.</li>
+<li><a href="http://llvm.cs.uiuc.edu/PR60">[sparcv9] SparcV9 backend miscompiles
+several programs in the LLVM test suite</a></li>
 </ul>
 
 </div>