LLVM 1.8 is available now! Download it here: http://llvm.org/releases/ Release notes here: http://llvm.org/releases/1.8/docs/ReleaseNotes.html This is a great new release with great new features and lots of refinements (better codegen, faster compiles, bugs fixed). One particularly nice feature of this release is that we're back to a regular 3-month release cycle, allowing users to have fresh bits that are well tested. The LLVM community is vibrant and growing: many thanks to all who contributed to this release - in both large and small ways! Here are some of the major new features of LLVM 1.8: High Level Changes: 1. Jim has finished enough support for DWARF debugging information that it is now enabled by default in llvm-gcc4! Currently it is limited to only working with Mac OS (X86 and PowerPC), and only is generated at -O0. The debug info has good support for C with initial C++ support. We'd welcome help adding support for x86-linux and other targets. 2. Patrick Jenkins built a new centralized LLVM nightly tester (http://llvm.org/nightlytest/). This tester can generate reports and graph data across time, works with tester machines that live behind firewalls, automatically alerts the llvm-testresults list of significant performance regressions and improvements, and will eventually support generation of reports correlating changes in data across machines. 3. Rafael Avila de Espindola has started work on a new LLVM ARM backend. It is still in early stages of development, but is making strong progress. 4. The llvm-config tool is now built by default, is heavily tested (e.g. used by the llvm-gcc4 build), and includes several new enhancements (--libfiles and other new options, allows running from an objdir, allow relocating install dir, captures more info about the build, etc). 5. Reid contributed the llvm2cpp tool which converts LLVM modules into C++ code that (when executed) creates the module. 6. The "SparcV9" target has been removed, the "Sparc" target introduced in LLVM 1.7 has replaced it. Mid-Level Optimizer Improvements: 7. Owen contributed a new "Loop Closed SSA Pass" and updated various loop optimizers to use/preserve it. LCSSA makes it much easier for loop transformations to update SSA form after making changes to code. 8. As part of the LCSSA work, Owen changed loop-unswitch to be more aggressive: it is now able to unswitch loops with live-out values. 9. The Inliner pass now constant folds and DCE's on the fly, making it faster and making its cost model more accurate. 10. LLVM now includes a new byte-swap intrinsic, which the X86 and PPC code generator use these to emit bswap register/load/store instructions as appropriate. 11. Because llvm-gcc has no byte-swap builtin, the LLVM optimizer recognizes common bswap idioms and automatically changes them to use the intrinsic. 12. llvm-gcc now bootstraps correctly on darwin-x86/ppc, x86-linux and probably others), which exposed several cases where optimizers were nondeterministic. Target Independent Code Generator Improvements: 13. Nate contributed support for lowering switch instructions into jump tables, instead of always lowering them to conditional branch trees. 14. The ExecutionEngine::freeMachineCodeForFunction now actually frees machine code for functions from the JIT code cache, allowing the JIT to be used in long-running environments without running out of space. 15. The register spiller has been improved in several ways to make it produce better optimized spill code. The effect is particularly noticable on X86, but does apply to all targets. 16. The DAG Combiner now tracks sign information through arithmetic operations allowing more aggressive sign extension elimination. 17. The code generator now lowers formal arguments and function calls like any other unsupported operation, simplifying target lowering code. 18. LLVM now includes better support for targets whose ABI handles struct-return functions in unusual ways, e.g. implementing PR729. 19. Many people (particularly Nate, Evan, Owen and I): lots of cleanup and simplification throughout the code generator. 20. Several serious bugs (due to bitrot) in the 'local' (intra-basic-block) register allocator have been fixed, and it is now used by llvm-gcc4 at -O0. 21. Many bugs relating to inline asm support have been fixed, and llvm-gcc4 now supports global and local "asm register" variables. X86 Target Improvements: 22. Evan fixed several bugs in SSE code generation and implemented many performance tweaks. 23. Evan implemented the correct ABI for vector arg/retval passing in SSE registers. 24. Evan made significant improvements to the register-pressure-reducing scheduler, which is used primarily by the x86 target. 25. Jeff Cohen implemented support in the X86 backend for the Microsoft ML assembler ("masm"). 26. The X86 backend now supports most GCC inline asm, the most significant missing piece is support for multiple alternatives (PR839). PowerPC Target Improvements: 27. The PPC backend now includes initial support for 64-bit code generation on Darwin/PPC. There are still some minor known ABI bugs (particularly with struct-return functions) and the JIT only works in limited cases, but many applications work fine in 64-bit mode. 28. The PPC backend now passes vector arguments/retvals in registers according to the Darwin ABI. 29. Nate changed the PPC JIT to generate code using the static relocation model instead of "dynamic-no-pic", since the JIT knows exactly where all globals are located when it is generating code. 30. Nate implemented a new, more aggressive, PPC rlwimi pattern matcher, which allows LLVM to produce much better code for bitfield operations in some cases. Compiler Cleanups, Speedups, and Code Size Reductions: 31. The JIT code emitter (and thus the JIT) is much faster than before (http://llvm.org/PR469). 31. Jim, Evan, and I made several changes to reduce the size and number of relocations needed for code autogenerated by tblgen from the target .td files. 31. Evan made several tblgen changes that significantly reduces the stack usage of the generated instruction selector. This is important when compiling LLVM with gcc 4.x, until GCC PR25505 is fixed. 31. Many small cleanups and a couple of tricky bugs have been fixed due to input from a Coverity run. 32. Many people contributed various fixes to reduce code size for pieces of LLVM. 33. Anton Korobeynikov and Reid made many small changes to build LLVM with the '-pedantic' option. Most of LLVM is now '-pedantic'-clean. The Amazing Miscellaneous Stuff Department: 34. Anton contributed many fixes for mingw and cygwin. llvm-gcc4 now builds on mingw, and a binary version of the front-end available. It is still experimental, as it is missing stdcall and some other support. 35. Nick Lewycky contributed support for bugpoint to debug optimizers that get stuck in an infinite loop, by killing the optimizer after a certain amount of time passes. 36. Reid & Vladimir Prus made several improvements to documentation generated by doxygen, exposing comments previously only visible in the header files into the doxygen output. 37. --version now prints more detailed output, including the version number, build configuration, and vendor information. 38. Andrew added basic inline asm support to the Alpha backend. 39. Several new LLVM-related publications are available at http://llvm.org/pubs/ . In addition to the new features and infrastructure we have built, we have also fixed many minor bugs and have made many small optimization improvements. LLVM 1.8 is the clearly our best release yet, and upgrading from a previous release is highly recommended. Thanks to Tanya for spearheading this release and to those who tested the results, contributed binaries of the front-ends, and those who filed bugs. Each contribution helps make LLVM that much better and that much easier for people to use. Finally, here is the previous status report, the LLVM 1.7 Release: http://lists.cs.uiuc.edu/pipermail/llvm-announce/2006-April/000018.html If you have any questions or comments, please contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)! -Chris -- http://nondot.org/sabre/ http://llvm.org/