X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FReleaseNotes.html;h=d1759f1c539b26575e10168051abadd05aec3950;hb=6568fe876c4b3b2f1ee9f326b52369a9b5c944b2;hp=121ce140f095346ad52e295a8618086f1eb20098;hpb=98328745041aa3c352796347d89cd62d5b6ab808;p=oota-llvm.git diff --git a/docs/ReleaseNotes.html b/docs/ReleaseNotes.html index 121ce140f09..d1759f1c539 100644 --- a/docs/ReleaseNotes.html +++ b/docs/ReleaseNotes.html @@ -3,33 +3,33 @@ - LLVM 1.2 Release Notes + LLVM 1.3 Release Notes -
- LLVM 1.2 Release Notes -
+
LLVM 1.3 Release Notes
  1. Introduction
  2. What's New?
  3. +
  4. Installation Instructions
  5. Portability and Supported Platforms
  6. -
  7. Installation Instructions
  8. Known Problems
  9. Additional Information
-
-

Written by the LLVM team

+

+

Written by the LLVM team

@@ -41,10 +41,10 @@

This document contains the release notes for the LLVM compiler -infrastructure, release 1.2. Here we describe the status of LLVM, including any +infrastructure, release 1.3. Here we describe the status of LLVM, including any known problems and bug fixes from the previous release. The most up-to-date version of this document can be found on the LLVM 1.2 web site. If you are +href="http://llvm.cs.uiuc.edu/releases/1.3/">LLVM 1.3 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.

@@ -69,133 +69,246 @@ href="http://llvm.cs.uiuc.edu/releases/">releases page.

-

This is the third public release of the LLVM compiler infrastructure. -

+

This is the fourth public release of the LLVM compiler infrastructure. This +release primarily improves the performance of the +code produced by all aspects of the LLVM compiler and adds many new features, and fixes a few +bugs as well.

-

At this time, LLVM is known to correctly compile and run all C -& C++ SPEC CPU2000 benchmarks, the Olden benchmarks, and the Ptrdist -benchmarks. It has also been used to compile many other programs. LLVM -now also works with a broad variety of C++ programs, though it has still -received less testing than the C front-end. -

+

At this time, LLVM is known to correctly compile and run all C & C++ +SPEC CPU2000 benchmarks, the Olden benchmarks, and the Ptrdist benchmarks. It +has also been used to compile many other programs. LLVM now also works +with a broad variety of C++ programs, though it has still received less testing +than the C front-end.

