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