Temporarily disable Hexagon tests. They are failing on OS X
[oota-llvm.git] / docs / ReleaseNotes.html
index e98717278a217b43b93b0ff27ee03afe9f9d3019..1ac15688a366ed6441e88a943509504ee26cf1c9 100644 (file)
 
 <h1>LLVM 3.0 Release Notes</h1>
 
-<img align=right src="http://llvm.org/img/DragonSmall.png"
-    width="136" height="136" alt="LLVM Dragon Logo">
+<div>
+<img style="float:right" src="http://llvm.org/img/DragonSmall.png"
+     width="136" height="136" alt="LLVM Dragon Logo">
+</div>
 
 <ol>
   <li><a href="#intro">Introduction</a></li>
@@ -62,8 +64,8 @@ Release Notes</a>.</h1>
    <a href="http://llvm.org/releases/">releases page</a>.</p>
 
 </div>
-   
+
+
 <!-- *********************************************************************** -->
 <h2>
   <a name="subproj">Sub-project Status Update</a>
@@ -95,11 +97,10 @@ Release Notes</a>.</h1>
    (32- and 64-bit), and for Darwin/ARM targets.</p>
 
 <p>In the LLVM 3.0 time-frame, the Clang team has made many improvements:</p>
-
 <ul>
   <li>Greatly improved support for building C++ applications, with greater
       stability and better diagnostics.</li>
-  
+
   <li><a href="http://clang.llvm.org/cxx_status.html">Improved support</a> for
       the <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372">C++
       2011</a> standard (aka "C++'0x"), including implementations of non-static data member
@@ -109,7 +110,7 @@ Release Notes</a>.</h1>
 
   <li>Implemented support for some features of the upcoming C1x standard,
       including static assertions and generic selections.</li>
-  
+
   <li>Better detection of include and linking paths for system headers and
       libraries, especially for Linux distributions.</li>
 
@@ -137,8 +138,11 @@ Release Notes</a>.</h1>
       interface, to improve the performance of code completion and the mapping
       from source locations to abstract syntax tree nodes.</li>
 </ul>
+<p>For more details about the changes to Clang since the 2.9 release, see the
+<a href="http://clang.llvm.org/docs/ReleaseNotes.html">Clang release notes</a>
+</p>
+
 
-  
 <p>If Clang rejects your code but another compiler accepts it, please take a
    look at the <a href="http://clang.llvm.org/compatibility.html">language
    compatibility</a> guide to make sure this is not intentional or a known
@@ -172,7 +176,9 @@ Release Notes</a>.</h1>
   <li>The <tt>-fplugin-arg-dragonegg-enable-gcc-optzns</tt> option, which runs
       GCC's optimizers as well as LLVM's, now works much better.  This is the
       option to use if you want ultimate performance! It is still experimental
-      though: it may cause the plugin to crash.</li>
+      though: it may cause the plugin to crash.  Setting the optimization level
+      to <tt>-O4</tt> when using this option will optimize even harder, though
+      this usually doesn't result in any improvement over <tt>-O3</tt>.</li>
 
   <li>The type and constant conversion logic has been almost entirely rewritten,
       fixing a multitude of obscure bugs.</li>
@@ -209,7 +215,7 @@ Release Notes</a>.</h1>
 </h3>
 
 <div>
-  
+
 <p>LLDB is a ground-up implementation of a command line debugger, as well as a
    debugger API that can be used from other applications.  LLDB makes use of the
    Clang parser to provide high-fidelity expression parsing (particularly for
@@ -273,7 +279,7 @@ Release Notes</a>.</h1>
   </ul>
 
 </div>
-  
+
 
 <!--=========================================================================-->
 <h3>
@@ -326,7 +332,7 @@ be used to verify some algorithms.
 
 <!--=========================================================================-->
 <h3>AddressSanitizer</h3>
-  
+
 <div>
 
 <p><a href="http://code.google.com/p/address-sanitizer/">AddressSanitizer</a>
@@ -339,7 +345,7 @@ be used to verify some algorithms.
 
 <!--=========================================================================-->
 <h3>ClamAV</h3>
-  
+
 <div>
 
 <p><a href="http://www.clamav.net">Clam AntiVirus</a> is an open source (GPL)
@@ -407,10 +413,10 @@ be used to verify some algorithms.
    typing.</p>
 
 </div>
-  
+
 <!--=========================================================================-->
 <h3>Eero</h3>
-  
+
 <div>
 
 <p><a href="http://eerolanguage.org/">Eero</a> is a fully
@@ -426,7 +432,7 @@ be used to verify some algorithms.
 
 <!--=========================================================================-->
 <h3>FAUST Real-Time Audio Signal Processing Language</h3>
-  
+
 <div>
 
 <p><a href="http://faust.grame.fr/">FAUST</a> is a compiled language for
@@ -441,7 +447,7 @@ be used to verify some algorithms.
 
 <!--=========================================================================-->
 <h3>Glasgow Haskell Compiler (GHC)</h3>
-  
+
 <div>
 
 <p>GHC is an open source, state-of-the-art programming suite for Haskell, a
@@ -507,7 +513,7 @@ be used to verify some algorithms.
    example program.  ispc is licensed under the BSD license.</p>
 
 </div>
-  
+
 <!--=========================================================================-->
 <h3>The Julia Programming Language</h3>
 
@@ -597,7 +603,7 @@ be used to verify some algorithms.
 
 <!--=========================================================================-->
 <h3>Pure</h3>
-  
+
 <div>
 <p><a href="http://pure-lang.googlecode.com/">Pure</a> is an
   algebraic/functional programming language based on term rewriting. Programs
@@ -610,7 +616,7 @@ be used to verify some algorithms.
   languages (including the ability to load LLVM bitcode modules, and inline C,
   C++, Fortran and Faust code in Pure programs if the corresponding LLVM-enabled
   compilers are installed).</p>
-  
+
 <p>Pure version 0.48 has been tested and is known to work with LLVM 3.0
   (and continues to work with older LLVM releases &gt;= 2.5).</p>
 
@@ -671,7 +677,7 @@ be used to verify some algorithms.
    co-design flow from C/C++ programs down to synthesizable VHDL and parallel
    program binaries. Processor customization points include the register files,
    function units, supported operations, and the interconnection network.</p>
-  
+
 <p>TCE uses Clang and LLVM for C/C++ language support, target independent
    optimizations and also for parts of code generation. It generates new
    LLVM-based code generators "on the fly" for the designed TTA processors and
@@ -679,7 +685,7 @@ be used to verify some algorithms.
    per-target recompilation of larger parts of the compiler chain.</p>
 
 </div>
-  
+
 <!--=========================================================================-->
 <h3>Tart Programming Language</h3>
 
@@ -756,15 +762,15 @@ be used to verify some algorithms.
 <p>LLVM 3.0 includes several major changes and big features:</p>
 
 <ul>
-<li>llvm-gcc is no longer supported, and not included in the release.  We 
+<li>llvm-gcc is no longer supported, and not included in the release.  We
     recommend switching to <a
-       href="http://clang.llvm.org/">Clang</a> or <a 
+       href="http://clang.llvm.org/">Clang</a> or <a
        href="http://dragonegg.llvm.org/">DragonEgg</a>.</li>
 
 <li>The linear scan register allocator has been replaced with a new "greedy"
     register allocator, enabling live range splitting and many other
     optimizations that lead to better code quality.  Please see its <a
-    href="http://blog.llvm.org/2011/09/greedy-register-allocation-in-llvm-30.html">blog post</a> or its talk at the <a 
+    href="http://blog.llvm.org/2011/09/greedy-register-allocation-in-llvm-30.html">blog post</a> or its talk at the <a
       href="http://llvm.org/devmtg/2011-11/">Developer Meeting</a>
     for more information.</li>
 <li>LLVM IR now includes full support for <a href="Atomics.html">atomics
@@ -777,20 +783,21 @@ be used to verify some algorithms.
 </li>
 <li>The LLVM IR exception handling representation has been redesigned and
     reimplemented, making it more elegant, fixing a huge number of bugs, and
-    enabling inlining and other optimizations.  Please see its blog post (XXX
-    not yet) and the <a href="ExceptionHandling.html">Exception Handling
+    enabling inlining and other optimizations.  Please see its <a href=
+    "http://blog.llvm.org/2011/11/llvm-30-exception-handling-redesign.html">blog
+    post</a> and the <a href="ExceptionHandling.html">Exception Handling
     documentation</a> for more information.</li>
 <li>The LLVM IR Type system has been redesigned and reimplemented, making it
     faster and solving some long-standing problems.
-    Please see its <a 
+    Please see its <a
     href="http://blog.llvm.org/2011/11/llvm-30-type-system-rewrite.html">blog
     post</a> for more information.</li>
-  
+
 <li>The MIPS backend has made major leaps in this release, going from an
     experimental target to being virtually production quality and supporting a
     wide variety of MIPS subtargets.  See the <a href="#MIPS">MIPS section</a>
     below for more information.</li>
-  
+
 <li>The optimizer and code generator now supports gprof and gcov-style coverage
     and profiling information, and includes a new llvm-cov tool (but also works
     with gcov).  Clang exposes coverage and profiling through GCC-compatible
@@ -799,7 +806,7 @@ be used to verify some algorithms.
 
 </div>
 
-  
+
 <!--=========================================================================-->
 <h3>
 <a name="coreimprovements">LLVM IR and Core Improvements</a>
@@ -816,9 +823,10 @@ be used to verify some algorithms.
   <li>A new <a href="LangRef.html#int_fma">llvm.fma intrinsic</a> directly
     represents floating point multiply accumulate operations without an
     intermediate rounding stage.</li>
-  <li>A new llvm.expect intrinsic (XXX not documented in langref) allows a
-     frontend to express expected control flow (and the __builtin_expect builtin
-    from GNU C).</li>
+  <li>A new <a href="LangRef.html#int_expect">llvm.expect intrinsic</a> allows a
+     frontend to express expected control flow (and the
+     <a href="BranchWeightMetadata.html#builtin_expect">
+     <code>__builtin_expect</code></a> from GNU C).</li>
   <li>The <a href="LangRef.html#int_prefetch">llvm.prefetch intrinsic</a> now
     takes a 4th argument that specifies whether the prefetch happens from the
     icache or dcache.</li>
@@ -857,12 +865,12 @@ be used to verify some algorithms.
     register spill placement and if-conversion, with additional optimizations
     planned for future releases.  The same framework is intended for eventual
     use with profile-guided optimization.</li>
-  
+
 <li>The "-indvars" induction variable simplification pass only modifies
     induction variables when profitable. Sign and zero extension
     elimination, linear function test replacement, loop unrolling, and
     other simplifications that require induction variable analysis have
-    been generalized so they no longer require loops to be rewritten into 
+    been generalized so they no longer require loops to be rewritten into
     canonical form prior to optimization. This new design
     preserves more IR level information, avoids undoing earlier loop
     optimizations (particularly hand-optimized loops), and no longer
@@ -910,10 +918,14 @@ be used to verify some algorithms.
   <li>TableGen can now autogenerate MC expansion logic for pseudo
     instructions that expand to multiple MC instructions (through the
     PseudoInstExpansion class).</li>
-  <li>A new llvm-objdump and llvm-dwarfdump tools provide a start of a drop-in 
-    replacement for the corresponding tools that use LLVM libraries.  As part of
+  <li>A new llvm-dwarfdump tool provides a start of a drop-in
+    replacement for the corresponding tool that use LLVM libraries.  As part of
     this, LLVM has the beginnings of a dwarf parsing library.</li>
-  <li>XXX: object file parsing stuff and llvm-size (mspencer).  Status?</li>
+  <li>llvm-objdump has more output including, symbol by symbol disassembly,
+      inline relocations, section headers, symbol tables, and section contents.
+      Support for archive files has also been added.</li>
+  <li>llvm-nm has gained support for archives of binary files.</li>
+  <li>llvm-size has been added. This tool prints out section sizes.</li>
 </ul>
 
 </div>
@@ -930,18 +942,30 @@ be used to verify some algorithms.
    make it run faster:</p>
 
 <ul>
-<li>XXX: Segmented stacks.</li>
+<li>LLVM can now produce code that works with libgcc
+    to <a href="SegmentedStacks.html">dynamically allocate stack
+    segments</a>, as opposed to allocating a worst-case chunk of
+    virtual memory for each thread.</li>
 <li>LLVM generates substantially better code for indirect gotos due to a new
     tail duplication pass, which can be a substantial performance win for
     interpreter loops that use them.</li>
-<li>Exception handling and debug information is now emitted with CFI directives,
-    yielding <a href="http://blog.mozilla.com/respindola/2011/05/12/cfi-directives/">much smaller executables</a> for some C++ applications.
+<li>Exception handling and debug frame information is now emitted with CFI
+    directives. This lets the assembler produce more compact info as it knows
+    the final offsets, yielding <a href="http://blog.mozilla.com/respindola/2011/05/12/cfi-directives/">much smaller executables</a> for some C++ applications.
+    If the system assembler doesn't support it, MC exands the directives when
+    the integrated assembler is not used.
 </li>
 
 <li>The code generator now supports vector "select" operations on vector
     comparisons, turning them into various optimized code sequences (e.g.
     using the SSE4/AVX "blend" instructions).</li>
-<li>XXX: Domain fixing pass is now target independent (ExecutionDepsFix pass). (Jakob)</li>
+<li>The SSE execution domain fix pass and the ARM NEON move fix pass have been
+    merged to a target independent execution dependency fix pass. This pass is
+    used to select alternative equivalent opcodes in a way that minimizes
+    execution domain crossings. Closely connected instructions are moved to
+    the same execution domain when possible. Targets can override the
+    <code>getExecutionDomain</code> and <code>setExecutionDomain</code> hooks
+    to use the pass.</li>
 </ul>
 </div>
 
@@ -1005,7 +1029,7 @@ be used to verify some algorithms.
 </ul>
 </div>
 
-  
+
 <!--=========================================================================-->
 <h3>
 <a name="MIPS">MIPS Target Improvements</a>
@@ -1021,7 +1045,7 @@ be used to verify some algorithms.
   <li>LE/BE MIPS32r1/r2 has been tested extensively.</li>
   <li>O32 ABI has been fully tested.</li>
   <li>MIPS backend has migrated to using the MC infrastructure for assembly printing. Initial support for direct object code emission has been implemented too.</li>
-  <li>Delay slot filler has been updated. Now it tries to fill delay slots with useful instructions instead of always filling them with NOPs.</li> 
+  <li>Delay slot filler has been updated. Now it tries to fill delay slots with useful instructions instead of always filling them with NOPs.</li>
   <li>Support for old-style JIT is complete.</li>
   <li>Support for old architectures (MIPS1 and MIPS2) has been removed.</li>
   <li>Initial support for MIPS64 has been added.</li>
@@ -1034,21 +1058,18 @@ be used to verify some algorithms.
 </h3>
 
 <div>
-  
+
   <p>
   The PTX back-end is still experimental, but is fairly usable for compute kernels
   in LLVM 3.0.  Most scalar arithmetic is implemented, as well as intrinsics to
   access the special PTX registers and sync instructions.  The major missing
   pieces are texture/sampler support and some vector operations.</p>
-  
+
   <p>That said, the backend is already being used for domain-specific languages
-  and works well with the <a href="http://www.pcc.me.uk/~peter/libclc/">libclc
-    library</a> to supply OpenCL built-ins.  With it, you can use Clang to compile
-  OpenCL code into PTX and execute it by loading the resulting PTX as a binary
-  blob using the nVidia OpenCL library.  It has been tested with several OpenCL
-  programs, including some from the nVidia GPU Computing SDK, and the performance
-  is on par with the nVidia compiler.</p>
-  
+  and can be used by Clang to
+  <a href="http://clang.llvm.org/docs/ReleaseNotes.html#opencl">compile OpenCL
+  C code</a> into PTX.</p>
+
 </div>
 
 <!--=========================================================================-->
@@ -1061,11 +1082,11 @@ be used to verify some algorithms.
 <ul>
 <li>Many PowerPC improvements have been implemented for ELF targets, including
    support for varargs and initial support for direct .o file emission.</li>
-  
+
 <li>MicroBlaze scheduling itineraries were added that model the
    3-stage and the 5-stage pipeline architectures. The 3-stage
-   pipeline model can be selected with <code>-mcpu=mblaze3</code> 
-   and the 5-stage pipeline model can be selected with 
+   pipeline model can be selected with <code>-mcpu=mblaze3</code>
+   and the 5-stage pipeline model can be selected with
    <code>-mcpu=mblaze5</code>.</li>
 
 </ul>
@@ -1086,10 +1107,10 @@ be used to verify some algorithms.
 <ul>
 <li>LLVM 3.0 removes support for reading LLVM 2.8 and earlier files, and LLVM
     3.1 will eliminate support for reading LLVM 2.9 files.  Going forward, we
-    aim for all future versions of LLVM to read bitcode files and .ll files 
+    aim for all future versions of LLVM to read bitcode files and .ll files
     produced by LLVM 3.0.</li>
 <li>Tablegen has been split into a library, allowing the clang tblgen pieces
-    now live in the clang tree.  The llvm version has been renamed to
+    to now live in the clang tree.  The llvm version has been renamed to
     llvm-tblgen instead of tblgen.</li>
   <li>The <code>LLVMC</code> meta compiler driver was removed.</li>
   <li>The unused PostOrder Dominator Frontiers and LowerSetJmp passes were removed.</li>
@@ -1134,10 +1155,15 @@ be used to verify some algorithms.
    LLVM API changes are:</p>
 
 <ul>
-  <li>The biggest and most pervasive change is that llvm::Types are no longer
-      returned or accepted as 'const' values.  Instead, just pass around
-      non-const Types.</li>
-  
+  <li>The biggest and most pervasive change is that the type system has been
+      rewritten: <code>PATypeHolder</code> and <code>OpaqueType</code> are gone,
+      and all APIs deal with <code>Type*</code> instead of <code>const
+      Type*</code>.  If you need to create recursive structures, then create a
+      named structure, and use <code>setBody()</code> when all its elements are
+      built.  Type merging and refining is gone too: named structures are not
+      merged with other structures, even if their layout is identical.  (of
+      course anonymous structures are still uniqued by layout).</li>
+
   <li><code>PHINode::reserveOperandSpace</code> has been removed. Instead, you
       must specify how many operands to reserve space for when you create the
       PHINode, by passing an extra argument
@@ -1211,15 +1237,6 @@ be used to verify some algorithms.
       use <code>DIBuilder::finalize()</code> at the end of translation unit to
       complete debugging information encoding.</li>
 
-  <li>The way the type system works has been
-      rewritten: <code>PATypeHolder</code> and <code>OpaqueType</code> are gone,
-      and all APIs deal with <code>Type*</code> instead of <code>const
-      Type*</code>.  If you need to create recursive structures, then create a
-      named structure, and use <code>setBody()</code> when all its elements are
-      built.  Type merging and refining is gone too: named structures are not
-      merged with other structures, even if their layout is identical.  (of
-      course anonymous structures are still uniqued by layout).</li>
-
   <li>TargetSelect.h moved to Support/ from Target/</li>
 
   <li>UpgradeIntrinsicCall no longer upgrades pre-2.9 intrinsic calls (for
@@ -1254,9 +1271,9 @@ be used to verify some algorithms.
    there isn't already one or ask on the <a
     href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev
     list</a>.</p>
-  
+
   <p>Known problem areas include:</p>
-  
+
 <ul>
   <li>The Alpha, Blackfin, CellSPU, MSP430, PTX, SystemZ and
       XCore backends are experimental, and the Alpha, Blackfin and SystemZ
@@ -1267,15 +1284,13 @@ be used to verify some algorithms.
       system assembler is required.  For more details, see the <a
       href="CodeGenerator.html#targetfeatures">Target Features Matrix</a>.
   </li>
-  
+
   <li>The C backend has numerous problems and is not being actively maintained.
     Depending on it for anything serious is not advised.</li>
 </ul>
 
 </div>
 
-</div>
-
 <!-- *********************************************************************** -->
 <h2>
   <a name="additionalinfo">Additional Information</a>
@@ -1300,10 +1315,10 @@ be used to verify some algorithms.
 <!--=========================================================================-->
 
 <!-- EH details: to be moved to a blog post:
 
-  
-  
+
+
+
 <p>One of the biggest changes is that 3.0 has a new exception handling
    system. The old system used LLVM intrinsics to convey the exception handling
    information to the code generator. It worked in most cases, but not
@@ -1416,11 +1431,11 @@ Builder.CreateResume(UnwindData);
 </div>
 
 
+
+
  -->
 
-  
+
 <!-- *********************************************************************** -->
 
 <hr>