diff --git a/docs/ReleaseNotes-2.6.html b/docs/ReleaseNotes-2.6.html
index ceb7e97838a..31ac97a3fad 100644
--- a/docs/ReleaseNotes-2.6.html
+++ b/docs/ReleaseNotes-2.6.html
@@ -92,11 +92,10 @@ Almost dead code.
The LLVM 2.6 distribution currently consists of code from the core LLVM
-repository —which roughly includes the LLVM optimizers, code generators
-and supporting tools — and the llvm-gcc repository. In addition to this
-code, the LLVM Project includes other sub-projects that are in development. The
-two which are the most actively developed are the Clang
-Project and the VMKit Project.
+repository (which roughly includes the LLVM optimizers, code generators
+and supporting tools), the Clang repository and the llvm-gcc repository. In
+addition to this code, the LLVM Project includes other sub-projects that are in
+development. Here we include updates on these subprojects.
@@ -112,8 +111,12 @@ Project and the VMKit Project.
The Clang project is an effort to build
a set of new 'LLVM native' front-end technologies for the C family of languages.
LLVM 2.6 is the first release to officially include Clang, and it provides a
-production quality C and Objective-C compiler. If you are interested in fast
-compiles and good diagnostics, we encourage you to try it out.
+production quality C and Objective-C compiler. If you are interested in fast compiles and
+good diagnostics, we
+encourage you to try it out. Clang currently compiles typical Objective-C code
+3x faster than GCC and compiles C code about 30% faster than GCC at -O0 -g
+(which is when the most pressure is on the frontend).
In addition to supporting these languages, C++ support is also well under way, and mainline
@@ -127,7 +130,7 @@ list.
- C and Objective-C support are now considered production quality.
-- AuroraUX / FreeBSD & OpenBSD Toolchain support.
+- AuroraUX, FreeBSD, and OpenBSD are now supported.
- Most of Objective-C 2.0 is now supported with the GNU runtime.
- Many many bugs are fixed and many features have been added.
@@ -201,8 +204,9 @@ is a simple library that provides an implementation of the low-level
target-specific hooks required by code generation and other runtime components.
For example, when compiling for a 32-bit target, converting a double to a 64-bit
unsigned integer is compiling into a runtime call to the "__fixunsdfdi"
-function. The compiler-rt library provides optimized implementations of this and
-other low-level routines.
+function. The compiler-rt library provides highly optimized implementations of
+this and other low-level routines (some are 3x faster than the equivalent
+libgcc routines).
All of the code in the compiler-rt project is available under the standard LLVM
@@ -282,6 +286,14 @@ other situations.
+
+
+
An exciting aspect of LLVM is that it is used as an enabling technology for
+ a lot of other language and tools projects. This section lists some of the
+ projects that have already been updated to work with LLVM 2.6.
+
+
+
Rubinius
@@ -440,16 +452,14 @@ in this section.
enables support for
transparent
link-time optimization on ELF targets when used with the Gold binutils
linker.
-
LLVM now supports doing optimization and code generation on multiple threads
- by allowing multiple "LLVMContext" objects to exist. Please see the threading entry in the Programmer's
- Manual for more information.
+
LLVM now supports doing optimization and code generation on multiple
+ threads. Please see the LLVM
+ Programmer's Manual for more information.
LLVM now has experimental support for embedded
metadata in LLVM IR, though the implementation is not guaranteed to be
final and the .bc file format may change in future releases. Debug info
- does not yet use this format in LLVM 2.6.
-
+ does not yet use this format in LLVM 2.6.
@@ -460,18 +470,54 @@ in this section.
-
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:
+
LLVM IR has several new features for better support of new targets and that
+expose new optimization opportunities:
-- Getelementpr instruction now allows any integer type for array/pointer indexes.
-- Inbounds for GEP
-- NSW/NUW/exact div
-- LSR promotes int induction variables to 64-bit on 64-bit targets, major perf boost for numerical code.
-- LSR now analyzes pointer expressions (e.g. getelementptrs), not just integers.
-- new linkage types linkonce_odr, weak_odr, linker_private, and available_externally.
-- New fadd, fsub, fmul instructions and classes.
-- Target intrinsics can now return multiple results.
+- The add, sub, and mul
+ instructions have been split into integer and floating point version (like
+ divide and remainder), introducing new fadd, fsub,
+ and fmul instructions.
+- The add, sub, and mul
+ instructions now support optional "nsw" and "nuw" bits which indicate that
+ the operation is guaranteed to not overflow (in the signed or
+ unsigned case, respectively). This gives the optimizer more information and
+ can be used for things C signed integer values, which are undefined on
+ overflow.
+- The sdiv instruction now supports an
+ optional "exact" flag which indicates that the result of the division is
+ guaranteed to have a remainder of zero. This is useful to optimize pointer
+ subtraction in C.
+- The getelementptr instruction now
+ supports arbitrary integer index values for array/pointer indices. This
+ allows for better better code generation on 16-bit targets like PIC16.
+- The getelementptr instruction now
+ supports an "inbounds" optimization hint that tells the optimizer that the
+ pointer is guaranteed to be within its allocated object.
+- LLVM now support a series of new linkage types for global values which allow
+ for better optimization and new capabilities:
+
+ - linkonce_odr and
+ weak_odr have the same linkage
+ semantics as the non-"odr" linkage types. The difference is that these
+ linkage types indicate that all definitions of the specified function
+ are guaranteed to have the same semantics. This allows inlining
+ templates functions in C++ but not inlining weak functions in C,
+ which previously both got the same linkage type.
+ - available_externally
+ is a new linkage type that gives the optimizer visibility into the
+ definition of a function (allowing inlining and side effect analysis)
+ but that does not cause code to be generated. This allows better
+ optimization of "GNU inline" functions, extern templates, etc.
+ - linker_private is a
+ new linkage type (which is only useful on Mac OS X) that is used for
+ some metadata generation and other obscure things.
+
+- Finally, target-specific intrinsics can now return multiple values, which
+ is useful for modeling target operations with multiple results.
@@ -492,6 +538,8 @@ release includes a few major enhancements and additions to the optimizers:
Inliner reuse stack space when inlining arrays?
Enabled GVN Load PRE.
New Static Single Information (SSI) construction pass (not used by anything yet, experimental).
+LSR promotes int induction variables to 64-bit on 64-bit targets, major perf boost for numerical code.
+LSR now analyzes pointer expressions (e.g. getelementptrs), not just integers.