[llvm-announce] LLVM 1.1 Release & Status Update
Wed, 17 Dec 2003 18:01:40 -0600 (CST)
It's official: LLVM 1.1 is now officially available! I think that
everyone who has worked on it is really proud of the high quality of the
release. It is faster, more robust, and more featureful than 1.0. If you
are currently using LLVM 1.0, I _highly_ recommend upgrading. Huge thanks
go out to all those that helped make it possible. You can download it
A detailed list of the new features and fixed bugs can be found in the 1.1
... on to the status update. Since the last status update (which included
quite a few new 1.1 features as well), we've made quite a bit of progress
in various areas. All of these changes are in LLVM 1.1:
1. The bytecode reader and type-resolution machinery has been
significantly streamlined. This improves bytecode loading times by up
to 4x in some cases with lots of types (like C++ programs).
2. The inliner has a much more accurate cost metric to decide when to
inline functions, taking into account an approximate amount of code
that will be DCE'd after inlining, due to constant propagation of
arguments. Note that the inliner is still not tuned to be aggressive.
You can play around with -inline-threshold to experiment.
3. Brian chased down the remaining problems with LLVM and Mac OS X,
extended the LLVM .a file reader to support BSD-style archives, and
patched the C frontend. 1.1 should work quite well with OS X thanks to
4. John revamped the LLVM autoconf/makefiles to automatically copy
makefiles from the SRCDIR into the OBJDIR. This should reduce the
number of times you have to rerun configure if you are working out of
CVS. Details here:
5. In the C++ front-end, objects in anonymous namespaces are given
internal linkage, giving the compile-time optimizer more freedom.
6. Reid Spencer contributed a new Stacker front-end for LLVM! This is the
first "native" LLVM front-end and is an excellent example
demonstrating how to write a front-end for LLVM. If you're interested,
Reid wrote a document describing his experiences:
Now if someone just wrote a stacker backend for LLVM.... ;-)
7. The crtend library is now built as an archive, which should solve some
link and compatibility problems with Mac OS X.
8. Bytecode files in LLVM 1.1 are about 20% more compact than they were in
1.0 (for a given .ll file). A side-effect of this is that 1.0 won't
read 1.1 bytecode files, but we maintain backwards compatibility with
all bytecode revisions, so 1.1 can read 1.0 files.
9. Misha checked in a cool feature to gccld so that it adds --load options
to the program script for a compiled program. This means that many
programs that require native libraries (such as X11 libraries) will now
work with LLVM and the JIT without tweaking the script.
10. The LLVM dominator analyses were completely rewritten to use the
Lengauer & Tarjan algorithm, which speeds up gccas quite a bit in some
10. The LLVM C++ front-end in particular has had a number of important
bugfixes and improvements. We can now compile and run a large number
of C++ programs "off the shelf", including LLVM itself!
11. The TailCallElimination pass is now much more aggressive than it was
before. In particular, it can now introduce accumulator variables to
translate naive implementations of functions like "fib" and "pow" into
nice tight loops.
12. The LICM pass can now sink computations out the bottom of loops in
addition to hoisting them out the top. This reduces the amount of
computation in loops and reduces register pressure.
13. The "-basicaa" alias analysis pass (the default) is now
_significantly_ more precise in many common cases (see PR86).
14. The startup time of the LLVM JIT has been improved quite a bit for
programs that have lots of globals with pointers to functions (such as
C++ vtables). For example, running "ll-opt --help" (LLVM opt,
compiled with LLVM) sped up by 2.5 times. There is still room for
improvement: see PRs 177 & 135 for details.
... and of course, tons of bugs have been fixed, particularly in the C/C++
front-ends. Bugzilla is showing 55 bugs moved to the resolved/fixed
state since the last status update.
I want to thank John especially for all his hard work putting together the
1.1 release. He did a great job triaging and fixing sparc bugs and
hacking the release notes into presentable shape. In addition, Brian did
a great job putting together and testing the FreeBSD and Mac OS X tools:
As always, we welcome and encourage comments, questions and feedback on
the llvmdev list.
Here's the previous status update: