QOI issue fixed
[oota-llvm.git] / docs / ReleaseNotes.html
index 26d21baa25520b826d9047dcc8586ff0b249afeb..d1759f1c539b26575e10168051abadd05aec3950 100644 (file)
     <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>
 
 <!-- *********************************************************************** -->
@@ -69,27 +69,27 @@ 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
+<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>
-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>
+code</a> produced by all aspects of the LLVM compiler and adds many <a
+href="#newfeatures">new features</a>, and <a href="#bugfix">fixes a few
+bugs</a> as well.</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>
+
+</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
@@ -105,23 +105,65 @@ constrained to be the same as the CFG for the LLVM input code.</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 an implementation of Andersen's interprocedural alias 
+analysis 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>There is a new tool, llvm-bcanalyzer.  This tool can compute basic
+statistics and bytecode density statistics on a module or function basis and
+also dump out bytecode in a textual format that is lower level than assembly
+(values are not resolved from slot numbers).  It should only be of interest to
+(a) those who are working to improve the bytecode format and (b) those who
+really want to understand or document the details of the bytecode format.</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>Now that there are more source files than can fit on a 32Kbyte command
+line (Linux's limit), there's a new utility for searching the sources. The
+llvmgrep tool in the utils directory combines an egrep and a find without
+passing filenames through the command line. This improves performance 
+slightly. Simply run llvmgrep like you might egrep but leave off the file
+names.</li>
+<li>We now generate HTML documentation and man pages 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>
 </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>
 </ol>
 
+</div>
 
 <!--=========================================================================-->
 <div class="doc_subsubsection">
@@ -129,21 +171,41 @@ 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/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/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/PR404">[loopsimplify] Loop simplify is really slow on 252.eon</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><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>
 </ol>
+</div>
 
 <!--=========================================================================-->
 <div class="doc_subsubsection">
@@ -151,6 +213,7 @@ In this release, the following build problems were fixed:
 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>
@@ -186,8 +249,15 @@ operators into the strict versions when useful (such as "<tt>if (A &lt; B || A
 <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>
-</ol>
 
+<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>Fixed: <a href="http://llvm.cs.uiuc.edu/PR368">[sparcv9] null
+often spilled to constant pool</a>.</li>
+</ol>
+</div>
 
 <!--=========================================================================-->
 <div class="doc_subsubsection">
@@ -195,29 +265,50 @@ functions like sqrt/sin/cos/etc.</li>
 were fixed:</a>
 </div>
 
+<div class="doc_text">
+
 <p>Bugs 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/PR315">[jit] abort, don't warn, when 
+missing external functions encountered</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/PR340">Verifier misses malformed switch 
+instruction</a></li>
+<li><a href="http://llvm.cs.uiuc.edu/PR365">[asmwriter] Asm writer aborts if 
+an instruction is not embedded into a function</a></li>
+<li><a href="http://llvm.cs.uiuc.edu/PR369">[X86] stackifier crash on floating 
+point setcc X, X</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/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>
 </ol>
-
 </div>
 
 <!-- *********************************************************************** -->
@@ -228,11 +319,17 @@ the same name, both having constant pools</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>PowerPC-based Mac OS X boxes, running 10.3 and above (C backend and 
+    interpreter only, no native codegen is available yet).</li>
+<li>Intel and AMD machines running on Win32 with the Cygwin libraries.</li>
+</ul>
+
 
 <p>The core LLVM infrastructure uses
 <a href="http://www.gnu.org/software/autoconf/">GNU autoconf</a> to adapt itself
@@ -240,6 +337,13 @@ 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>
 
 <!--=========================================================================-->
@@ -247,11 +351,17 @@ portability patches and reports of successful builds or error messages.</p>
 In this release, the following portability problems were fixed:
 </div>
 
+<div class="doc_text">
+
 <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>
+<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>
+
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="knownproblems">Known Problems</a>
@@ -275,17 +385,15 @@ there isn't already one.</p>
 
 <div class="doc_text">
 
-<p>
-The following components of this LLVM release are either untested, known to be
-broken or unreliable, or are in early development.  These components should not
-be relied on, and bugs should not be filed against them, but they may be 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>
+<p>The following components of this LLVM release are either untested, known to
+be broken or unreliable, or are in early development.  These components should
+not be relied on, and bugs should not be filed against them, but they may be
+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 following passes are incomplete or buggy: <tt>-pgmdep, -memdep,
-    -ipmodref, -sortstructs, -swapstructs, -cee</tt></li>
+    -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>
@@ -345,11 +453,9 @@ 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>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>
@@ -449,8 +555,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>
@@ -459,7 +566,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>
@@ -566,20 +673,27 @@ 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>Optimized (Release) versions of LLVM built with GCC 3.3.2 or 3.3.3 will 
+  produce an llc tool that always enters an infinite loop due to what 
+  appears to be an optimization bug (-O2 and -O3) in those versions of GCC. 
+  This problem does not happen in GCC 3.3.1 nor GCC 3.4.0 nor does it happen if
+  you build a Debug version of LLVM. You are cautioned not to use GCC 3.3.2 or 
+  GCC 3.3.3 to build Optimized versions of LLVM. It is unclear whether this problem 
+  affects other backends but it is unlikely.</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>