This document contains the release notes for the LLVM compiler
-infrastructure, release 1.3. Here we describe the status of LLVM, including any
+infrastructure, release 1.4. 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.3 web site. If you are
+href="http://llvm.cs.uiuc.edu/releases/1.4/">LLVM 1.4 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,12 +69,7 @@ href="http://llvm.cs.uiuc.edu/releases/">releases page.
-
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, adds many new features, fixes a few
-bugs, speeds up the compiler, and introduces a new (experimental)
-PowerPC code generator.
+
This is the fifth public release of the LLVM compiler infrastructure.
At this time, LLVM is known to correctly compile and run all C & C++
SPEC CPU95 & 2000 benchmarks, the Olden benchmarks, and the Ptrdist
@@ -91,67 +86,7 @@ with a broad variety of C++ programs.
-- The LLVM select instruction is
-now fully implemented and supported by all transformations, native code
-generators, and the interpreter.
-- 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.
-- Bugpoint can now debug arbitrary
-modes of llc and lli, by passing them command line flags (e.g.
--regalloc=linearscan).
-- 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.
-- The LLVM induction variable analysis routines have been rewritten.
-- LLVM now has new loop unrolling and loop unswitching passes.
-- The induction variable substitution pass performs linear function test
-replacement and exit value replacement optimizations.
-- LLVM now has first-class support for Accurate Garbage Collection, enabling the use
-of aggressive copying and generational collectors.
-- LLVM now includes a simple implementation of Andersen's interprocedural alias
-analysis algorithm.
-- Bugpoint can extract individual
-basic blocks to track down reduce miscompilation testcases.
-- LLVM and the C front-end now work under Win32 using the
-Cygwin runtime libraries.
-This includes the JIT compiler.
-- The LLVM code generator is now being documented.
-- LLVM includes a new tool, llvm-bcanalyzer, This tool
-can compute various statistics and dump information about LLVM bytecode
-encoding.
-- The LLVM bytecode file format is now
-documented.
-- LLVM now provides an llvm.isunordered intrinsic for efficient
-implementation of unordered floating point comparisons.
-- The llvmgcc front-end now supports the GCC builtins for ISO C99 floating
-point comparison macros (e.g., __builtin_islessequal).
-- We now generate HTML documentation and man pages
-for the tools from a single source (perl-style POD files).
-- The LLVM code generator can now dynamically load targets from shared
-objects.
-- LLVM now includes a "skeleton" target, which makes it easier to get
-started porting LLVM to new architectures.
-- The linear scan register allocator is now enabled by default in the
-target-independent code generator.
-- LLVM now includes a dead store elimination pass.
-- Bugpoint can now debug miscompilations that lead to the program going
-into an infinite loop.
-- LLVM now provides interfaces to support ML-style pattern matching on the
-LLVM IR.
-- LLVM now includes a context-sensitive mod/ref analysis
-for global variables, which is now enabled by default in gccld.
-- LLVM can now autogenerate assembly printers for code generators from the
-tablegen description of the target (before they were hand coded).
-- All LLVM tools will now respond to the
---version option which
-will tell you the version of LLVM on which the tool is based.
-- An experimental PowerPC backend has been added, capable of compiling several
-SPEC benchmarks.
+
@@ -165,18 +100,8 @@ In this release, the following missing features were implemented:
@@ -190,28 +115,7 @@ issues were fixed:
@@ -223,14 +127,7 @@ In this release, the following build problems were fixed:
@@ -242,51 +139,7 @@ improvements:
-- Fixed: [vmcore] Code quality problem
-due to long operand of getelementptr
-
-- The X86 backend now generates substantially better code for 64-bit integer
-and floating point operations.
-
-- The -inline pass no longer inlines mutually recursive functions until it
-hits the inlining threshold.
-
-- The -inline pass no longer misses obvious inlining opportunities just
-because the callee eventually calls into an external function.
-
-- The -simplifycfg pass can now "if convert" simple statements into the
-select instruction.
-
-- The -loopsimplify pass can now break natural loops with multiple backedges
-into multiple nested loops. This enables a variety of subsequent
-optimizations.
-
-- The -adce pass can now eliminate calls to functions that do not not write to
-memory.
-
-- The link-time optimizer now runs the -prune-eh pass (to remove unused
-exception handlers).
-
-- The link-time optimizer now runs dead store elimination and uses a simple
-interprocedural alias analysis.
-
-- 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)"
-
-- 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.
-
-- 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).
-
-- The SparcV9 backend no longers spills the null constant to the constant
-pool.
+
@@ -301,38 +154,13 @@ were fixed:
Bugs fixed in the LLVM Core:
-- [loopsimplify] Loop simplify
-incorrectly updates dominator information
-- [tailduplicate] DemoteRegToStack
-breaks SSA form
-- [X86] JIT miscompiles unsigned short
-to floating point cast
-- [vmcore] Linker causes erroneous
-asssertion
-- [adce] Crash handling unreachable
-code that unwinds
-- [sparcv9] LLC can't emit 2 functions
-of the same name, both having constant pools
-- [livevar] Live variables missed
-physical register use of aliased definition
-- [X86] stackifier crash on floating
-point setcc X, X
+
Bugs in the C/C++ front-end:
-- [llvmgcc] Variable length array
-indexing miscompiled
-- [llvmgcc] Crash on use of undeclared
-enum type
-- [llvmgcc] Errors handling function
-prototypes that take opaque structs by-value
-- [llvmgcc] Crash compiling variable
-length array of structures
-- [llvmgcc] miscompilation of staticly
-initialized unsigned bitfields
-- [llvm-gcc] Crash casting function to void
+