Add instructions for building Ada and Fortran.
[oota-llvm.git] / docs / ReleaseNotes.html
index 96206f31a8066414a656079261bc33c11e72feb3..b0e3ba28e54ba3170be5d6151a381dd749476c24 100644 (file)
@@ -4,11 +4,11 @@
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   <link rel="stylesheet" href="llvm.css" type="text/css">
-  <title>LLVM 2.2 Release Notes</title>
+  <title>LLVM 2.3 Release Notes</title>
 </head>
 <body>
 
-<div class="doc_title">LLVM 2.2 Release Notes</div>
+<div class="doc_title">LLVM 2.3 Release Notes</div>
  
 <ol>
   <li><a href="#intro">Introduction</a></li>
@@ -23,8 +23,8 @@
   <p>Written by the <a href="http://llvm.org">LLVM Team</a><p>
 </div>
 
-<h1><font color="red">THIS IS A WORK IN PROGRESS FOR THE LLVM 2.2 
-RELEASE</font</h1>
+<h1><font color="red">THIS IS A WORK IN PROGRESS FOR LLVM 2.3 (currently in
+progress on SVN HEAD)</font></h1>
 
 <!-- *********************************************************************** -->
 <div class="doc_section">
@@ -35,7 +35,7 @@ RELEASE</font</h1>
 <div class="doc_text">
 
 <p>This document contains the release notes for the LLVM compiler
-infrastructure, release 2.2.  Here we describe the status of LLVM, including
+infrastructure, release 2.3.  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>.</p>
@@ -61,26 +61,40 @@ current one.  To see the release notes for a specific releases, please see the
 
 <div class="doc_text">
 
-<p>This is the thirteenth public release of the LLVM Compiler Infrastructure. 
-It includes many features and refinements from LLVM 2.1.</p>
+<p>This is the fourteenth public release of the LLVM Compiler Infrastructure. 
+It includes many features and refinements from LLVM 2.2.</p>
+
+</div>
+
+<!-- Unfinished features in 2.3:
+  Index Set Splitting not enabled by default
+  Machine LICM
+  Machine Sinking
+  LegalizeDAGTypes
+ -->
+
+<!--=========================================================================-->
+<div class="doc_subsection">
+<a name="deprecation">Removed features in LLVM 2.3</a>
+</div>
+
+<div class="doc_text">
+
+<p>LLVM 2.2 was the last LLVM release to support llvm-gcc 4.0 and llvm-upgrade.
+llvm-gcc 4.0 has been replaced with llvm-gcc 4.2.  llvm-upgrade was useful for
+upgrading llvm 1.9 files to llvm 2.x syntax, but you can always use a previous
+llvm release to do this.</p>
 
 </div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="frontends">llvm-gcc 4.0, llvm-gcc 4.2, and clang</a>
+<a name="frontends">llvm-gcc 4.2 and clang</a>
 </div>
 
 <div class="doc_text">
 
-<p>LLVM 2.2 fully supports both the llvm-gcc 4.0 and llvm-gcc 4.2 front-ends (in
-LLVM 2.1, llvm-gcc 4.2 was beta).  Since LLVM 2.1, the llvm-gcc 4.2 front-end
-has made leaps and bounds and is now at least as good as 4.0 in virtually every
-area, and is better in several areas (for example, exception handling
-correctness).  We strongly recommend that you migrate from llvm-gcc 4.0 to
-llvm-gcc 4.2 in this release cycle because <b>LLVM 2.2 is the last release
-that will support llvm-gcc 4.0</b>:  LLVM 2.3 will only support the llvm-gcc
-4.2 front-end.</p>
+<p>LLVM 2.3 fully supports llvm-gcc 4.2 front-end. </p>
 
 <p>The <a href="http://clang.llvm.org/">clang project</a> is an effort to build
 a set of new 'llvm native' front-end technologies for the LLVM optimizer
@@ -88,8 +102,8 @@ and code generator.  Currently, its C and Objective-C support is maturing
 nicely, and it has advanced source-to-source analysis and transformation
 capabilities.  If you are interested in building source-level tools for C and
 Objective-C (and eventually C++), you should take a look.  However, note that
-clang is not an official part of the LLVM 2.2 release.  If you are interested in
-this project, please see the web site.</p>
+clang is not an official part of the LLVM 2.3 release.  If you are interested in
+this project, please see its <a href="http://clang.llvm.org/">web site</a>.</p>
 
 </div>
 
