LLVM 1.1 Release & Status Update

Hi LLVMers!

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
release notes:

... 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
   his efforts!

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.... :wink:

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
    large testcases.

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:
thanks guys!

As always, we welcome and encourage comments, questions and feedback on
the llvmdev list.

Here's the previous status update: