X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FReleaseNotes.html;h=56dd66a21aa53860577177cb78dd5c89a3456dc3;hb=9d2c9bd11377ecac24e5c7c6198153375ac72562;hp=03d2db112fad6312dfa84e06cd9e004d762e7ae2;hpb=669ed45029765df223ba7e9cdc242f62c17497e4;p=oota-llvm.git diff --git a/docs/ReleaseNotes.html b/docs/ReleaseNotes.html index 03d2db112fa..56dd66a21aa 100644 --- a/docs/ReleaseNotes.html +++ b/docs/ReleaseNotes.html @@ -1,17 +1,19 @@ + - LLVM 2.0 Release Notes + LLVM 2.3 Release Notes -
LLVM 2.0 Release Notes
+
LLVM 2.3 Release Notes
  1. Introduction
  2. +
  3. Major Changes and Sub-project Status
  4. What's New?
  5. Installation Instructions
  6. Portability and Supported Platforms
  7. @@ -23,6 +25,8 @@

    Written by the LLVM Team

    + +

    Introduction @@ -32,7 +36,7 @@

    This document contains the release notes for the LLVM compiler -infrastructure, release 2.0. 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 LLVM releases web site.

    @@ -44,430 +48,494 @@ href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM developer's mailing list is a good place to send them.

    Note that if you are reading this file from a Subversion checkout or the -main LLVM web page, -this document applies to the next release, not the current one. To see -the release notes for the current or previous releases, see the releases page.

    +main LLVM web page, this document applies to the next release, not the +current one. To see the release notes for a specific releases, please see the +releases page.

    -

    This is the eleventh public release of the LLVM Compiler Infrastructure. -Being the first major release since 1.0, this release is different in several -ways from our previous releases:

    - -
      -
    1. We took this as an opportunity to -break backwards compatibility with the LLVM 1.x bytecode and .ll file format. -If you have LLVM 1.9 .ll files that you would like to upgrade to LLVM 2.x, we -recommend the use of the stand alone llvm-upgrade -tool (which is included with 2.0). We intend to keep compatibility with .ll -and .bc formats within the 2.x release series, like we did within the 1.x -series.
    2. -
    3. There are several significant change to the LLVM IR and internal APIs, such - as a major overhaul of the type system, the completely new bitcode file - format, etc (described below).
    4. -
    5. We designed the release around a 6 month release cycle instead of the usual - 3-month cycle. This gave us extra time to develop and test some of the - more invasive features in this release.
    6. -
    7. LLVM 2.0 no longer supports the llvm-gcc3 front-end. Users are required to - upgrade to llvm-gcc4. llvm-gcc4 includes many features over - llvm-gcc3, is faster, and is much easier to - build from source.
    8. -
    - -

    Note that while this is a major version bump, this release has been - extensively tested on a wide range of software. It is easy to say that this - is our best release yet, in terms of both features and correctness. This is - the first LLVM release to correctly compile and optimize major software like - LLVM itself, Mozilla/Seamonkey, Qt 4.3rc1, kOffice, etc out of the box on - linux/x86. -

    +

    This is the fourteenth public release of the LLVM Compiler Infrastructure. +It includes a large number of features and refinements from LLVM 2.2.

    + + - -
    -

    Changes to the LLVM IR itself:

    +

    LLVM 2.3 no longer supports llvm-gcc 4.0, it has been replaced with + llvm-gcc 4.2.

    -
      +

      LLVM 2.3 no longer includes the llvm-upgrade tool. It 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. One nice impact of this is that the LLVM + regression test suite no longer depends on llvm-upgrade, which makes it run + faster.

      -
    • Integer types are now completely signless. This means that we - have types like i8/i16/i32 instead of ubyte/sbyte/short/ushort/int - etc. LLVM operations that depend on sign have been split up into - separate instructions (PR950). This - eliminates cast instructions that just change the sign of the operands (e.g. - int -> uint), which reduces the size of the IR and makes optimizers - simpler to write.
    • - -
    • Integer types with arbitrary bitwidths (e.g. i13, i36, i42, i1057, etc) are - now supported in the LLVM IR and optimizations (PR1043). However, neither llvm-gcc - (PR1284) nor the native code generators - (PR1270) support non-standard width - integers yet.
    • - -
    • 'Type planes' have been removed (PR411). - It is no longer possible to have two values with the same name in the - same symbol table. This simplifies LLVM internals, allowing significant - speedups.
    • - -
    • Global variables and functions in .ll files are now prefixed with - @ instead of % (PR645).
    • - -
    • The LLVM 1.x "bytecode" format has been replaced with a - completely new binary representation, named 'bitcode'. The Bitcode Format brings a - number of advantages to the LLVM over the old bytecode format: it is denser - (files are smaller), more extensible, requires less memory to read, - is easier to keep backwards compatible (so LLVM 2.5 will read 2.0 .bc - files), and has many other nice features.
    • - -
    • Load and store instructions now track the alignment of their pointer - (PR400). This allows the IR to - express loads that are not sufficiently aligned (e.g. due to '#pragma - packed') or to capture extra alignment information.
    • -
    +

    The llvm2cpp tool has been folded into llc, use + llc -march=cpp instead of llvm2cpp.

    -

    Major new features:

    +

    LLVM API Changes:

      +
    • Several core LLVM IR classes have migrated to use the + 'FOOCLASS::Create(...)' pattern instead of 'new + FOOCLASS(...)' (e.g. where FOOCLASS=BasicBlock). We hope to + standardize on FOOCLASS::Create for all IR classes in the future, + but not all of them have been moved over yet.
    • +
    • LLVM 2.3 renames the LLVMBuilder and LLVMFoldingBuilder classes to + IRBuilder. +
    • +
    • MRegisterInfo was renamed to + + TargetRegisterInfo.
    • +
    • The MappedFile class is gone, please use + + MemoryBuffer instead.
    • +
    • The '-enable-eh' flag to llc has been removed. Now code should + encode whether it is safe to omit unwind information for a function by + tagging the Function object with the 'nounwind' attribute.
    • +
    • The ConstantFP::get method that uses APFloat now takes one argument + instead of two. The type argument has been removed, and the type is + now inferred from the size of the given APFloat value.
    • -
    • A number of ELF features are now supported by LLVM, including 'visibility', - extern weak linkage, Thread Local Storage (TLS) with the __thread - keyword, and symbol aliases. - Among other things, this means that many of the special options needed to - configure llvm-gcc on linux are no longer needed, and special hacks to build - large C++ libraries like Qt are not needed.
    • - -
    • LLVM now has a new MSIL backend. llc -march=msil will now turn LLVM - into MSIL (".net") bytecode. This is still fairly early development - with a number of limitations.
    • - -
    • A new llvm-upgrade tool - exists to migrates LLVM 1.9 .ll files to LLVM 2.0 syntax.
    -
    + + - -
    -

    New features include: +

    +The core LLVM 2.3 distribution currently consists of code from the core LLVM +repository (which roughly contains the LLVM optimizer, code generators and +supporting tools) and the llvm-gcc repository. In addition to this code, the +LLVM Project includes other sub-projects that are in development. The two which +are the most actively developed are the new vmkit Project +and the Clang Project.

    +
    - -
    - -
    Optimizer -Improvements
    + +
    +Clang +
    -

    New features include: -

    -
    -
  8. The [Post]DominatorSet classes have been removed from LLVM and clients - switched to use the more-efficient ETForest class instead.
  9. -
  10. The ImmediateDominator class has also been removed, and clients have been - switched to use DominatorTree instead.
  11. + +
    + What's New? +
    + -
  12. The predicate simplifier pass has been improved, making it able to do - simple value range propagation and eliminate more conditionals. However, - note that predsimplify is not enabled by default in llvm-gcc.
  13. +
    - - +

    LLVM 2.3 includes a huge number of bug fixes, performance tweaks and minor +improvements. Some of the major improvements and new features are listed in +this section. +

    - -
    Code -Generator Enhancements
    + +
    +Major New Features +
    -

    -New features include: -

    + +

    LLVM 2.3 includes several major new capabilities:

    -
  14. Support now exists for very simple (but still very useful) - rematerialization the register allocator, enough to move - instructions like "load immediate" and constant pool loads.
  15. +
    -
  16. Switch statement lowering is significantly better, improving codegen for - sparse switches that have dense subregions, and implemented support - for the shift/and trick.
  17. -
  18. LLVM now supports tracking physreg sub-registers and super-registers - in the code generator, and includes extensive register - allocator changes to track them.
  19. + +
    +llvm-gcc 4.2 Improvements +
    -
  20. There is initial support for virtreg sub-registers - (PR1350).
  21. +
    - +

    LLVM 2.3 fully supports the llvm-gcc 4.2 front-end, and includes support +for the C, C++, Objective-C, Ada, and Fortran front-ends.

    -Other improvements include: -

    - -
  22. Codegen support for Zero-cost DWARF exception handling has been added (PR592). It is mostly - complete and just in need of continued bug fixes and optimizations at - this point. However, support in llvm-g++ is disabled with an - #ifdef for the 2.0 release (PR870).
  23. +
    -
  24. The code generator now has more accurate and general hooks for - describing addressing modes ("isLegalAddressingMode") to - optimizations like loop strength reduction and code sinking.
  25. -
  26. Progress has been made on a direct Mach-o .o file writer. Many small - apps work, but it is still not quite complete.
  27. + +
    +LLVM Core Improvements +
    - +
    +

    New features include: +

    -

    In addition, the LLVM target description format has itself been extended in - several ways:

    - - +
    - -
    Target-Specific -Improvements
    + +
    +Optimizer Improvements +
    -

    X86-specific Code Generator Enhancements: -

    +

    In addition to a huge array of bug fixes and minor performance tweaks, the +LLVM 2.3 optimizers support a few major enhancements:

    -

    ARM-specific Code Generator Enhancements:

    +
  28. Loop index set splitting on by default. +This transformation hoists conditions from loop bodies and reduces a loop's +iteration space to improve performance. For example,

    -
      -
    • The ARM code generator is now stable and fully supported.
    • +
      +
      +for (i = LB; i < UB; ++i)
      +  if (i <= NV)
      +    LOOP_BODY
      +
      +
      -
    • 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), inline asm support, weak linkage support, static - ctor/dtor support and many bug fixes.
    • - -
    • Added support for Thumb code generation (llc -march=thumb).
    • +

      is transformed into:

      -
    • The ARM backend now supports the ARM AAPCS/EABI ABI and PIC codegen on - arm/linux.
    • +

      +
      +NUB = min(NV+1, UB)
      +for (i = LB; i < NUB; ++i)
      +  LOOP_BODY
      +
      +
      +

      + -
    • Several bugs were fixed for DWARF debug info generation on arm/linux.
    • +
    • LLVM now includes a new memcpy optimization pass which removes +dead memcpy calls, unneeded copies of aggregates, and performs +return slot optimization. The LLVM optimizer now notices long sequences of +consecutive stores and merges them into memcpy's where profitable.
    • + +
    • Alignment detection for vector memory references and for memcpy and +memset is now more aggressive.
    • + +
    • The Aggressive Dead Code Elimination (ADCE) optimization has been rewritten +to make it both faster and safer in the presence of code containing infinite +loops. Some of its prior functionality has been factored out into the loop +deletion pass, which is safe for infinite loops. The new ADCE pass is +no longer based on control dependence, making it run faster.
    • + +
    • The 'SimplifyLibCalls' pass, which optimizes calls to libc and libm + functions for C-based languages, has been rewritten to be a FunctionPass + instead a ModulePass. This allows it to be run more often and to be + included at -O1 in llvm-gcc. It was also extended to include more + optimizations and several corner case bugs were fixed.
    • + +
    • LLVM now includes a simple 'Jump Threading' pass, which attempts to simplify + conditional branches using information about predecessor blocks, simplifying + the control flow graph. This pass is pretty basic at this point, but + catches some important cases and provides a foundation to build on.
    • + +
    • Several corner case bugs which could lead to deleting volatile memory + accesses have been fixed.
    • +
    • Several optimizations have been sped up, leading to faster code generation + with the same code quality.
    • +
    -

    PowerPC-specific Code Generator Enhancements:

    +
  29. - + +
    +Other Improvements
    +
    +

    New features include: +

    + + + +
    @@ -480,20 +548,19 @@ following major changes:

    LLVM is known to work on the following platforms:

    -

    The core LLVM infrastructure uses -GNU autoconf to adapt itself +

    The core LLVM infrastructure uses GNU autoconf to adapt itself 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.

    @@ -527,17 +594,13 @@ there isn't already one.

    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.

    +components, please contact us on the LLVMdev list.

    @@ -550,8 +613,23 @@ components, please contact us on the @@ -564,8 +642,6 @@ components, please contact us on the @@ -581,11 +657,12 @@ compilation, and lacks support for debug information. @@ -628,25 +705,9 @@ appropriate nops inserted to ensure restartability.
    @@ -659,8 +720,12 @@ programs.
    @@ -668,123 +733,29 @@ programs.
    - Known problems with the C front-end + Known problems with the llvm-gcc C front-end
    - -
    Bugs
    -
    -

    llvm-gcc4 does not currently support Link-Time -Optimization on most platforms "out-of-the-box". Please inquire on the +

    llvm-gcc does not currently support Link-Time +Optimization on most platforms "out-of-the-box". Please inquire on the llvmdev mailing list if you are interested.

    -
    - - -
    - Notes -
    - -
    - - -

    If you run into GCC extensions which have not been included in any of these -lists, please let us know (also including whether or not they work).

    +

    If you run into GCC extensions which are not supported, please let us know. +

    - Known problems with the C++ front-end + Known problems with the llvm-gcc C++ front-end
    @@ -794,33 +765,49 @@ tested and works for a number of non-trivial programs, including LLVM itself, Qt, Mozilla, etc.

    + +
    + Known problems with the llvm-gcc Ada front-end +
    + +
    +The llvm-gcc 4.2 Ada compiler works fairly well, however this is not a mature +technology and problems should be expected. + +
    @@ -851,7 +838,7 @@ lists.

    Valid CSS! Valid HTML 4.01! + src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"> LLVM Compiler Infrastructure
    Last modified: $Date$