[LLVMdev] LLVM 1.8 Release Announcement [draft]

Chris Lattner sabre at nondot.org
Wed Aug 2 10:26:58 PDT 2006


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/




More information about the llvm-dev mailing list