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
http://llvm.org/pubs/ .
-Chris
--
http: //nondot.org/sabre/
http: //llvm.org/