The LLVM 1.5 is out! Get it here: http://llvm.cs.uiuc.edu/releases/ or read about it here: http://llvm.cs.uiuc.edu/releases/1.5/docs/ReleaseNotes.html#whatsnew This release adds several new major features to the LLVM compiler, allows it to be used in domains where it couldn't before (e.g. for functional languages), supports new targets, generates faster code, and is much easier to port to a new target than before. Here are some of the biggest changes since the last status update (which also includes new features from 1.4). You can read the previous status update here: http://mail.cs.uiuc.edu/pipermail/llvm-announce/2005-February/000015.html High-Level Changes: 1. Duraid contributed a shiny new IA-64 backend (still beta). 2. Andrew has fixed many bugs in the Alpha backend, it it is making a lot of progress. 3. The new instruction selection framework is complete and in heavy use. Many extensions are still possible, but the basic functionality works well. 4. LLVM now supports per-function calling conventions, allowing us to support targets with multiple cc's (e.g. fastcall/stdcall on X86), and convention changing compiler flags (e.g. GCC's -mregparm). 5. LLVM now supports proper tail calls, as required to implement functional languages (such as Scheme and Haskell) efficiently. For more information, see: http://llvm.cs.uiuc.edu/releases/1.5/docs/ReleaseNotes.html#tailcalls 6. Misha updated the llvm-tv (LLVM Transformation Visualizer) project to work with LLVM CVS. 7. The LLVM_LIB_SEARCH_PATH environment still works, but should not be needed for most people now. llvm-gcc now always includes the libraries in <LLVMGCCDIR>/lib. Optimization Changes: 8. Reid has started a new -simplify-libcalls pass to optimize standard library function calls (e.g. it turns strcat(P, "foo") into memcpy(P+strlen(P), "foo", 4) and has implemented many transforms. 9. The globalsmodref alias analysis generates more precise results. 10. Several bugs in the andersensaa and steensaa passes were fixed, and their alias and mod/ref precision has improved. 11. The optimizer now eliminates simple cases where redundant conditions exist between neighboring blocks. 12. The -prune-eh pass now detects no-return functions in addition to the no-unwind functions it did before. Code Generator Changes: 13. The code generator now tracks function live-in registers explicitly, instead of requiring the target to generate 'implicit defs' at the entry to a function. 14. Nate implemented the integer division by a constant strength reduction algorithm that uses multiplication by a magic constant. 15. Duraid implemented the multiplication by a constant strength reduction algorithm that emits sequences of shift/adds. 16. tblgen now allows lazy resolution of variables, making it easier to write more expressive and compact .td files in some cases. 17. The code generator now compiles fabs/fneg to assembly instructions when possible. 18. Morton Ofstad contributed generic codegen support and X86 backend support for sin/cos/sqrt. 19. Andrew contributed initial patches to track the LLVM pointer that SelectionDAG nodes point to, allowing the code generator to use LLVM alias analysis info (it does not currently use it though). Target Changes: 20. Nate wrote a new PowerPC instruction selector using the new SelectionDAG framework. 21. Nate added several optimizations to the PPC backend, including support for generating FMA instructions and using recording ("dot") forms of various PPC instructions. 22. The X86 backend uses a new SelectionDAG-based instruction selector. 23. The X86 codegen attempts to order code to reduce register pressure. However, the current implementation still has several deficiencies. 24. The C backend should no longer produce code that crashes ICC 8.1. Other Changes: 25. Reid and Andrew enhanced the LLVM configure script to support an --enable-targets= flag which permits building a subset of the targets (instead of all of them all the time). 26. Jeff continued working on the Visual C++ build scripts and portability to native Win32. Most LLVM tools work natively in win32 now, but there is no native C/C++ front-end support yet (must use cygwin). 27. Adam Treat contributed patches to the LLVM linker to handle programs containing combinations of native and bytecode libraries much better. 28. Adam Treat contributed patches to the LLVM linker, allowing it to build shared libraries with 'llvm-gcc -shared' and -Wl,-native or -Wl,-native-cbe. 29. The llvm-test suite works much better on FreeBSD and Darwin. 30. Nightly tester output is now archived on the llvm-testresults mailing list: http://mail.cs.uiuc.edu/pipermail/llvm-testresults/ 31. Evan Jones contributed patches to improve our doxygen output. 32. Misha renamed the llvm 'extract' tool to 'llvm-extract' (makes sense!) 33. Justin Wick contributed support for a new llvm.prefetch intrinsic. llvm-gcc now compiles __builtin_prefetch to it. 34. Andrew added llvm.ctpop,llvm.cttz and llvm.ctlz intrinsics. llvm-gcc now codegens __builtin_popcount, etc to these intrinsics. 35. Duraid contributed patches to build LLVM on HP-UX with the GNU toolchain. He also got it working with aCC, but it requires several work-arounds for the (rather old) STL it provides. Notable Bugs Fixed: PR496: Cannot build llvm without llvm-gcc PR510: [llvmgcc] Field offset miscalculated for some structure fields following bit fields PR513: [llvm-g++] Temporary lifetimes incorrect for short circuit logical operations PR517: [llvm-gcc] Crash compiling bitfield <-> aggregate assignment PR520: [llvm-g++] Error compiling virtual function thunk with an unnamed argument PR522: [llvm-gcc] Crash on certain C99 complex number routines PR529: [llvm-g++] Crash using placement new on an array type PR562: [llvm-gcc] crash on global variable nested union with initializer Finally, here's the previous status update: http://mail.cs.uiuc.edu/pipermail/llvm-announce/2005-February/000015.html As usual, if you have any questions or comments about LLVM or any of the features in this status update, please feel free to contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)! On a more personal note, I recently finished up my Ph.D. In June, I'll be joining Apple Computer's Compiler and Tools group, where I will continue open-source LLVM development. Stay tuned for good things to come! Oh yeah, if you are interested in some of the nifty things that can be done with LLVM, take a look at my thesis: :) http://llvm.cs.uiuc.edu/pubs/2005-05-04-LattnerPHDThesis.html -Chris -- http://nondot.org/sabre/ http://llvm.cs.uiuc.edu/