Fix for VisualStudio. It is treating a 2 bit enum as a signed int for comparison...
[oota-llvm.git] / docs / ReleaseNotes.html
index fa3317bb6e601408e52b4ba07addbf0e0995b089..03d2db112fad6312dfa84e06cd9e004d762e7ae2 100644 (file)
 <div class="doc_text">
 
 <p>This document contains the release notes for the LLVM compiler
-infrastructure, release 2.0.  Here we describe the status of LLVM, including any
-known problems and major improvements from the previous release.  All LLVM
+infrastructure, release 2.0.  Here we describe the status of LLVM, including
+major improvements from the previous release and any known problems.  All LLVM
 releases may be downloaded from the <a href="http://llvm.org/releases/">LLVM
-releases web site</a>.
+releases web site</a>.</p>
 
 <p>For more information about LLVM, including information about the latest
 release, please check out the <a href="http://llvm.org/">main LLVM
@@ -43,7 +43,8 @@ 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 or the main LLVM web page,
+<p>Note that if you are reading this file from a Subversion checkout 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.org/releases/">releases page</a>.</p>
@@ -153,10 +154,12 @@ series.</li>
     configure llvm-gcc on linux are no longer needed, and special hacks to build
     large C++ libraries like Qt are not needed.</li>
 
-<li>LLVM now has a new MSIL backend. llc -march=msil will now turn LLVM 
+<li>LLVM now has a new MSIL backend. <tt>llc -march=msil</tt> will now turn LLVM
     into MSIL (".net") bytecode.  This is still fairly early development 
     with a number of limitations.</li>
 
+<li>A new <a href="CommandGuide/html/llvm-upgrade.html">llvm-upgrade</a> tool 
+    exists to migrates LLVM 1.9 .ll files to LLVM 2.0 syntax.</li>
 </ul>
 
 </div>
@@ -200,30 +203,30 @@ Improvements</a></div>
 <ul>
 <li>The <a href="WritingAnLLVMPass.html">pass manager</a> has been entirely
     rewritten, making it significantly smaller, simpler, and more extensible.
-    Support has been added to run FunctionPasses interlaced with
-    CallGraphSCCPasses, and we now support loop transformations explicitly with
-    LoopPass.</li>
-
-<li>The <tt>-scalarrepl</tt> pass can now promote unions containing FP values
-    into a register, it can also handle unions of vectors of the same
-    size.</li>
+    Support has been added to run <tt>FunctionPass</tt>es interlaced with
+    <tt>CallGraphSCCPass</tt>es, we now support loop transformations
+    explicitly with <tt>LoopPass</tt>, and <tt>ModulePass</tt>es may now use the
+    result of <tt>FunctionPass</tt>es.</li>
 
 <li>LLVM 2.0 includes a new loop rotation pass, which converts "for loops" into 
     "do/while loops", where the condition is at the bottom of the loop.</li>
 
-<li>The Loop Strength Reduction pass has been improved, and support added 
-    for sinking expressions across blocks to reduce register pressure.</li>
+<li>The Loop Strength Reduction pass has been improved, and we now support
+    sinking expressions across blocks to reduce register pressure.</li>
 
-<li>ModulePasses may now use the result of FunctionPasses.</li>
+<li>The <tt>-scalarrepl</tt> pass can now promote unions containing FP values
+    into a register, it can also handle unions of vectors of the same
+    size.</li>
 
 <li>The [Post]DominatorSet classes have been removed from LLVM and clients
-    switched to use the far-more-efficient ETForest class instead.</li>
+    switched to use the more-efficient ETForest class instead.</li>
 
 <li>The ImmediateDominator class has also been removed, and clients have been
     switched to use DominatorTree instead.</li>
 
 <li>The predicate simplifier pass has been improved, making it able to do 
-    simple value range propagation and eliminate more conditionals.</li>
+    simple value range propagation and eliminate more conditionals.  However,
+    note that predsimplify is not enabled by default in llvm-gcc.</li>
 
 </ul>
   
@@ -240,7 +243,7 @@ New features include:
 
 <ul>
 
-<li>Support was added for software floating point, which allows LLVM to target
+<li>LLVM now supports software floating point, which allows LLVM to target
     chips that don't have hardware FPUs (e.g. ARM thumb mode).</li>
 
 <li>A new register scavenger has been implemented, which is useful for
@@ -260,8 +263,8 @@ New features include:
     sparse switches that have dense subregions, and implemented support 
     for the shift/and trick.</li>
 
-<li>Added support for tracking physreg sub-registers and super-registers 
-    in the code generator, as well as extensive register  
+<li>LLVM now supports tracking physreg sub-registers and super-registers 
+    in the code generator, and includes extensive register
     allocator changes to track them.</li>
 
 <li>There is initial support for virtreg sub-registers 
