LLVM October Status Update

Hi everyone,

This Fall has been busy, busy, busy. In addition to the usual LLVM
hacking, our developers have been moving all over the country, starting
classes, ending internships, getting married, and traveling the world.
Despite all of the non-LLVM fun we've been having, we've managed to get
some work done, too. :slight_smile:

Here is my traditional distillation of llvm-commits:

New High-Level Features:

  1. John, Reid and Misha split the large llvm/test/Programs tree out
     into a separate "llvm-test" project. This makes it easy to
     download the test suite independently from the LLVM core distro.
  2. Nate has made a tremendous amount of progress on the PowerPC backend.
     It is now feature-complete and generally works fine. He's just
     starting to tune it, but we already generate code that is
     either faster or on-par with GCC in most cases.
  3. Reid has been working hard on 'llvmc', the new grand unified compiler
     driver for front-ends. At this point it works pretty well, but is
     still missing some minor pieces.
  4. Brad Jones contributed initial support for "packed" types and values
     to LLVM. Unfortunately, no code generators support packed types yet
     though (which means we can't emit altivec or SSE yet; help welcome!).
  5. Valery Khamenya contributed two small examples of programs that
     dynamically create an LLVM module on the fly and execute it with
     the JIT or interpreter (see the llvm/examples directory).
  6. Brian added BFtoLLVM to the examples directory as a simple example
     LLVM front-end for the 'bf' language.
  7. Misha contributed llvm-test changes that allow us to use f2c to
     test LLVM on the FORTRAN 77 programs in SPEC 95 and 2000. You can
     download f2c from netlib/f2c.
  8. Henrick Bach, Paolo Invernizzi, and Jeff Cohen are working hard to
     get LLVM working natively on Win32 (i.e., compiling without cygwin)
     with Visual C++ 7.1.

Important Source Changes:

  9. Reid has been cleaning up and improving our system interfaces and
     has introduced lib/System in the process. Eventually all
     host-specific code will live in lib/System instead of lib/Support.
10. Many LLVM header files have moved, to make sure all llvm headers live
     under the "include/llvm/*" directory structure (PR352).
11. Interprocedural LLVM passes should now derive from ModulePass:

New Documentation (contributions and suggestions welcome!):

12. Reid started the "LLVM Lexicon", a document meant to explain any and
     all confusing terminology we use in and around LLVM.
13. Misha started the "How to write an LLVM Backend" document, located
     here: http://llvm.cs.uiuc.edu/docs/WritingAnLLVMBackend.html , though
     it is currently unfinished.
14. Reid added a new "Meet The LLVM Developers" page:
15. There is now a new LLVM tutorial available to warm you up to
     LLVM in general and writing LLVM transformations specifically:

Code Generator Changes:

16. The code generator and target descriptions now support automatically
     generating most of the target assembly printer. The PPC & X86
     targets use this instead of the ad-hoc printers they used before.
17. The X86 backend can now emit either AT&T or Intel syntax (controlled
     by "llc -x86-asm-syntax={intel|att}"): it now defaults to emitting
     AT&T syntax on Unix targets.
18. Misha added a bunch of simple target-independent testcases to
     test/Regression/CodeGen/Generic to help people working on new LLVM backends.
19. Nate added support to the code generator for targets that need to
     save callee-saved registers in specific stack locations.
20. Alkis contributed several improvements to the linear scan register
     allocator, making it run faster and produce better code.
21. Jeff Cohen contributed a patch to the X86 backend to make better use
     of complex addressing modes.
22. Nate added support for isLoad/isStore flags to target .td files.
23. The register allocator interface now uses a new spiller (-spiller=local)
     which produces substantially better code on X86 with linear scan in
     some cases (and is faster than the old one).

Optimizer Changes:

24. The -constifier pass was renamed to -globalopt.
25. The -globalopt pass is now significantly more aggressive at
     optimizing global variables, shrinking some programs by 20% or more
     (e.g. 252.eon and 256.bzip2).
26. The instruction combiner is more aggressive, handling many new

Miscellaneous Changes:

27. John fixed the configure script so that you shouldn't have to rebuild
     all of LLVM after a change to config.h (usually just lib/System).
28. The JIT interfaces have been enhanced to allow C++ code to JIT and
     call any LLVM function (previously only 'main' and nullary functions
     were really supported).
29. Bill Wendling contributed a patch that enables the C backend to emit
     NAN and +/- infinity global variable initializers (PR33).
30. llvm-test now includes benchmarks from the Prolangs-C and
     Prolangs-C++ suites.
31. Reid added further optimizations to the bytecode format, shrinking
     files up to 30% in some cases.

Significant Bugs Fixed:

32. The LICM pass could cause a compiler crash (PR420).
33. The C++ front-end was not emitting all template instantiations in
     some cases, leading to link errors in some programs (like LLVM
     itself). PR445
34. Several huge (algorithmic) speedups have been incorporated into the
     asmprinter (thanks Reid!), verifier, and type resolution code that
     affect obscure border cases.

At this point, we're tentatively looking at release LLVM 1.4 at the end of
November. There are a number of cool new features on the verge of being
completed by several people, and it would be nice to get them merged in
before the release. In any case, if you're still using LLVM 1.3, feel
free to update to latest CVS, which is more stable and featureful than 1.3

Finally, here's a link to our last status update, the LLVM 1.3 release:

If you have any comments or questions about LLVM or anything in this
status update, please feel free to contact us on the llvmdev list!