LLVM 1.8 Release Announcement [draft]

Hi All,

Here are my notes for the LLVM 1.8 release, please send me feedback :). I'm sure I've forgotten and overlooked something, if so, please let me know!

<Note: we're back to 3-month release cycle: yay!>

----- 8< ----- 8< -----

High Level Changes:

  *. 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.
  *. 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.
  *. 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.
  *. 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).
  *. Reid contributed the llvm2cpp tool which converts LLVM modules into C++
     code that (when executed) creates the module.
  *. The "SparcV9" target has been removed, the "Sparc" target introduced in
     LLVM 1.7 has replaced it.

Mid-Level Optimizer Improvements:

  *. Owen contributed a new "Loop Closed SSA Pass" and has updated various loop
     optimizers to use/preserve it. LCSSA makes it much easier for loop
     transformations to update SSA form.
  *. 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.
  *. The Inliner pass now constant folds and DCE's on the fly, making it faster
     and making its cost model more accurate.
  *. 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.
  *. Because llvm-gcc has no byte-swap builtin, the LLVM optimizer recognizes
     common bswap idioms and automatically changes them into the intrinsic.
  *. llvm-gcc now bootstraps correctly on darwin-x86 and darwin-ppc (any
     others?), which exposed several cases where optimizers were
     nondeterministic.

Target Independent Code Generator Improvements:

  *. Nate contributed support for lowering switch instructions into jump tables,
     instead of always lowering them to conditional branch trees.
  *. 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.
  *. 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.
  *. The DAG Combiner now tracks sign information through arithmetic operations
     allowing more aggressive sign extension elimination.
  *. The code generator now lowers formal arguments and function calls like any
     other unsupported operation, simplifying target lowering code.
  *. LLVM now includes better support for targets whose ABI handles
     struct-return functions in unusual ways, e.g. implementing PR729.
  *. Many people (particularly Nate, Evan, Owen and I): lots of cleanup and
     simplification throughout the code generator.
  *. 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.
  *. Many bugs relating to inline asm support ahve been fixed, and llvm-gcc4 now
     supports global and local "asm register" variables.

X86 Target Improvements:

  *. Evan fixed several bugs in SSE code generation and implemented many
     performance tweaks.
  *. Evan implemented the correct ABI for vector arg/retval passing in SSE
     registers.
  *. Evan made significant improvements to the register-pressure-reducing
     scheduler, which is used primarily by the x86 target.
  *. Jeff Cohen implemented support in the X86 backend for the Microsoft ML
     assembler ("masm").
  *. The X86 backend now supports most GCC inline asm, the most significant
     missing piece is support for multiple alternatives (PR839).

PowerPC Target Improvements:

  *. 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.
  *. The PPC now passes vector arguments/retvals in registers according to the
     Darwin ABI.
  *. Nate changed the PPC JIT to generate code in using the static relocation
     model instead of "dynamic-no-pic", since the JIT knows exactly where
     all code is located.
  *. 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:

  *. The JIT code emitter (and thus the JIT) is much faster than before (PR469).
  *. 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.
  *. 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.
  *. Many small cleanups and a couple of tricky bugs have been fixed due to
     input from a Coverity run.
  *. Many people contributed various fixes to reduce code size for pieces of
     LLVM.
  *. Anton Korobeynikov and Reid made many small changes to build LLVM with
     -pedantic. Most of LLVM is now -pedantic -clean.

The Amazing Miscellaneous Stuff Department:

  *. 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.
  *. Reid & Vladimir Prus made several improvements to documentation generated
     by doxygen, exposing comments previously only visible in the header
     files into the doxygen output.
  *. 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.
  *. --version now prints more detailed output, including the version number,
     build configuration, and vendor information.
  *. Andrew added basic inline asm support to the Alpha backend.
  *. Several new LLVM-related publications are available at
     The LLVM Compiler Infrastructure Project .

-Chris

linux-alpha. the new llvm-gcc should be considered the recommend llvm-
gcc on that platform.

I also have an linux-x86 build I use locally which seems clean.

Andrew