X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FReleaseNotes.html;h=d48883a7cce45dac824bd07c3c44780144e3ef9d;hb=bd76d661942c27ee0fe67a7d103ff91192e7d92d;hp=d9bad9dce6909223a2fd37ad3b72479bdb06c3dc;hpb=eaf0f2b4c6fa9c46c33e14c02ed2277bb0f36253;p=oota-llvm.git
diff --git a/docs/ReleaseNotes.html b/docs/ReleaseNotes.html
index d9bad9dce69..d48883a7cce 100644
--- a/docs/ReleaseNotes.html
+++ b/docs/ReleaseNotes.html
@@ -4,11 +4,11 @@
This document contains the release notes for the LLVM compiler
-infrastructure, release 1.6. Here we describe the status of LLVM, including any
-known problems and major improvements from the previous release. The most
-up-to-date version of this document can be found on the LLVM 1.6 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.
+infrastructure, release 2.1. Here we describe the status of LLVM, including
+major improvements from the previous release and any known problems. All LLVM
+releases may be downloaded from the
LLVM
+releases web site.
For more information about LLVM, including information about the latest
-release, please check out the main LLVM
+release, please check out the main LLVM
web site. If you have questions or comments, the LLVM developer's mailing
list is a good place to send them.
-
Note that if you are reading this file from CVS or the main LLVM web page,
-this document applies to the next release, not the current one. To see
-the release notes for the current or previous releases, see the releases page.
+
Note that if you are reading this file from a Subversion checkout or the
+main LLVM web page, this document applies to the next release, not the
+current one. To see the release notes for a specific releases, please see the
+releases page.
@@ -60,52 +58,233 @@ href="http://llvm.cs.uiuc.edu/releases/">releases page.
-
This is the seventh public release of the LLVM Compiler Infrastructure.
+
This is the twelfth public release of the LLVM Compiler Infrastructure.
+It includes many features and refinements from LLVM 2.0.
-
LLVM 1.6 is known to correctly compile a wide range of C and C++ programs,
-includes bug fixes for those problems found since the 1.5 release, and includes
-a large number of new features and enhancements, described below.
+
+
+
+
+
+
LLVM 2.1 brings two new beta C front-ends. First, a new version of llvm-gcc
+based on GCC 4.2, innovatively called "llvm-gcc-4.2". This promises to bring
+FORTRAN and Ada support to LLVM as well as features like atomic builtins and
+OpenMP. None of these actually work yet, but don't let that stop you checking
+it out!
+
+
Second, LLVM now includes its own native C and Objective-C front-end (C++ is
+in progress, but is not very far along) code named "clang". This front-end has a number of great
+features, primarily aimed at source-level analysis and speeding up compile-time.
+At this point though, the LLVM Code Generator component is still very early in
+development, so it's mostly useful for people looking to build source-level
+analysis tools or source-to-source translators.
-
-
- - The JIT now uses mutexes to protect its internal data structures. This
- allows multi-threaded programs to be run from the JIT or interpreter without
- corruption of the internal data structures. See
- PR418 and
- PR540 for the details.
-
-
+
+
Some of the most noticable feature improvements this release have been in the
+optimizer, speeding it up and making it more aggressive. For example:
+
+
+
+- Owen Anderson wrote the new MemoryDependenceAnalysis pass, which provides
+ a lazy, caching layer on top of AliasAnalysis. He then used it to rewrite
+ DeadStoreElimination which resulted in significantly better compile time in
+ common cases,
+- Owen implemented the new GVN pass, which is also based on
+ MemoryDependenceAnalysis. This pass replaces GCSE/LoadVN in the standard
+ set of passes, providing more aggressive optimization at a some-what
+ improved compile-time cost.
+- Owen implemented GVN-PRE, a partial redundancy elimination algorithm that
+ shares some details with the new GVN pass. It is still in need of compile
+ time tuning, and is not turned on by default.
+- Devang merged ETForest and DomTree into a single easier to use data
+ structure. This makes it more obvious which datastructure to choose
+ (because there is only one) and makes the compiler more memory and time
+ efficient (less stuff to keep up-to-date).
+- Nick Lewycky improved loop trip count analysis to handle many more common
+ cases.
+
+
+
+
+
One of the main focuses of this release was performance tuning and bug
+ fixing. In addition to these, several new major changes occurred:
+
+
+
+- Dale finished up the Tail Merging optimization in the code generator, and
+ enabled it by default. This produces smaller code that is also faster in
+ some cases.
+
+- Christopher Lamb implemented support for virtual register sub-registers,
+ which can be used to better model many forms of subregisters. As an example
+ use, he modified the X86 backend to use this to model truncates and
+ extends more accurately (leading to better code).
+
+- Dan Gohman changed the way we represent vectors before legalization,
+ significantly simplifying the SelectionDAG representation for these and
+ making the code generator faster for vector code.
+
+- Evan contributed a new target independent if-converter. While it is
+ target independent, so far only the ARM backend uses it.
+
+- Evan rewrote the way the register allocator handles rematerialization,
+ allowing it to be much more effective on two-address targets like X86,
+ and taught it to fold loads away when possible (also a big win on X86).
+
+- Dan Gohman contributed support for better alignment and volatility handling
+ in the code generator, and significantly enhanced alignment analysis for SSE
+ load/store instructions. With his changes, an insufficiently-aligned SSE
+ load instruction turns into movups, for example.
+
+- Duraid Madina contributed a new "bigblock" register allocator, and Roman
+ Levenstein contributed several big improvements. BigBlock is optimized for
+ code that uses very large basic blocks. It is slightly slower than the
+ "local" allocator, but produces much better code.
+
+- David Greene refactored the register allocator to split coalescing out from
+ allocation, making coalescers pluggable.
+
+
+
+
This section contains all known problems with the LLVM system, listed by
component. As new problems are discovered, they will be added to these
sections. If you run into a problem, please check the LLVM bug database and submit a bug if
+href="http://llvm.org/bugs/">LLVM bug database and submit a bug if
there isn't already one.
@@ -164,35 +345,152 @@ there isn't already one.
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.
+components, please contact us on the
Known problems with the C front-end
@@ -202,20 +500,11 @@ components, please contact us on the llvmdev list.
Bugs
-
+
llvm-gcc4 does not currently support Link-Time
+Optimization on most platforms "out-of-the-box". Please inquire on the
+llvmdev mailing list if you are interested.
+
@@ -224,103 +513,55 @@ href="http://llvm.cs.uiuc.edu/PR162">with the largest union member.
-
-- Inline assembly is not yet supported.
-
-- "long double" is transformed by the front-end into "double". There is no
-support for floating point data types of any size other than 32 and 64
-bits.
+"long double" is silently transformed by the front-end into "double". There
+is no support for floating point data types of any size other than 32 and 64
+bits.
-- The following Unix system functionality has not been tested and may not
-work:
-
- - sigsetjmp, siglongjmp - These are not turned into the
- appropriate invoke/unwind instructions. Note that
- setjmp and longjmp are compiled correctly.
-
- getcontext, setcontext, makecontext
- - These functions have not been tested.
-
+llvm-gcc does not support __builtin_apply yet.
+ See Constructing Calls: Dispatching a call to another function.
+
-- Although many GCC extensions are supported, some are not. In particular,
- the following extensions are known to not be supported:
+
llvm-gcc partially supports these GCC extensions:
- - Local Labels: Labels local to a block.
- - Nested Functions: As in Algol and Pascal, lexical scoping of functions.
- - Constructing Calls: Dispatching a call to another function.
- - Extended Asm: Assembler instructions with C expressions as operands.
- - Constraints: Constraints for asm operands.
- - Asm Labels: Specifying the assembler name to use for a C symbol.
- - Explicit Reg Vars: Defining variables residing in specified registers.
- - Vector Extensions: Using vector instructions through built-in functions.
- - Target Builtins: Built-in functions specific to particular targets.
- - Thread-Local: Per-thread variables.
- - Pragmas: Pragmas accepted by GCC.
-
+ - Nested Functions:
-
The following GCC extensions are partially supported. An ignored
- attribute means that the LLVM compiler ignores the presence of the attribute,
- but the code should still work. An unsupported attribute is one which is
- ignored by the LLVM compiler and will cause a different interpretation of
- the program.
-
-
- - Variable Length:
- Arrays whose length is computed at run time.
- Supported, but allocated stack space is not freed until the function returns (noted above).
+ As in Algol and Pascal, lexical scoping of functions.
+ Nested functions are supported, but llvm-gcc does not support
+ taking the address of a nested function (except on the X86-32 target)
+ or non-local gotos.
- Function Attributes:
Declaring that functions have no side effects or that they can never
return.
- Supported: format, format_arg, non_null,
- noreturn, constructor, destructor,
- unused,
- deprecated, warn_unused_result, weak
-
- Ignored: noinline,
- always_inline, pure, const, nothrow,
- malloc, no_instrument_function, cdecl
-
- Unsupported: used, section, alias,
- visibility, regparm, stdcall,
- fastcall, all other target specific attributes
-
- - Variable Attributes:
- Specifying attributes of variables.
- Supported: cleanup, common, nocommon,
- deprecated, transparent_union,
- unused, weak
-
- Unsupported: aligned, mode, packed,
- section, shared, tls_model,
- vector_size, dllimport,
- dllexport, all target specific attributes.
+ Supported: alias, always_inline, cdecl,
+ constructor, destructor,
+ deprecated, fastcall, format,
+ format_arg, non_null, noinline, noreturn, regparm
+ section, stdcall, unused, used,
+ visibility, warn_unused_result, weak
- - Type Attributes: Specifying attributes of types.
- Supported: transparent_union, unused,
- deprecated, may_alias
-
- Unsupported: aligned, packed,
- all target specific attributes.
-
- - Other Builtins:
- Other built-in functions.
- 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
- (currently ignored). We also support builtins for ISO C99 floating
- point comparison macros (e.g., __builtin_islessequal),
- __builtin_prefetch, __builtin_popcount[ll],
- __builtin_clz[ll], and __builtin_ctz[ll].
+ Ignored: pure, const, nothrow,
+ malloc, no_instrument_function
+
- The following extensions are known to be supported:
+llvm-gcc supports the vast majority of GCC extensions, including:
+ - Pragmas: Pragmas accepted by GCC.
+ - Local Labels: Labels local to a block.
+ - Other Builtins:
+ Other built-in functions.
+ - Variable Attributes:
+ Specifying attributes of variables.
+ - Type Attributes: Specifying attributes of types.
+ - Thread-Local: Per-thread variables.
+ - Variable Length:
+ Arrays whose length is computed at run time.
- Labels as Values: Getting pointers to labels and computed gotos.
- Statement Exprs: Putting statements and declarations inside expressions.
- Typeof:
typeof
: referring to the type of an expression.
@@ -333,6 +574,12 @@ work:
- Empty Structures: Structures with no members.
- Variadic Macros: Macros with a variable number of arguments.
- Escaped Newlines: Slightly looser rules for escaped newlines.
+ - Extended Asm: Assembler instructions with C expressions as operands.
+ - Constraints: Constraints for asm operands.
+ - Asm Labels: Specifying the assembler name to use for a C symbol.
+ - Explicit Reg Vars: Defining variables residing in specified registers.
+ - Vector Extensions: Using vector instructions through built-in functions.
+ - Target Builtins: Built-in functions specific to particular targets.
- Subscripting: Any array can be subscripted, even if not an lvalue.
- Pointer Arith: Arithmetic on
void
-pointers and function pointers.
- Initializers: Non-constant initializers.
@@ -370,38 +617,16 @@ lists, please let us know (also including whether or not they work).
-
For this release, the C++ front-end is considered to be fully
+
The C++ front-end is considered to be fully
tested and works for a number of non-trivial programs, including LLVM
-itself.
-
-
-
-
-Bugs
-
-
-
-
-- The C++ front-end inherits all problems afflicting the C
- front-end.
-
-
-
-
-
-
-
- Notes
-
-
-
+itself, Qt, Mozilla, etc.
+- Exception handling only works well on the linux/X86-32 target.
+In some cases, illegally throwing an exception does not result
+in a call to terminate.
-- The C++ front-end is based on a pre-release of the GCC 3.4 C++ parser. This
-parser is significantly more standards compliant (and picky) than prior GCC
-versions. For more information, see the C++ section of the GCC 3.4 release notes.
+
-
-
-
-
-
-
-- The C back-end produces code that violates the ANSI C Type-Based Alias
-Analysis rules. As such, special options may be necessary to compile the code
-(for example, GCC requires the -fno-strict-aliasing option). This
-problem probably cannot be fixed.
-
-- Zero arg vararg functions are not
-supported. This should not affect LLVM produced by the C or C++
-frontends.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-- On 21164s, some rare FP arithmetic sequences which may trap do not have the
-appropriate nops inserted to ensure restartability.
-
-- Defining vararg functions is not supported (but calling them is ok).
-
-- Due to the vararg problems, C++ exceptions do not work. Small changes are required to the CFE (which break correctness in the exception handler) to compile the exception handling library (and thus the C++ standard library).
-
+-->
-
-
-
-
-
-
-
-- C++ programs are likely to fail on IA64, as calls to setjmp are
-made where the argument is not 16-byte aligned, as required on IA64. (Strictly
-speaking this is not a bug in the IA64 back-end; it will also be encountered
-when building C++ programs using the C back-end.)
-
-- The C++ front-end does not use IA64
-ABI compliant layout of v-tables. In particular, it just stores function
-pointers instead of function descriptors in the vtable. This bug prevents
-mixing C++ code compiled with LLVM with C++ objects compiled by other C++
-compilers.
-- There are a few ABI violations which will lead to problems when mixing LLVM
-output with code built with other compilers, particularly for floating-point
-programs.
-
-- Defining vararg functions is not supported (but calling them is ok).
-
-
-
-
-
-
-
-
-
-
-
-- Many features are still missing (e.g. support for 64-bit integer
-arithmetic).
-
-- This backend needs to be updated to use the SelectionDAG instruction
-selection framework.
-
-
-