LLVM 1.8 Release!

LLVM 1.8 is available now! Download it here: Download LLVM releases
Release notes here: LLVM 1.8 Release Notes

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
  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

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
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
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
     (JIT should write bytes more efficiently, allow machine code deallocation, allow growing code buffer · Issue #841 · llvm/llvm-project · GitHub).
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
     The LLVM Compiler Infrastructure Project .

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:

If you have any questions or comments, please contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)!