+
-This release implements the following new features: +This release implements the following new features:
+
+
    -
  1. A new LLVM source-level debugger has been started.
  2. -
  3. +
  4. The LLVM select instruction is +now fully implemented and supported by all transformations, native code +generators, and the interpreter.
  5. +
  6. Bugpoint can now narrow down code-generation bugs to a loop nest, where +before it could only narrow them down to a function being miscompiled.
  7. +
  8. Bugpoint can now debug arbitrary +modes of llc and lli, by passing them command line flags (e.g., +-regalloc=linearscan, -enable-correct-eh-support, etc.)
  9. +
  10. The Control Flow Graph in the native code generators is no longer +constrained to be the same as the CFG for the LLVM input code.
  11. +
  12. The LLVM induction variable analysis routines have been rewritten.
  13. +
  14. LLVM now has new loop unrolling and loop unswitching passes.
  15. +
  16. The induction variable substitution pass performs linear function test +replacement and exit value replacement optimizations.
  17. +
  18. LLVM now has first-class support for Accurate Garbage Collection, enabling the use +of aggressive copying and generational collectors.
  19. +
  20. LLVM now includes an implementation of Andersen's interprocedural alias +analysis algorithm.
  21. +
  22. Bugpoint can extract individual +basic blocks to track down reduce miscompilation testcases.
  23. +
  24. LLVM and the C front-end now work under Win32 using the +Cygwin runtime libraries. +This includes the JIT compiler.
  25. +
  26. The LLVM code generator is now being documented.
  27. +
  28. There is a new tool, llvm-bcanalyzer. This tool can compute basic +statistics and bytecode density statistics on a module or function basis and +also dump out bytecode in a textual format that is lower level than assembly +(values are not resolved from slot numbers). It should only be of interest to +(a) those who are working to improve the bytecode format and (b) those who +really want to understand or document the details of the bytecode format.
  29. +
  30. The LLVM Bytecode file format is now +documented.
  31. +
  32. LLVM now provides an llvm.isunordered intrinsic for efficient +implementation of unordered floating point comparisons.
  33. +
  34. The llvmgcc front-end now supports the GCC builtins for ISO C99 floating +point comparison macros (e.g., __builtin_islessequal).
  35. +
  36. Now that there are more source files than can fit on a 32Kbyte command +line (Linux's limit), there's a new utility for searching the sources. The +llvmgrep tool in the utils directory combines an egrep and a find without +passing filenames through the command line. This improves performance +slightly. Simply run llvmgrep like you might egrep but leave off the file +names.
  37. +
  38. We now generate HTML documentation and man pages for the tools from a single +source (perl-style POD files).
  39. +
  40. The LLVM code generator can now dynamically load targets from shared +objects.
+
+
In this release, the following missing features were implemented:
+
-In this release, the following Quality of Implementation issues were fixed: +In this release, the following Quality of Implementation +issues were fixed:
-
    + +
    -LLVM gained several improvements to its build and installation -infrastructure in this release. There is now -a autoconf/AutoRegen.sh script that you can run to rebuild the -configure script and its associated files -(Bug 105) as well as beta support -for "make install" (Bug 208 and -Bug 220) and RPM package generation -(Bug 203). -Additionally, in this release, the following build problems were fixed: +In this release, the following build problems were fixed:
    +
    -In this release, the following Code Quality issues were fixed: +This release includes the following Code Quality +improvements:
    +
      -
    1. [loopsimplify] Many pointless phi nodes are created
    2. -
    3. The X86 backend didn't generate fchs to negate floating point numbers
    4. -
    5. The X86 backend didn't expand memcpy() into the rep movs instruction
    6. -
    7. [x86] wierd stack/frame pointer manipulation
    8. -
    +
  1. Fixed: [vmcore] Code quality problem +due to long operand of getelementptr
  2. + +
  3. The X86 backend now generates substantially better code for 64-bit integer +and floating point operations.
  4. + +
  5. The -inline pass no longer inlines mutually recursive functions until it +hits the inlining threshold.
  6. + +
  7. The -inline pass no longer misses obvious inlining opportunities just +because the callee eventually calls into an external function.
  8. + +
  9. The -simplifycfg pass can now "if convert" simple statements into the new +select instruction.
  10. + +
  11. The -loopsimplify pass can now break natural loops with multiple backedges +into multiple nested loops. This enables a variety of subsequent +optimizations.
  12. + +
  13. The -adce pass can now eliminate calls to functions that do not not write to +memory.
  14. + +
  15. The link-time optimizer now runs the -prune-eh pass (to remove unused +exception handlers).
  16. + +
  17. The -simplifycfg pass can now eliminate simple correlated branches (such as +"if (A < B && A < B)", and can turn short-circuiting +operators into the strict versions when useful (such as "if (A < B || A +> C)" into "if (A < B | A > C)"
  18. +
  19. LLVM now has infrastructure for (simple and sparse conditional) constant +propagation of function calls. It currently supports a few math library +functions like sqrt/sin/cos/etc.
  20. + +
  21. The C backend now emits Syntactic +loops in the code to help C compilers whose optimizers do not recognize +loops formed from gotos (like GCC).
  22. + +
  23. Fixed: [sparcv9] null +often spilled to constant pool.
  24. +
+
-In this release, the following bugs in the previous release were fixed: +In this release, the following bugs in the previous release +were fixed:
+
+

Bugs in the LLVM Core:

    -
  1. [licm] LICM promotes volatile memory -locations to registers
  2. -
  3. [licm] Memory read after free causes -infrequent crash
  4. -
  5. [indvars] Induction variable -canonicalization always makes 32-bit indvars
  6. -
  7. [constantmerge] Merging globals can -cause use of invalid pointers!
  8. -
  9. [bcreader] Bytecode reader misreads 'long -9223372036854775808'!
  10. -
  11. Tail duplication does not update SSA form correctly.
  12. -
  13. VMCore mishandles double -0.0
  14. -
  15. [X86] X86 backend code generates -0.0 as +0.0
  16. -
  17. [loopsimplify] Loopsimplify incorrectly updates dominator information
  18. -
  19. [pruneeh] -pruneeh pass removes invoke instructions it shouldn't
  20. -
  21. [sparc] Boolean constants are emitted as true and false
  22. -
  23. Tablegen aborts on errors
  24. -
  25. [inliner] Error inlining intrinsic calls into invoke instructions
  26. -
  27. Linking weak and strong global variables is dependent on link order
  28. +
  29. [loopsimplify] Loop simplify +incorrectly updates dominator information
  30. +
  31. [tailduplicate] DemoteRegToStack +breaks SSA form
  32. +
  33. [X86] JIT miscompiles unsigned short +to floating point cast
  34. +
  35. [jit] abort, don't warn, when +missing external functions encountered
  36. +
  37. [vmcore] Linker causes erroneous +asssertion
  38. +
  39. [adce] Crash handling unreachable +code that unwinds
  40. +
  41. [sparcv9] LLC can't emit 2 functions +of the same name, both having constant pools
  42. +
  43. [livevar] Live variables missed +physical register use of aliased definition
  44. +
  45. Verifier misses malformed switch +instruction
  46. +
  47. [asmwriter] Asm writer aborts if +an instruction is not embedded into a function
  48. +
  49. [X86] stackifier crash on floating +point setcc X, X
- -

Bugs in the C/C++ front-end:

    -
  1. Need weak linkage on memory -management functions in libc runtime to allow them to be overriden
  2. -
  3. [llvm-gcc] asserts when an extern inline function is redefined
  4. -
  5. [llvmg++] Dynamically initialized constants cannot be marked 'constant'
  6. -
  7. [llvmgcc] floating-point unary minus is incorrect for +0.0
  8. -
  9. [llvm-gcc] miscompilation of 'X = Y = Z' with aggregate values
  10. -
  11. [llvmgcc] Structure copies result in a LOT of code
  12. -
  13. [llvm-gcc] miscompilation when a function is re-declared as static
  14. +
  15. [llvmgcc] Variable length array +indexing miscompiled
  16. +
  17. [llvmgcc] Crash on use of undeclared +enum type
  18. +
  19. [llvmgcc] Errors handling function +prototypes that take opaque structs by-value
  20. +
  21. [llvmgcc] Crash compiling variable +length array of structures
  22. +
  23. [llvmgcc] miscompilation of staticly +initialized unsigned bitfields
  24. +
  25. [llvm-gcc] Crash casting function to void
-
@@ -206,15 +319,46 @@ management functions in libc runtime to allow them to be overriden
-

LLVM has been extensively tested on Intel and AMD machines running Red -Hat Linux and FreeBSD. It has also been tested on Sun UltraSPARC workstations running Solaris 8. -Additionally, -LLVM works on Mac OS X 10.3 and above, but only with the C backend or -interpreter (no native backend for the PowerPC is available yet). -The core LLVM infrastructure uses "autoconf" for portability, so hopefully we -work on more platforms than that. However, it is likely that we -missed something and that minor porting is required to get LLVM to work on -new platforms. We welcome portability patches and error messages.

+

LLVM is known to work in the following platforms:

+ + + + +

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.

+ +

Note that the LLVM build system does not currently support directories with +spaces on them when running on Win32/cygwin. We strongly recommend running +LLVM and the C frontend out of a top-level directory without spaces (e.g., +/cygdrive/c/llvm). Also, make sure to install all of the +cygwin packages. By default, many important tools are not installed that +are needed by the LLVM build process or test suite (e.g., /bin/time).

+ +
+ + +
+In this release, the following portability problems were fixed: +
+ +
+ +
    +
  1. warnings compiling Stacker compiler +on Mac OS X
  2. +
  3. Archive file reader doesn't +understand abbreviated names in headers
  4. +
@@ -234,11 +378,30 @@ there isn't already one.

- - + +
+ Experimental features included with this release +
+ +
+ +

The following components of this LLVM release are either untested, known to +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.

+ + +
@@ -261,13 +424,11 @@ corrupted.
  • Linking in static archive files (.a files) is very slow (there is no symbol table in the archive).
  • -
  • LLVM cannot handle structures with -more than 256 elements.
  • - -
  • The gccld program does not link objects/archives in the order specified on the command line.
  • +
  • The gccld program does not link +objects/archives in the order specified on the command line.
  • The lower-invoke pass does not mark -values live across a setjmp as volatile. This missing feature only effects +values live across a setjmp as volatile. This missing feature only affects targets whose setjmp/longjmp libraries do not save and restore the entire register file.
  • @@ -292,11 +453,13 @@ register file. } -
  • -Initialization of global union variables can only be done -with the largest -union member. -
  • +
  • Initialization of global union variables can only be done with the largest union +member.
  • + +
  • [llvm-gcc] Error when an implicitly +external function is re-declared as static
  • +
    @@ -329,7 +492,6 @@ work: the following extensions are known to not be supported:
    1. Local Labels: Labels local to a block.
    2. -
    3. Labels as Values: Getting pointers to labels and computed gotos.
    4. Nested Functions: As in Algol and Pascal, lexical scoping of functions.
    5. Constructing Calls: Dispatching a call to another function.
    6. Extended Asm: Assembler instructions with C expressions as operands.
    7. @@ -393,16 +555,18 @@ work: We support all builtins which have a C language equivalent (e.g., __builtin_cos), __builtin_alloca, __builtin_types_compatible_p, __builtin_choose_expr, - __builtin_constant_p, and __builtin_expect (ignored). - + __builtin_constant_p, and __builtin_expect + (currently ignored). We also support builtins for ISO C99 floating + point comparison macros (e.g., __builtin_islessequal).

    The following extensions are known to be supported:

      +
    1. Labels as Values: Getting pointers to labels and computed gotos.
    2. Statement Exprs: Putting statements and declarations inside expressions.
    3. Typeof: typeof: referring to the type of an expression.
    4. -
    5. Lvalues: Using ?:, "," and casts in lvalues.
    6. +
    7. Lvalues: Using ?:, "," and casts in lvalues.
    8. Conditionals: Omitting the middle operand of a ?: expression.
    9. Long Long: Double-word integers.
    10. Complex: Data types for complex numbers.
    11. @@ -509,20 +673,27 @@ href="http://gcc.gnu.org/gcc-3.4/changes.html">GCC 3.4 release notes.
      - Known problems with the Sparc back-end + Known problems with the SparcV9 back-end