@@ -100,43 +114,26 @@ this project, please see the web site.</p>
 
 <div class="doc_text">
 
-<p>Dale contributed full support for long double on x86/x86-64 (where it is 80
-bits) and on Darwin PPC/PPC64 (where it is 128 bits).</p>
+<p>LLVM 2.3 includes several major new capabilities:</p>
 
-<p>Ada, gfortran</p>
-
-<p>
-debug improvements -O0
-EH.
-
-Gordon: GC Revamp. docs/GarbageCollection.html
-
-Kaleidescope: docs/tutorial
-
-Gordon: C and Ocaml Bindings
+<ul>
+</ul>
 
 </div>
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="optimizer">Optimizer Improvements</a>
+<a name="coreimprovements">LLVM Core Improvements</a>
 </div>
 
 <div class="doc_text">
-
-<p>Some of the most noticable feature improvements this release have been in the
-optimizer, speeding it up and making it more aggressive.  For example:</p>
+<p>New features include:
+</p>
 
 <ul>
 
-<li>Daniel Berlin and (Curtis?) rewrote Andersen's alias analysis (which is not
-enabled by default) to be several orders of magnitude faster, implmented Offline
-Variable Substitution.</li>
-
-
-Devang: LoopIndexSplit is enabled by default.
 </ul>
-
+  
 </div>
 
 <!--=========================================================================-->
@@ -146,72 +143,45 @@ Devang: LoopIndexSplit is enabled by default.
 
 <div class="doc_text">
 
-<p>foci of this release was performance tuning and bug
-   fixing.  In addition to these, several new major changes occurred:</p>
+<p>We put a significant amount of work into the code generator infrastructure,
+which allows us to implement more aggressive algorithms and make it run
+faster:</p>
 
 <ul>
-
-<li>Owen contributed Machine Loop info, domintors, etc. Merged dom and
- postdom.</li>
-
-<li>Dan added support for emitting debug information with .file and .loc on 
-targets that support it</li>
-
-<li>Evan physical register dependencies in the BURR scheduler</li>
-
-<li>Evan EXTRACT_SUBREG coalescing support</li>
+<li>MemOperand in the code generator.</li>
 </ul>
 
 </div>
 
-
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="targetspecific">Target Specific Improvements</a>
+<a name="optimizer">Optimizer Improvements</a>
 </div>
 
 <div class="doc_text">
-<p>New features include:
-</p>
 
-<ul>
-<li>Evan X86 now models EFLAGS in instructions.</li>
-<li>Evan: If conversion on by default for ARM.</li>
-<li>Bruno: MIPS PIC support.</li>
-<li>Arnold Schwaighofer: X86 tail call support.</li>
-</ul>
-  
-</div>
+<p>In addition to a huge array of bug fixes and minor performance tweaks, the 
+LLVM 2.3 optimizers support a few major enhancements:</p>
 
+<ul>
 
-<!--=========================================================================-->
-<div class="doc_subsection">
-<a name="llvmgccimprovements">llvm-gcc Improvements</a>
-</div>
-
-<div class="doc_text">
-<p>New features include:
-</p>
+<li>Index set splitting on by default.</li>
 
-<ul>
-<li>.</li>
 </ul>
-  
+
 </div>
 
 
 <!--=========================================================================-->
 <div class="doc_subsection">
-<a name="coreimprovements">LLVM Core Improvements</a>
+<a name="targetspecific">Target Specific Improvements</a>
 </div>
 
 <div class="doc_text">
-<p>New features include:
+<p>New target-specific features include:
 </p>
 
 <ul>
-<li>Devang added LLVMFoldingBuilder.</li>
-<li>Dan added support for vector sin, cos, and pow intrinsics.</li>
 </ul>
   
 </div>
@@ -226,7 +196,6 @@ targets that support it</li>
 </p>
 
 <ul>
-<li>.</li>
 </ul>
   
 </div>
@@ -289,12 +258,11 @@ there isn't already one.</p>
 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 <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list</a>.</p>
+components, please contact us on the <a
+href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list</a>.</p>
 
 <ul>
-<li>The <tt>-cee</tt> pass is known to be buggy and will be removed in
-    LLVM 2.3.</li>
-<li>The MSIL, IA64, Alpha, and MIPS backends are experimental.</li>
+<li>The MSIL, IA64, Alpha, SPU, and MIPS backends are experimental.</li>
 <li>The LLC "<tt>-filetype=asm</tt>" (the default) is the only supported
     value for this option.</li>
 <li>The llvmc tool is not supported.</li>
