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. :) 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 http://www.netlib.org/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). http://mail.cs.uiuc.edu/pipermail/llvmdev/2004-September/001926.html 11. Interprocedural LLVM passes should now derive from ModulePass: http://mail.cs.uiuc.edu/pipermail/llvmdev/2004-September/002142.html 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. http://llvm.cs.uiuc.edu/docs/Lexicon.html 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: http://llvm.cs.uiuc.edu/Developers.html 15. There is now a new LLVM tutorial available to warm you up to LLVM in general and writing LLVM transformations specifically: http://llvm.cs.uiuc.edu/pubs/2004-09-22-LCPCLLVMTutorial.html 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 patterns. 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. http://mail.cs.uiuc.edu/pipermail/llvmdev/2004-August/001721.html 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 was. Finally, here's a link to our last status update, the LLVM 1.3 release: http://mail.cs.uiuc.edu/pipermail/llvm-announce/2004-August/000011.html 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! -Chris -- http://llvm.org/ http://nondot.org/sabre/