@@ -304,7 +307,7 @@ Other improvements include:
  several ways:</p>
  
 <ul>
-<li>Extended TargetData to support better target parameterization in
+<li>TargetData now supports better target parameterization in
     the .ll/.bc files, eliminating the 'pointersize/endianness' attributes
     in the files (<a href="http://llvm.org/PR761">PR761</a>).</li>
 
@@ -336,7 +339,7 @@ Improvements</a></div>
 <li>PIC support for linux/x86 has been added.</li>
 <li>The X86 backend now supports the GCC regparm attribute.</li>
 <li>LLVM now supports inline asm with multiple constraint letters per operand 
-    (like "ri") which is common in X86 inline asms.</li>
+    (like "mri") which is common in X86 inline asms.</li>
 </ul>
 
 <p>ARM-specific Code Generator Enhancements:</p>
@@ -347,14 +350,16 @@ Improvements</a></div>
 <li>There are major new features, including support for ARM 
     v4-v6 chips, vfp support, soft float point support, pre/postinc support,
     load/store multiple generation, constant pool entry motion (to support
-    large functions), and inline asm support, weak linkage support, static
+    large functions), inline asm support, weak linkage support, static
     ctor/dtor support and many bug fixes.</li>
+    
 <li>Added support for Thumb code generation (<tt>llc -march=thumb</tt>).</li>
 
 <li>The ARM backend now supports the ARM AAPCS/EABI ABI and PIC codegen on 
     arm/linux.</li>
 
 <li>Several bugs were fixed for DWARF debug info generation on arm/linux.</li>
+
 </ul>
 
 <p>PowerPC-specific Code Generator Enhancements:</p>
@@ -378,15 +383,11 @@ Improvements</a></div>
 <div class="doc_subsubsection"><a name="other">Other Improvements</a></div>
 <div class="doc_text">
 
-<p>This release includes many other improvements, including
-performance work, specifically designed to tune datastructure
-usage. This makes several critical components faster.</p>
-
 <p>More specific changes include:</p>
 
 <ul>
 <li>LLVM no longer relies on static destructors to shut itself down.  Instead,
-    it lazily initializes itself and shuts down when llvm_shutdown() is 
+    it lazily initializes itself and shuts down when <tt>llvm_shutdown()</tt> is 
     explicitly called.</li>
 
 <li>LLVM now has significantly fewer static constructors, reducing startup time.
@@ -397,16 +398,11 @@ usage. This makes several critical components faster.</p>
 
 <li>Construction of intrinsic function declarations has been simplified.</li>
 
-<li>The llvm-upgrade tool now exists. This migrates LLVM 1.9 .ll files to 
-    LLVM 2.0 syntax.</li>
-
-<li>The gccas/gccld tools have been removed.</li>
+<li>The gccas/gccld tools have been replaced with small shell scripts.</li>
 
 <li>Support has been added to llvm-test for running on low-memory  
     or slow machines (make SMALL_PROBLEM_SIZE=1).</li>
 
-<li>llvm-test is now more portable and should build with MS Visual Studio.</li>
-
 </ul>
 </div>
 
@@ -420,7 +416,7 @@ following major changes:</p>
 
 <ul>
 <li>Pass registration is slightly different in LLVM 2.0 (you now need an
-   intptr_t in your constructor), as explained in the <a 
+   <tt>intptr_t</tt> in your constructor), as explained in the <a 
    href="WritingAnLLVMPass.html#basiccode">Writing an LLVM Pass</a>
    document.</li>
    
@@ -432,7 +428,8 @@ following major changes:</p>
     replaced by <tt>Type::Int8Ty</tt>, <tt>Type::Int16Ty</tt>, etc.  LLVM types
     have always corresponded to fixed size types
     (e.g. long was always 64-bits), but the type system no longer includes
-    information about the sign of the type.</li>
+    information about the sign of the type.  Also, the
+    <tt>Type::isPrimitiveType()</tt> method now returns false for integers.</li>
 
 <li>Several classes (<tt>CallInst</tt>, <tt>GetElementPtrInst</tt>,
     <tt>ConstantArray</tt>, etc), that once took <tt>std::vector</tt> as
@@ -445,7 +442,7 @@ following major changes:</p>
     </pre>
     
     This avoids creation of a temporary vector (and a call to malloc/free).  If
-    you have an std::vector, use code like this:
+    you have an <tt>std::vector</tt>, use code like this:
     <pre>
       std::vector&lt;Value*&gt; Ops = ...;
       GEP = new GetElementPtrInst(BasePtr, &amp;Ops[0], Ops.size());
@@ -453,13 +450,14 @@ following major changes:</p>
 
     </li>
     
