From 7b7fa74527997516de1b96f14026c9e2e9a26a50 Mon Sep 17 00:00:00 2001
From: Bill Wendling This document contains the release notes for the LLVM Compiler
-Infrastructure, release 3.0. Here we describe the status of LLVM, including
-major improvements from the previous release and significant 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
-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 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 release, please 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 release, please see the
+ releases page.
-The LLVM 3.0 distribution currently consists of code from the core LLVM
-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.
- The LLVM 3.0 distribution currently consists of code from the core LLVM
+ 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. Clang is an LLVM front end for the C,
-C++, and Objective-C languages. Clang aims to provide a better user experience
-through expressive diagnostics, a high level of conformance to language
-standards, fast compilation, and low memory use. Like LLVM, Clang provides a
-modular, library-based architecture that makes it suitable for creating or
-integrating with other development tools. Clang is considered a
-production-quality compiler for C, Objective-C, C++ and Objective-C++ on x86
-(32- and 64-bit), and for darwin/arm targets. In the LLVM 3.0 time-frame, the Clang team has made many improvements: If Clang rejects your code but another compiler accepts it, please take a
-look at the language
-compatibility guide to make sure this is not intentional or a known issue.
-
-DragonEgg is a
-gcc plugin that replaces GCC's
-optimizers and code generators with LLVM's.
-Currently it requires a patched version of gcc-4.5.
-The plugin can target the x86-32 and x86-64 processor families and has been
-used successfully on the Darwin, FreeBSD and Linux platforms.
-The Ada, C, C++ and Fortran languages work well.
-The plugin is capable of compiling plenty of Obj-C, Obj-C++ and Java but it is
-not known whether the compiled code actually works or not!
- DragonEgg is a
+ gcc plugin that replaces GCC's
+ optimizers and code generators with LLVM's. Currently it requires a patched
+ version of gcc-4.5. The plugin can target the x86-32 and x86-64 processor
+ families and has been used successfully on the Darwin, FreeBSD and Linux
+ platforms. The Ada, C, C++ and Fortran languages work well. The plugin is
+ capable of compiling plenty of Obj-C, Obj-C++ and Java but it is not known
+ whether the compiled code actually works or not! The 3.0 release has the following notable changes:
-The 3.0 release has the following notable changes:
The VMKit project is an implementation
- of a Java Virtual Machine (Java VM or JVM) that uses LLVM for static and
- just-in-time compilation. As of LLVM 3.0, VMKit now supports generational
- garbage collectors. The garbage collectors are provided by the MMTk framework,
- and VMKit can be configured to use one of the numerous implemented collectors
- of MMTk.
- TCE uses Clang and LLVM for C/C++ language support, target independent
optimizations and also for parts of code generation. It generates new
- LLVM-based code generators on the fly for the designed TTA processors
- and loads them in to the compiler backend as runtime libraries to avoid
+ LLVM-based code generators "on the fly" for the designed TTA processors and
+ loads them in to the compiler backend as runtime libraries to avoid
per-target recompilation of larger parts of the compiler chain.
@@ -94,35 +93,47 @@ development. Here we include updates on these subprojects.
-
@@ -241,13 +233,14 @@ Like compiler_rt, libc++ is now dual
Tart Programming Language
@@ -657,9 +650,8 @@ Faust compiler can now generate LLVM bitcode, and works with LLVM 2.7-3.0.
This release includes a huge number of bug fixes, performance tweaks and -minor improvements. Some of the major improvements and new features are listed -in this section. -
+ minor improvements. Some of the major improvements and new features are + listed in this section.LLVM IR has several new features for better support of new targets and that -expose new optimization opportunities:
+ expose new optimization opportunities:One of the biggest changes is that 3.0 has a new exception handling system. The old system used LLVM intrinsics to convey the exception handling @@ -810,7 +803,8 @@ Builder.CreateResume(UnwindData);
In addition to a large array of minor performance tweaks and bug fixes, this -release includes a few major enhancements and additions to the optimizers:
+ release includes a few major enhancements and additions to the + optimizers:For more information, please see the Intro to the -LLVM MC Project Blog Post. -
+For more information, please see + the Intro + to the LLVM MC Project Blog Post.
We have put a significant amount of work into the code generator -infrastructure, which allows us to implement more aggressive algorithms and make -it run faster:
+ infrastructure, which allows us to implement more aggressive algorithms and + make it run faster:PHINode::reserveOperandSpace
has been removed. Instead, you
- must specify how many operands to reserve space for when you create the
- PHINode, by passing an extra argument into PHINode::Create
.PHINode::reserveOperandSpace
has been removed. Instead, you
+ must specify how many operands to reserve space for when you create the
+ PHINode, by passing an extra argument
+ into PHINode::Create
.PHINode::block_begin
- and PHINode::block_end
.PHINode::block_begin
+ and PHINode::block_end
.ArrayRef
instead of either a pair
- of pointers (or iterators) to the beginning and end of a range, or a pointer
- and a length. Others now return an ArrayRef
instead of a
- reference to a SmallVector
or std::vector
. These
- include:
+ ArrayRef
instead of either a
+ pair of pointers (or iterators) to the beginning and end of a range, or a
+ pointer and a length. Others now return an ArrayRef
instead
+ of a reference to a SmallVector
+ or std::vector
. These include:
CallInst::Create
TargetData::getIndexedOffset
StringMap::getOrCreateValue
have been remove
- except for the one which takes a StringRef
.StringMap::getOrCreateValue
have been remove
+ except for the one which takes a StringRef
.LLVMBuildUnwind
function from the C API was removed. The
- LLVM unwind
instruction has been deprecated for a long time and
- isn't used by the current front-ends. So this was removed during the
- exception handling rewrite.LLVMBuildUnwind
function from the C API was removed. The
+ LLVM unwind
instruction has been deprecated for a long time
+ and isn't used by the current front-ends. So this was removed during the
+ exception handling rewrite.LLVMAddLowerSetJmpPass
function from the C API was removed
- because the LowerSetJmp
pass was removed.LLVMAddLowerSetJmpPass
function from the C API was
+ removed because the LowerSetJmp
pass was removed.DIBuilder
interface used by front ends to encode debugging
- information in the LLVM IR now expects clients to use DIBuilder::finalize()
- at the end of translation unit to complete debugging information encoding.DIBuilder
interface used by front ends to encode
+ debugging information in the LLVM IR now expects clients to
+ use DIBuilder::finalize()
at the end of translation unit to
+ complete debugging information encoding.PATypeHolder
-and OpaqueType
are gone, and all APIs deal with Type*
-instead of const Type*
.
-If you need to create recursive structures, then create a named structure,
-and use setBody()
when all its elements are built.
-Type merging and refining is gone too: named structures are not
-merged with other structures, even if their layout is identical.
-(of course anonymous structures are still uniqued by layout).
-PATypeHolder
and OpaqueType
are gone,
+ and all APIs deal with Type*
instead of const
+ Type*
. If you need to create recursive structures, then create a
+ named structure, and use setBody()
when all its elements are
+ built. Type merging and refining is gone too: named structures are not
+ merged with other structures, even if their layout is identical. (of
+ course anonymous structures are still uniqued by layout).llvm.memset.i32
).llvm.memset.i32
).INITIALIZE_PASS{BEGIN,END,}
and INITIALIZE_{PASS,AG}_DEPENDENCY
.INITIALIZE_PASS{BEGIN,END,}
+ and INITIALIZE_{PASS,AG}_DEPENDENCY
.This section contains significant known problems with the LLVM system, -listed by component. If you run into a problem, please check the LLVM bug database and submit a bug if -there isn't already one.
+This section contains significant known problems with the LLVM system, listed + by component. If you run into a problem, please check + the LLVM bug database and submit a bug if + there isn't already one.
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.
+ 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.The C backend has numerous problems and is not being actively maintained. -Depending on it for anything serious is not advised.
+ Depending on it for anything serious is not advised.LLVM 3.0 will be the last release of llvm-gcc.
+LLVM 2.9 was the last release of llvm-gcc.
llvm-gcc is generally very stable for the C family of languages. The only major language feature of GCC not supported by llvm-gcc is the @@ -1253,8 +1263,9 @@ Depending on it for anything serious is not advised.
dragonegg instead.The llvm-gcc 4.2 Ada compiler has basic functionality, but is no longer being -actively maintained. If you are interested in Ada, we recommend that you -consider using dragonegg instead.
+ actively maintained. If you are interested in Ada, we recommend that you + consider using dragonegg instead. +A wide variety of additional information is available on the LLVM web page, in particular in the documentation section. The web page also -contains versions of the API documentation which is up-to-date with the -Subversion version of the source code. -You can access versions of these documents specific to this release by going -into the "llvm/doc/" directory in the LLVM tree.
+A wide variety of additional information is available on + the LLVM web page, in particular in + the documentation section. The web page + also contains versions of the API documentation which is up-to-date with the + Subversion version of the source code. You can access versions of these + documents specific to this release by going into the "llvm/doc/" + directory in the LLVM tree.
If you have any questions or comments about LLVM, please feel free to contact -us via the mailing -lists.
+ us via the mailing lists.