X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FReleaseNotes.html;h=bdaba71b7430d341e663a0b1df71528fd743ff45;hb=256be96457faf173de2ac3f8145077b7e6fb41ba;hp=035dace224d2b47e80bac383de6ed5810d13dbf5;hpb=f795ef0cd4b19aeb9b527c94c99763ae717035ba;p=oota-llvm.git diff --git a/docs/ReleaseNotes.html b/docs/ReleaseNotes.html index 035dace224d..bdaba71b743 100644 --- a/docs/ReleaseNotes.html +++ b/docs/ReleaseNotes.html @@ -14,7 +14,7 @@
  • Introduction
  • Sub-project Status Update
  • External Projects Using LLVM 2.5
  • -
  • What's New in LLVM?
  • +
  • What's New in LLVM 2.5?
  • Installation Instructions
  • Portability and Supported Platforms
  • Known Problems
  • @@ -58,12 +58,15 @@ current one. To see the release notes for a specific release, please see the target-specific intrinsics gold lto plugin pre-alloc splitter, strong phi elim - llc -enable-value-prop, propagation of value info (sign/zero ext info) from - one MBB to another + llc -enable-value-prop, propagation of value info + (sign/zero ext info) from one MBB to another debug info for optimized code interpreter + libffi postalloc scheduler: anti dependence breaking, hazard recognizer? +initial support for debug line numbers when optimization enabled, not useful in + 2.5 but will be for 2.6. + --> @@ -147,7 +154,7 @@ objects as well as an improved value-constraints subengine that does a much better job of reasoning about inequality relationships (e.g., x > 2) between variables and constants. -

    The set of checks performed by the static analyzer continue to expand, and +

    The set of checks performed by the static analyzer continues to expand, and future plans for the tool include full source-level inter-procedural analysis and deeper checks such as buffer overrun detection. There are many opportunities to extend and enhance the static analyzer, and anyone interested in working on @@ -166,15 +173,15 @@ The VMKit project is an implementation of a JVM and a CLI Virtual Machines (Microsoft .NET is an implementation of the CLI) using the Just-In-Time compiler of LLVM.

    -

    Following LLVM 2.5, VMKit has its first release ? that you can find on its +

    Following LLVM 2.5, VMKit has its second release that you can find on its webpage. The release includes bug fixes, cleanup and new features. The major changes are:

    @@ -202,11 +215,8 @@ Spec JVM98 is 6x faster (performance gain of 83%).

    -http://pure-lang.googlecode.com/ -

    - -

    -Pure is an algebraic/functional programming language based on term rewriting. +Pure +is an algebraic/functional programming language based on term rewriting. Programs are collections of equations which are used to evaluate expressions in a symbolic fashion. Pure offers dynamic typing, eager and lazy evaluation, lexical closures, a hygienic macro system (also based on term rewriting), @@ -231,16 +241,12 @@ it as a kind of functional scripting language for many application areas.

    -http://www.dsource.org/projects/ldc -

    - -

    -I'd like to inform that the LDC project (LLVM D -Compiler) is working with release 2.5 of LLVM. In fact we've required -2.5 in our trunk since the release was branched. -The improvements in 2.5 have fixed a lot of problems with LDC, more -specifically the new inline asm constraints, better debug info -support, general bugfixes :) and better x86-64 support have allowed +LDC is an implementation of +the D Programming Language using the LLVM optimizer and code generator. +The LDC project works great with the LLVM 2.5 release. General improvements in +this +cycle have included new inline asm constraint handling, better debug info +support, general bugfixes, and better x86-64 support. This has allowed some major improvements in LDC, getting us much closer to being as fully featured as the original DMD compiler from DigitalMars.

    @@ -252,17 +258,16 @@ fully featured as the original DMD compiler from DigitalMars.
    -

    http://code.roadsend.com/rphp

    - -

    Roadsend PHP is using LLVM for code generation. This is an open source -project. -

    +

    Roadsend PHP (rphp) is an open +source implementation of the PHP programming +language that uses LLVM for its optimizer, JIT, and static compiler. This is a +reimplementation of an earlier project that is now based on LLVM.

    - What's New in LLVM? + What's New in LLVM 2.5?
    @@ -284,73 +289,25 @@ in this section.

    LLVM 2.5 includes several major new capabilities:

    @@ -368,7 +325,18 @@ front-ends and driver with the LLVM optimizer and code generator. It currently includes support for the C, C++, Objective-C, Ada, and Fortran front-ends.

    @@ -376,14 +344,55 @@ includes support for the C, C++, Objective-C, Ada, and Fortran front-ends.

    -LLVM Core Improvements +LLVM IR and Core Improvements
    -

    New features include:

    +

    LLVM IR has several new features that are used by our existing front-ends and +can be useful if you are writing a front-end for LLVM:

    @@ -396,12 +405,26 @@ includes support for the C, C++, Objective-C, Ada, and Fortran front-ends.

    -

    In addition to a huge array of bug fixes and minor performance tweaks, this +

    In addition to a large array of bug fixes and minor performance tweaks, this release includes a few major enhancements and additions to the optimizers:

    @@ -409,7 +432,7 @@ release includes a few major enhancements and additions to the optimizers:

    @@ -419,21 +442,80 @@ infrastructure, which allows us to implement more aggressive algorithms and make it run faster:

      -
    • The type legalization logic has been completely rewritten, and is now -more powerful (it supports arbitrary precision integer types for example) -and hopefully more correct. -The type legalizer converts operations on types that are not natively -supported by the target machine into equivalent code sequences that only use -natively supported types. -The old type legalizer is still available and will be used if --disable-legalize-types is passed to llc. +
    • The Writing an LLVM Compiler +Backend document has been greatly expanded and is substantially more +complete.
    • + +
    • The SelectionDAG type legalization logic has been completely rewritten, is +now more powerful (it supports arbitrary precision integer types for example), +and is more correct in several corner cases. The type legalizer converts +operations on types that are not natively supported by the target machine into +equivalent code sequences that only use natively supported types. The old type +legalizer is still available (for now) and will be used if +-disable-legalize-types is passed to the code generator.
    • -
    • ?
    • +
    • The code generator now supports widening illegal vectors to larger legal +ones (for example, converting operations on <3 x float> to work on +<4 x float>) which is very important for common graphics +applications.
    • + +
    • The assembly printers for each target are now split out into their own +libraries that are separate from the main code generation logic. This reduces +the code size of JIT compilers by not requiring them to be linked in.
    • + +
    • The 'fast' instruction selection path (used at -O0 and for fast JIT + compilers) now supports accelerating codegen for code that uses exception + handling constructs.
    • + +
    • The optional PBQP register allocator now supports register coalescing.
    +
    + + +
    +

    New features of the X86 target include: +

    + +
      +
    • The llvm.returnaddress +intrinsic (which is used to implement __builtin_return_address) now +supports non-zero stack depths on X86.
    • + +
    • The X86 backend now supports code generation of vector shift operations +using SSE instructions.
    • + +
    • X86-64 code generation now takes advantage of red zone, unless the +-mno-red-zone option is specified.
    • + +
    • The X86 backend now supports using address space #256 in LLVM IR as a way of +performing memory references off the GS segment register. This allows a +front-end to take advantage of very low-level programming techniques when +targeting X86 CPUs. See test/CodeGen/X86/movgs.ll for a simple +example.
    • + +
    • The X86 backend now supports a -disable-mmx command line option to + prevent use of MMX even on chips that support it. This is important for cases + where code does not contain the proper llvm.x86.mmx.emms + intrinsics.
    • + +
    • The X86 JIT now detects the new Intel Core i7 and Atom chips and + auto-configures itself appropriately for the features of these chips.
    • + +
    • The JIT now supports exception handling constructs on Linux/X86-64 and + Darwin/x86-64.
    • + +
    • The JIT supports Thread Local Storage (TLS) on Linux/X86-32 but not yet on + X86-64.
    • +
    + +
    @@ -450,41 +532,25 @@ The old type legalizer is still available and will be used if types.
  • Function calls involving basic types work now.
  • Support for integer arrays.
  • -
  • Compiler can now emit libcalls for operations not support by m/c insns.
  • -
  • Support for both data and rom address spaces.
  • - +
  • The compiler can now emit libcalls for operations not supported by m/c +instructions.
  • +
  • Support for both data and ROM address spaces.
  • Things not yet supported:

    • Floating point.
    • -
    • Passing/returning aggregate types to/from functions.
    • +
    • Passing/returning aggregate types to and from functions.
    • Variable arguments.
    • Indirect function calls.
    • -
    • Interrupts/prgrams.
    • +
    • Interrupts/programs.
    • Debug info.
    • -
    - - - -
    -

    New target-specific features include: -

    - -
      -
    • ?
    • -
    - -
    -
    Improvements in LLVMC @@ -501,18 +567,18 @@ types. by default. The command llvmc --clang can be now used as a synonym to ccc. -
  • There is now a --check-graph option which is supposed to catch +
  • There is now a --check-graph option, which is supposed to catch common errors like multiple default edges, mismatched output/input language names and cycles. In general, these checks can't be done at compile-time because of the need to support plugins.
  • Plugins are now more flexible and can refer to compilation graph nodes and options defined in other plugins. To manage dependencies, a priority-sorting - mechanism was introduced. This change affects the TableGen file syntax; see the + mechanism was introduced. This change affects the TableGen file syntax. See the documentation for details.
  • Hooks can now be provided with arguments. The syntax is "$CALL(MyHook, - 'Arg1', 'Arg2', 'Arg #3')".
  • + 'Arg1', 'Arg2', 'Arg3')".
  • A new option type: multi-valued option, for options that take more than one argument (for example, "-foo a b c").
  • @@ -531,22 +597,6 @@ types.
    - - - -
    -

    New features include: -

    - -
      -
    • ?
    • - -
    - -
    -
    Major Changes and Removed Features @@ -560,7 +610,8 @@ from the previous release.

      -
    • ?
    • +
    • llvm-gcc defaults to -fno-math-errno on all X86 targets.
    • +
    @@ -568,10 +619,8 @@ from the previous release.

    API changes are:

      -
    • ?
    • -
    - -
  • ?
  • +
  • Some deprecated interfaces to create Instruction subclasses, that + were spelled with lower case "create," have been removed.
  • @@ -639,8 +688,8 @@ href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list.

    @@ -660,13 +709,14 @@ href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVMdev list.

  • The X86 backend generates inefficient floating point code when configured to generate code for systems that don't have SSE2.
  • Win64 code generation wasn't widely tested. Everything should work, but we - expect small issues to happen. Also, llvm-gcc cannot build mingw64 runtime - currently due + expect small issues to happen. Also, llvm-gcc cannot build the mingw64 + runtime currently due to several - bugs due to lack of support for the - 'u' inline assembly constraint and X87 floating point inline assembly.
  • + bugs and due to lack of support for + the + 'u' inline assembly constraint and for X87 floating point inline assembly.
  • The X86-64 backend does not yet support the LLVM IR instruction - va_arg. Currently, the llvm-gcc front-end supports variadic + va_arg. Currently, the llvm-gcc and front-ends support variadic argument constructs on X86-64 by lowering them manually.
  • @@ -697,7 +747,7 @@ compilation, and lacks support for debug information.
  • Thumb mode works only on ARMv6 or higher processors. On sub-ARMv6 processors, thumb programs can crash or produce wrong results (PR1388).
  • -
  • Compilation for ARM Linux OABI (old ABI) is supported, but not fully tested. +
  • Compilation for ARM Linux OABI (old ABI) is supported but not fully tested.
  • There is a bug in QEMU-ARM (<= 0.9.0) which causes it to incorrectly execute @@ -714,7 +764,7 @@ programs compiled with LLVM. Please use more recent versions of QEMU.
  • @@ -757,7 +807,7 @@ appropriate nops inserted to ensure restartability.
      -
    • The Itanium backend is highly experimental, and has a number of known +
    • The Itanium backend is highly experimental and has a number of known issues. We are looking for a maintainer for the Itanium backend. If you are interested, please contact the LLVMdev mailing list.
    @@ -776,7 +826,7 @@ appropriate nops inserted to ensure restartability. inline assembly code.
  • The C backend violates the ABI of common C++ programs, preventing intermixing between C++ compiled by the CBE and - C++ code compiled with llc or native compilers.
  • + C++ code compiled with llc or native compilers.
  • The C backend does not support all exception handling constructs.
  • The C backend does not support arbitrary precision integers.
  • @@ -833,9 +883,6 @@ itself, Qt, Mozilla, etc.

    • Fortran support generally works, but there are still several unresolved bugs in Bugzilla. Please see the tools/gfortran component for details.
    • - -
    • The Fortran front-end currently does not build on Darwin (without tweaks) - due to unresolved dependencies on the C front-end.
    @@ -845,12 +892,12 @@ itself, Qt, Mozilla, etc.

    -The llvm-gcc 4.2 Ada compiler works fairly well, however this is not a mature -technology and problems should be expected. +The llvm-gcc 4.2 Ada compiler works fairly well; however, this is not a mature +technology, and problems should be expected.