X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FReleaseNotes.html;h=03d2db112fad6312dfa84e06cd9e004d762e7ae2;hb=418d360518811121ad9352af57fdd7ba58a4f917;hp=172eba872ca95d49699e9b8921840f4c4f6b02fe;hpb=9413de3c80aa06c6063fe81667326789cd2be49a;p=oota-llvm.git diff --git a/docs/ReleaseNotes.html b/docs/ReleaseNotes.html index 172eba872ca..03d2db112fa 100644 --- a/docs/ReleaseNotes.html +++ b/docs/ReleaseNotes.html @@ -4,11 +4,11 @@ - LLVM 1.9 Release Notes + LLVM 2.0 Release Notes -
LLVM 1.9 Release Notes
+
LLVM 2.0 Release Notes
  1. Introduction
  2. @@ -32,13 +32,10 @@

    This document contains the release notes for the LLVM compiler -infrastructure, release 1.9. Here we describe the status of LLVM, including any -known problems and major improvements from the previous release. The most -up-to-date version of this document (corresponding to LLVM CVS) can be found -on the LLVM releases web site. If you are -not reading this on the LLVM web pages, you should probably go there because -this document may be updated after the release.

    +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 LLVM +releases web site.

    For more information about LLVM, including information about the latest release, please check out the main LLVM @@ -46,7 +43,8 @@ web site. If you have questions or comments, the LLVM developer's mailing list is a good place to send them.

    -

    Note that if you are reading this file from CVS or the main LLVM web page, +

    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.

    @@ -61,67 +59,175 @@ href="http://llvm.org/releases/">releases page.

    -

    This is the tenth public release of the LLVM Compiler Infrastructure. This -release incorporates a large number of enhancements, new features, and bug -fixes. We recommend that all users of previous LLVM versions upgrade. -

    +

    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. +

    - +
    -

    LLVM 1.9 now fully supports the x86-64 instruction set on Mac OS/X, and -supports it on Linux (and other operating systems) when compiling in -static -mode. LLVM includes JIT support for X86-64, and supports both Intel EMT-64T -and AMD-64 architectures. The X86-64 instruction set permits addressing a -64-bit addressing space and provides the compiler with twice the -number of integer registers to use.

    -
    - - -
    -

    LLVM now includes liblto which can -be used to integrate LLVM Link-Time Optimization support into a native linker. -This allows LLVM .bc to transparently participate with linking an application, -even when some .o files are in LLVM form and some are not.

    +

    Changes to the LLVM IR itself:

    + +
      + +
    • 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.
    • +
    + +

    Major new features:

    + +
      + +
    • 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.
    • +
    +
    + - +
    -

    llvm-gcc4 now supports generating debugging info for Linux, Cygwin and MinGW. -This extends the PPC/Darwin and X86/Darwin debugging support available in the -1.8 release. DWARF is a standard debugging format used on many platforms.

    +

    New features include: +

    + +
      +
    • Precompiled Headers (PCH) are now supported.
    • + +
    • "#pragma packed" is now supported, as are the various features + described above (visibility, extern weak linkage, __thread, aliases, + etc).
    • + +
    • Tracking function parameter/result attributes is now possible.
    • + +
    • Many internal enhancements have been added, such as improvements to + NON_LVALUE_EXPR, arrays with non-zero base, structs with variable sized + fields, VIEW_CONVERT_EXPR, CEIL_DIV_EXPR, nested functions, and many other + things. This is primarily to supports non-C GCC front-ends, like Ada.
    • + +
    • It is simpler to configure llvm-gcc for linux.
    • + +
    +
    +
    -

    The mid-level optimizer is now faster and produces better code in many cases. - Significant changes include:

    +

    New features include: +

      -
    • LLVM includes a new 'predicate simplifier' pass, which - currently performs dominator tree-based optimizations.
    • -
    • The complete loop unroll pass now supports unrolling of - multiple basic block loops.
    • -
    • The 'globalopt' pass can now perform the scalar replacement of - aggregates transformation on some heap allocations.
    • -
    • The globalsmodref-aa alias analysis can now track 'indirect pointer - globals' more accurately.
    • -
    • The instruction combiner can now perform element propagation -analysis of vector expressions, eliminating computation of vector elements -that are not used.
    • +
    • The pass manager has been entirely + rewritten, making it significantly smaller, simpler, and more extensible. + Support has been added to run FunctionPasses interlaced with + CallGraphSCCPasses, we now support loop transformations + explicitly with LoopPass, and ModulePasses may now use the + result of FunctionPasses.
    • + +
    • 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.
    • + +
    • The Loop Strength Reduction pass has been improved, and we now support + sinking expressions across blocks to reduce register pressure.
    • + +
    • The -scalarrepl pass can now promote unions containing FP values + into a register, it can also handle unions of vectors of the same + size.
    • + +
    • The [Post]DominatorSet classes have been removed from LLVM and clients + switched to use the more-efficient ETForest class instead.
    • + +
    • The ImmediateDominator class has also been removed, and clients have been + switched to use DominatorTree instead.
    • + +
    • 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.
    • +
    @@ -132,96 +238,233 @@ Generator Enhancements

    -The LLVM Target-Independent code generator now supports more target features and -optimizes many cases more aggressively. New features include: +New features include:

    + +

    +Other improvements include: +

    + +

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

    -

    Further, several significant target-specific enhancements are included in -LLVM 1.9:

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

    X86-specific Code Generator Enhancements: +

    + +

    ARM-specific Code Generator Enhancements:

    + + + +

    PowerPC-specific Code Generator Enhancements:

    + +
    +
    Other Improvements
    -

    This release includes many other improvements, including improvements to - the optimizers and code generators (improving the generated code) changes to - speed up the compiler in many ways (improving algorithms and fine tuning - code), and changes to reduce the code size of the compiler itself.

    More specific changes include:

    -
    +
  3. LLVM no longer relies on static destructors to shut itself down. Instead, + it lazily initializes itself and shuts down when llvm_shutdown() is + explicitly called.
  4. - -
    -Significant API Changes in LLVM 1.9 +
  5. LLVM now has significantly fewer static constructors, reducing startup time. +
  6. + +
  7. Several classes have been refactored to reduce the amount of code that + gets linked into apps that use the JIT.
  8. + +
  9. Construction of intrinsic function declarations has been simplified.
  10. + +
  11. The gccas/gccld tools have been replaced with small shell scripts.
  12. + +
  13. Support has been added to llvm-test for running on low-memory + or slow machines (make SMALL_PROBLEM_SIZE=1).
  14. + +
    + +
    API Changes
    -

    Several significant API changes have been made. If you are maintaining -out-of-tree code, please be aware that:

    +

    LLVM 2.0 contains a revamp of the type system and several other significant +internal changes. If you are programming to the C++ API, be aware of the +following major changes:

    @@ -237,14 +480,14 @@ instructions.

    LLVM is known to work on the following platforms:

    @@ -289,8 +532,9 @@ components, please contact us on the -filetype=asm" (the default) is the only supported value for the -filetype llc option. @@ -307,9 +551,7 @@ components, please contact us on the inline - assembly that uses the X86 floating point stack. See the bug for details on workarounds on - Linux. + assembly that uses the X86 floating point stack. @@ -324,52 +566,41 @@ components, please contact us on the PowerPC backend does not correctly implement ordered FP comparisons. -
  15. The 64-bit PowerPC backend is not fully stable. If you desire PPC64 support, - please use mainline CVS LLVM, which has several important bug fixes.
  16. +
  17. The Linux PPC32/ABI support needs testing for the interpreter and static +compilation, and lacks support for debug information.
  18. - Known problems with the SPARC back-end + Known problems with the ARM back-end
    - Known problems with the C back-end + Known problems with the SPARC back-end
    @@ -415,36 +646,25 @@ programs.
  19. Defining vararg functions is not supported (but calling them is ok).
  20. +
  21. The Itanium backend has bitrotted somewhat.
  22. - Known problems with the ARM back-end + Known problems with the C back-end
    - -
    - Known problems with the LLVM Core -
    - -
    - - -
    @@ -456,15 +676,9 @@ ready for production use.
    -

    - -

    llvm-gcc4 is far more stable and produces better code than llvm-gcc3, but -does not currently support Link-Time -Optimization or C++ Exception Handling, -which llvm-gcc3 does.

    - -

    llvm-gcc4 does not support the GCC indirect -goto extension, but llvm-gcc3 does.

    +

    llvm-gcc4 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.

    @@ -474,87 +688,52 @@ goto extension, but llvm-gcc3 does.

    -