@@ -315,6 +283,8 @@ components, please contact us on the <a href="http://lists.cs.uiuc.edu/mailman/l
 <li>The X86 backend occasionally has <a href="http://llvm.org/PR1649">alignment
     problems</a> on operating systems that don't require 16-byte stack alignment
     (including most non-darwin OS's like linux).</li>
+<li>The X86 backend generates inefficient floating point code when configured to
+    generate code for systems that don't have SSE2.</li>
 </ul>
 
 </div>
@@ -346,7 +316,7 @@ processors, thumb programs can crash or produce 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>There is a bug in QEMU-ARM (<= 0.9.0) which causes it to incorrectly execute
+<li>There is a bug in QEMU-ARM (&lt;= 0.9.0) which causes it to incorrectly execute
 programs compiled with LLVM.  Please use more recent versions of QEMU.</li>
 </ul>
 
@@ -427,6 +397,7 @@ programs.</li>
 <li><a href="http://llvm.org/PR1658">The C backend violates the ABI of common
     C++ programs</a>, preventing intermixing between C++ compiled by the CBE and
     C++ code compiled with LLC or native compilers.</li>
+<li>The C backend does not support all exception handling constructs.</li>
 </ul>
 
 </div>
@@ -466,7 +437,7 @@ llvmdev mailing list if you are interested.</p>
 
       As in Algol and Pascal, lexical scoping of functions.
       Nested functions are supported, but llvm-gcc does not support
-      taking the address of a nested function (except on the X86-32 target)
+      taking the address of a nested function (except on X86 targets)
       or non-local gotos.</li>
 
   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function%20Attributes">Function Attributes</a>:
@@ -478,69 +449,15 @@ llvmdev mailing list if you are interested.</p>
       <tt>const</tt>, <tt>constructor</tt>, <tt>destructor</tt>, 
       <tt>deprecated</tt>, <tt>fastcall</tt>, <tt>format</tt>, 
       <tt>format_arg</tt>, <tt>non_null</tt>, <tt>noinline</tt>, 
-      <tt>noreturn</tt>, <tt>pure</tt>, <tt>regparm</tt>
+      <tt>noreturn</tt>, <tt>nothrow</tt>, <tt>pure</tt>, <tt>regparm</tt>
       <tt>section</tt>, <tt>stdcall</tt>, <tt>unused</tt>, <tt>used</tt>, 
       <tt>visibility</tt>, <tt>warn_unused_result</tt>, <tt>weak</tt><br>
 
-      <b>Ignored:</b> <tt>nothrow</tt>, <tt>malloc</tt>,
+      <b>Ignored:</b> <tt>malloc</tt>,
       <tt>no_instrument_function</tt></li>
   </ol>
 </li>
 
-<li><p>llvm-gcc supports the vast majority of GCC extensions, including:</p>
-
-  <ol>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pragmas.html#Pragmas">Pragmas</a>: Pragmas accepted by GCC.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Local-Labels.html#Local%20Labels">Local Labels</a>: Labels local to a block.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html#Other%20Builtins">Other Builtins</a>:
-      Other built-in functions.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable%20Attributes">Variable Attributes</a>:
-      Specifying attributes of variables.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html#Type%20Attributes">Type Attributes</a>:  Specifying attributes of types.</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/Variable-Length.html#Variable%20Length">Variable Length</a>:
-      Arrays whose length is computed at run time.</li>
-  <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-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>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Hex-Floats.html#Hex%20Floats">Hex Floats</a>:Hexadecimal floating-point constants.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html#Zero%20Length">Zero Length</a>: Zero-length arrays.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Empty-Structures.html#Empty%20Structures">Empty Structures</a>: Structures with no members.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html#Variadic%20Macros">Variadic Macros</a>: Macros with a variable number of arguments.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Escaped-Newlines.html#Escaped%20Newlines">Escaped Newlines</a>:  Slightly looser rules for escaped newlines.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Extended%20Asm">Extended Asm</a>: Assembler instructions with C expressions as operands.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constraints.html#Constraints">Constraints</a>: Constraints for asm operands.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Asm-Labels.html#Asm%20Labels">Asm Labels</a>: Specifying the assembler name to use for a C symbol.</li>
-  <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/Subscripting.html#Subscripting">Subscripting</a>: Any array can be subscripted, even if not an lvalue.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html#Pointer%20Arith">Pointer Arith</a>: Arithmetic on <code>void</code>-pointers and function pointers.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Initializers.html#Initializers">Initializers</a>: Non-constant initializers.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html#Compound%20Literals">Compound Literals</a>: Compound literals give structures, unions,
-or arrays as values.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html#Designated%20Inits">Designated Inits</a>: Labeling elements of initializers.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Cast-to-Union.html#Cast%20to%20Union">Cast to Union</a>: Casting to union type from any member of the union.</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_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>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Inline.html#Inline">Inline</a>: Defining inline functions (as fast as macros).</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Alternate-Keywords.html#Alternate%20Keywords">Alternate Keywords</a>:<code>__const__</code>, <code>__asm__</code>, etc., for header files.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Incomplete-Enums.html#Incomplete%20Enums">Incomplete Enums</a>:  <code>enum foo;</code>, with details to follow.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html#Function%20Names">Function Names</a>: Printable strings which are the name of the current function.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html#Return%20Address">Return Address</a>: Getting the return or frame address of a function.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed%20Fields">Unnamed Fields</a>: Unnamed struct/union fields within structs/unions.</li>
-  <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html#Attribute%20Syntax">Attribute Syntax</a>: Formal syntax for attributes.</li>
-  </ol></li>
-
 </ul>
 
 <p>If you run into GCC extensions which have not been included in any of these
@@ -560,12 +477,60 @@ tested and works for a number of non-trivial programs, including LLVM
 itself, Qt, Mozilla, etc.</p>
 
 <ul>
-<li>Exception handling only works well on the X86 and PowerPC targets.</li>
+<li>Exception handling only works well on the X86 and PowerPC targets.
+It works well for x86-64 darwin but not x86-64 linux.</li>
 </ul>
 
 </div>
 
 
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="ada-fe">Known problems with the Ada front-end</a>
+</div>
+
+<div class="doc_text">
+The llvm-gcc 4.2 Ada compiler works fairly well, however this is not a mature
+technology and problems should be expected.
+<ul>
+<li>The Ada front-end currently only builds on x86-32.  This is mainly due
+to lack of trampoline support (pointers to nested functions) on other platforms,
+however it <a href="http://llvm.org/PR2006">also fails to build on x86-64</a>
+which does support trampolines.</li>
+<li>The Ada front-end <a href="http://llvm.org/PR2007">fails to bootstrap</a>.
+Workaround: configure with --disable-bootstrap.</li>
+<li>The c380004 and <a href="http://llvm.org/PR2010">c393010</a> ACATS tests
+fail (c380004 also fails with gcc-4.2 mainline).</li>
+<li>Many gcc specific Ada tests continue to crash the compiler.</li>
+<li>The -E binder option (exception backtraces)
+<a href="http://llvm.org/PR1982">does not work</a> and will result in programs
+crashing if an exception is raised.  Workaround: do not use -E.</li>
+<li>Only discrete types <a href="http://llvm.org/PR1981">are allowed to start
+or finish at a non-byte offset</a> in a record.  Workaround: do not pack records
+or use representation clauses that result in a field of a non-discrete type
+starting or finishing in the middle of a byte.</li>
+<li>The lli interpreter <a href="http://llvm.org/PR2009">considers 'main'
+as generated by the Ada binder to be invalid</a>.
+Workaround: hand edit the file to use pointers for argv and envp rather than
+integers.</li>
+<li>The -fstack-check option <a href="http://llvm.org/PR2008">is ignored</a>.</li>
+</ul>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="fortran-fe">Known problems with the Fortran front-end</a>
+</div>
+
+<div class="doc_text">
+
+<ul>
+<li>The llvm-gcc 4.2 gfortran front-end supports a broad range of Fortran code, but does
+<a href="http://llvm.org/PR1971">not support EQUIVALENCE yet</a>.</li>
+</ul>
+</div>
+
+
 
 <!-- *********************************************************************** -->
 <div class="doc_section">
@@ -596,7 +561,7 @@ lists</a>.</p>
   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
   src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
   <a href="http://validator.w3.org/check/referer"><img
-  src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>
+  src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a>
 
   <a href="http://llvm.org/">LLVM Compiler Infrastructure</a><br>
   Last modified: $Date$