-<li>CastInst is now abstract and its functionality is split into several parts,
-    one for each of the <a href="LangRef.html#convertops">new cast
-    instructions</a>.</li>
+<li><tt>CastInst</tt> is now abstract and its functionality is split into
+    several parts, one for each of the <a href="LangRef.html#convertops">new
+    cast instructions</a>.</li>
 
 <li><tt>Instruction::getNext()/getPrev()</tt> are now private (along with
     <tt>BasicBlock::getNext</tt>, etc), for efficiency reasons (they are now no
-    longer just simple pointers).  Please use BasicBlock::iterator, etc instead.
+    longer just simple pointers).  Please use <tt>BasicBlock::iterator</tt>, etc
+    instead.
 </li>
 
 <li><tt>Module::getNamedFunction()</tt> is now called
@@ -482,14 +480,14 @@ following major changes:</p>
 <p>LLVM is known to work on the following platforms:</p>
 
 <ul>
-  <li>Intel and AMD machines running Red Hat Linux, Fedora Core and FreeBSD 
+<li>Intel and AMD machines running Red Hat Linux, Fedora Core and FreeBSD 
       (and probably other unix-like systems).</li>
+<li>PowerPC and X86-based Mac OS X systems, running 10.2 and above in 32-bit and
+    64-bit modes.</li>
 <li>Intel and AMD machines running on Win32 using MinGW libraries (native)</li>
-<li>Sun UltraSPARC workstations running Solaris 8.</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 and X86-based Mac OS X systems, running 10.2 and above in 32-bit and
-    64-bit modes.</li>
+<li>Sun UltraSPARC workstations running Solaris 8.</li>
 <li>Alpha-based machines running Debian GNU/Linux.</li>
 <li>Itanium-based machines running Linux and HP-UX.</li>
 </ul>
@@ -534,7 +532,8 @@ components, please contact us on the <a href="http://lists.cs.uiuc.edu/mailman/l
 <ul>
 <li>The <tt>-cee</tt> pass is known to be buggy, and may be removed in in a 
     future release.</li>
-<li>C++ EH support</li>
+<li>C++ EH support is disabled for this release.</li>
+<li>The MSIL backend is experimental.</li>
 <li>The IA64 code generator is experimental.</li>
 <li>The Alpha JIT is experimental.</li>
 <li>"<tt>-filetype=asm</tt>" (the default) is the only supported value for the 
@@ -568,7 +567,7 @@ components, please contact us on the <a href="http://lists.cs.uiuc.edu/mailman/l
 <li><a href="http://llvm.org/PR642">PowerPC backend does not correctly
 implement ordered FP comparisons</a>.</li>
 <li>The Linux PPC32/ABI support needs testing for the interpreter and static
-compilation, and lacks Dwarf debugging informations.
+compilation, and lacks support for debug information.</li>
 </ul>
 
 </div>
@@ -581,14 +580,13 @@ compilation, and lacks Dwarf debugging informations.
 <div class="doc_text">
 
 <ul>
-<li>The Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6
-processors, any thumb program compiled with LLVM crashes or produces wrong
-results. (<a href="http://llvm.org/PR1388">PR1388</a>)</li>
+<li>Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6
+processors, thumb program can crash or produces wrong
+results (<a href="http://llvm.org/PR1388">PR1388</a>).</li>
 <li>Compilation for ARM Linux OABI (old ABI) is supported, but not fully tested.
 </li>
-<li>QEMU-ARM (<= 0.9.0) wrongly executes programs compiled with LLVM. A non-affected QEMU version must be used or this
-<a href="http://cvs.savannah.nongnu.org/viewcvs/qemu/target-arm/translate.c?root=qemu&amp;r1=1.46&amp;r2=1.47&amp;makepatch=1&amp;diff_format=h">
-patch</a> must be applied on QEMU.</li>
+<li>There is a bug in QEMU-ARM (<= 0.9.0) which causes it to incorrectly execute
+programs compiled with LLVM.  Please use more recent versions of QEMU.</li>
 </ul>
 
 </div>
@@ -700,7 +698,7 @@ bits.</p></li>
   See <a href="http://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html#Constructing%20Calls">Constructing Calls</a>: Dispatching a call to another function.</p>
 </li>
 
-<li><p>llvm-gcc <b>partially</b> supports tthese GCC extensions:</p>
+<li><p>llvm-gcc <b>partially</b> supports these GCC extensions:</p>
   <ol>
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html#Nested%20Functions">Nested Functions</a>: As in Algol and Pascal, lexical scoping of functions.<br>
       Nested functions are supported, but llvm-gcc does not support non-local
@@ -835,8 +833,8 @@ Exception Handling</a>, and it is not enabled by default.</li>
 <p>A wide variety of additional information is available on the <a
 href="http://llvm.org">LLVM web page</a>, in particular in the <a
 href="http://llvm.org/docs/">documentation</a> section.  The web page also
-contains versions of the API documentation which is up-to-date with the CVS
-version of the source code.
+contains versions of the API documentation which is up-to-date with the
+Subversion 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>