This is the second public release of the LLVM compiler infrastructure. This
-release implements the following new features:
+release is primarily a bugfix release, dramatically improving the C/C++
+front-end, and improving support for C++ in the LLVM core. This release also
+features a few new features, such as a simple profiler, support for Mac OS/X,
+and better interoperability with external source bases.
+
+
At this time, LLVM is known to correctly compile the SPEC CPU2000 benchmarks
+(X86 only), the Olden benchmarks, and the Ptrdist benchmarks along with
+many other programs. LLVM now also works with a fairly broad variety of
+C++ programs, though it has still received much less testing than the C
+front-end.
+
+
+
+Note that the Sparc and X86 backends do not currently support exception throwing
+or long jumping (including 253.perlbmk in SPEC). For these programs, you must
+use the C backend. Support for unwinding will be added in a future release.
+
+
+
+
+
+This release implements the following new features:
+
- A new
LLVM profiler, similar to gprof is available
-- LLVM and the C/C++ front-end now compile on Mac OSX! Mac OSX users can
+
- LLVM and the C/C++ front-end now compile on Mac OS/X! Mac OS/X users can
now explore the LLVM optimizer with the C backend (note that LLVM requires GCC
-3.3 on Mac OSX).
+3.3 on Mac OS/X).
- LLVM has been moved
into an 'llvm' C++ namespace, for easier integration with third-party
-code. Note that due to a bug in GDB 5.x, to debug namespacified LLVM code,
-you will need to upgrade to GDB 6.
+code. Note that lack of namespace handling in GDB 5.x, you will probably want to
+upgrade to GDB 6 or better to debug LLVM code.
-
The build system now copies Makefiles dynamically from the source tree to the
@@ -110,7 +132,11 @@ The configure script will now configure all projects placed in the
-
In this release, the following missing features were implemented:
+
+
+
+In this release, the following missing features were implemented:
+
- The interpreter does not support
@@ -124,8 +150,12 @@ files
-
In this release, the following Quality of Implementation issues were
-fixed:
+
+
+
+In this release, the following Quality of Implementation issues were
+fixed:
+
@@ -152,57 +182,69 @@ cases).
generated N^2 amounts of duplicated cleanup code in some cases.
-
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:
- [inliner] Inlining invoke with PHI in unwind target is broken
- [linker] linkonce globals should link successfully to external globals
-- C++ frontend can crash when compiling virtual base classes
-- C backend fails on constant cast expr to ptr-to-anonymous struct
-- #ident is not recognized by C frontend
- [constmerge] Constant merging pass merges constants with external linkage
-- C front-end miscompiles the builtin_expect intrinsic!
- [scalarrepl] Scalar Replacement of aggregates is decimating structures it shouldn't be
-- 1.0 precompiled libstdc++ does not include wchar_t support
-- llvmgcc asserts when compiling functions renamed with asm's
-- C frontend crashes on some programs with lots of types.
- [instcombine] Resolving invoke inserts cast after terminator
- llvm-as crashes when labels are used in phi nodes
- [build problem] Callgraph.cpp not pulled in from libipa.a
- Variables in scope of output setjmp
-calls should be volatile. Note that this does not effect correctness on
-many platforms, such as X86.
-- llvm-gcc crashes compiling global union initializer
-- C front-end crash on empty structure
-- CFrontend crashes when compiling C99 compound expressions
+calls should be volatile (Note that this does not effect correctness on
+many platforms, such as X86).
- [X86] Emission of global bool initializers broken
-- llvm-gcc infinite loops on "case MAXINT:"
-- [C++] Catch blocks make unparsable labels
-- [C++] Initializing array with constructable objects fail
- [gccld] The -r (relinking) option does not work correctly
- [bcreader] Cannot read shift constant expressions from bytecode file
- [lowersetjmp] Lowersetjmp pass breaks dominance properties!
-- llvm-gcc tries to add bools
- SymbolTable::getUniqueName is very inefficient
- [buildscripts] Building into objdir with .o in it fails
- [setjmp/longjmp] Linking C programs which use setjmp/longjmp sometimes fail with references to the C++ runtime library!
-- [c++] C++ Frontend lays out superclasses like anonymous bitfields!
- AsmParser Misses Symbol Redefinition Error
- gccld -Lfoo -lfoo fails to find ./foo/libfoo.a
- [bcreader] Incorrect cast causes misread forward constant references
-- Casting a string constant to void crashes llvm-gcc
- [adce] ADCE considers blocks without postdominators to be unreachable
-- C front-end miscompiles unsigned enums whose LLVM types are signed
- [X86] div and rem constant exprs invalidate iterators!
+- [vmcore] Symbol table doesn't rename colliding variables during type resolution
+- bugpoint must not pass -R<directory> to Mach-O linker
+- gccld produces a runner script that includes command-line options to load the necessary shared objects
+
+
+
+
Bugs in the C/C++ front-end:
+
+
+- C++ frontend can crash when compiling virtual base classes
+- C backend fails on constant cast expr to ptr-to-anonymous struct
+- #ident is not recognized by C frontend
+- C front-end miscompiles the builtin_expect intrinsic!
+- 1.0 precompiled libstdc++ does not include wchar_t support
+- llvmgcc asserts when compiling functions renamed with asm's
+- C frontend crashes on some programs with lots of types.
+- llvm-gcc crashes compiling global union initializer
+- C front-end crash on empty structure
+- CFrontend crashes when compiling C99 compound expressions
+- llvm-gcc infinite loops on "case MAXINT:"
+- [C++] Catch blocks make unparsable labels
+- [C++] Initializing array with constructable objects fail
+- llvm-gcc tries to add bools
+- [c++] C++ Frontend lays out superclasses like anonymous bitfields!
+- C front-end miscompiles unsigned enums whose LLVM types are signed
+- Casting a string constant to void crashes llvm-gcc
- [llvmg++] Enum types are incorrectly shrunk to smaller than 'int' size
- [llvmg++] Cannot use pointer to member to initialize global
-- [vmcore] Symbol table doesn't rename colliding variables during type resolution
- [llvm-gcc] ?: operator as lvalue not implemented
- [C/C++] Bogus warning about taking the address of 'register' variable
-- bugpoint must not pass -R<directory> to Mach-O linker
- crash assigning into an array in a struct which contains a bitfield.
- Oversized integer bitfields cause crash
-- gccld produces a runner script that includes command-line options to load the necessary shared objects
- [llvm-gcc] Bitfields & large array don't mix well
- [llvm-gcc] Complex division is not supported
- [llvm-gcc] Illegal union field reference
@@ -211,13 +253,8 @@ many platforms, such as X86.
- [llvm-gcc] crash on union initialization
- [llvm-g++] ?: expressions do not run correct number of destructors!
- [llvm-gcc] Pointer & constant results in invalid shift
-
-
At this time, LLVM is known to work properly with SPEC CPU 2000 (X86 only),
-the Olden benchmarks, and the Ptrdist benchmarks among many other programs.
-Note however that the Sparc and X86 backends do not currently support exception
-throwing or long jumping (including 253.perlbmk in SPEC). For these programs,
-you must use the C backend.
+
@@ -577,10 +614,6 @@ Infinity.
supported. This should not affect LLVM produced by the C or C++
frontends.
-