LLVM 1.9 Release Announcement [draft #1]

Hi All,

Here's the first draft of the release announcement for LLVM 1.9 that
I'm working on. I'm sure I've forgotten and overlooked something, if so,
please let me know!

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

Note: LLVM now correctly builds itself and passes all regression tests on
Darwin X86 and Darwin PPC. No one has tried other targets to my knowledge.
We hit 1000 bugzilla entries.

LLVM 2.0 is planned for a 6-month release cycle.
LLVM 2.0 will drop backwards compatibility with some really old .bc files.
LLVM 2.0 will drop llvm-gcc3 support.

Major new Features:

  *. Evan contributed a new X86-64 backend. Currently it only supports
     Darwin/x86-64, but other subtargets should be easy to add if anyone is
  *. Devang contributed liblto, a library which allows a system linker to
     efficiently and tightly integrate LLVM Link-Time-Optimization
     capability into it. http://llvm.org/docs/LinkTimeOptimization.html
  *. Bill and Nate integrated support for SPECCPU2006 into the llvm-test
     makefile system, which allows it to work with our nightly tester and
     automatic testcase reduction tools.
  *. Reid wrote a whole new FAQ for the oft-misunderstood getelementptr
     instruction: http://llvm.org/docs/GetElementPtr.html

Mid-Level Optimizer Enhancements:

  *. Nick Lewycky contributed a new 'predicate simplifier' pass, which
     currently performs dominator tree-based optimizations.
  *. Owen extended the complete loop unroll pass to support unrolling of
     multiple basic block loops.
  *. The 'globalopt' pass can now perform the scalar replacement of
     aggregates transformation on some heap allocations.
  *. The globalsmodref-aa alias analysis can now track 'indirect pointer
     globals' more accurately.
  *. The instruction combiner can now perform element propagation analysis
     of vector expressions, eliminating computation of vector elements
     that are not used.
  *. The Loop Closed SSA pass is significantly faster at updating SSA.
  *. Several LLVM transformations which had compile time explosions have
     been fixed.
  *. Devang fixed several cases of nondeterministic behavior and tracked
     down several bugs blocking LLVM from building itself.

Target-Independent Code Generator Enhancements:

  *. LLVM now includes a late branch folding pass which optimizes code
     layout, performs several branch optzns, and deletes unreachable code.
  *. Evan contributed common code generator support for targets that
     support pre/post-increment addressing modes.
  *. Jim added support for dynamically-loadable register allocators and
  *. Evan modified the DAG instruction selector to be iterative instead of
     recursive, fixing "out of stack space" problems with very large basic
     blocks when LLVM is compiled with GCC 4.x.
  *. LLVM 1.9 includes several improvements to inline asm support,
     including support for new constraints and modifiers.
  *. The register coalescer is now more aggressive than before, allowing it
     to eliminate more copies.
  *. The core SelectionDAG data structures are now much more efficient,
     which yields faster compiles.
  *. Bill sped up PHI elimination and live variables significantly on large
     functions by eliminating N^2 algorithms.
  *. The target-independent switch lowering code now produces better code in
     several situations for common idioms.
  *. Jim added several enhancements to speed up debug info generation and
     reduce the size of the emitted debug info.

Target-specific Enhancements:

  *. Rafael enhanced the LLVM ARM backend to support more instructions
     and the use of a frame pointer. It is now possible to build libgcc and
     a simple cross compiler, but it is not considered "complete" yet.
  *. Nate contributed initial support for a direct Mach-o object file
     writer, but it is not yet complete.
  *. Anton contributed support for Win32 dllimport/dllexport linkage and
     stdcall/fastcall calling conventions.
  *. Jim contributed support for Darwin/x86 debug information.
  *. Reid contributed basic Linux/X86 support for LLVM debug info.
  *. Anton contributed basic debug support for Cygwin and MingW when those
     environments are configured to use DWARF.
  *. Anton contributed several patches to improve compatibility with MingW.
  *. Evan added code generator support for machine-specific constant pool

Target Description Enhancements:

  *. tblgen now allows definition of 'multiclasses' which can be used to
     factor instruction patterns more aggressively in .td files.
  *. Jim added a new TargetAsmInfo class which captures a variety of
     information about the target assembly language format. This allows the
     information to be used by clients other than the asmprinter.
  *. .td files now support "${:foo}" syntax for encoding subtarget-specific
     assembler syntax into instruction descriptions.

Major LLVM IR / API Changes:

  *. Reid merged the ConstantUInt and ConstantSInt classes together into a
     single ConstantInt class.
  *. Reid split the 'div' instruction into fdiv/sdiv/udiv operations and
     'rem' into frem/srem/urem. We hope that LLVM 2.0 will split all
     instructions that vary behavior based on the signedness of their
     operands. See http://llvm.org/PR950 for more details.
  *. ConstantBool::True and False have been renamed to
     ConstantBool::getTrue() and ConstantBool::getFalse().

LLVM Build System Changes:

  *. The LLVM library dependency graph is now acyclic, allowing
     llvm-config to always work. The LLVM build system itself now
     internally uses llvm-config.
  *. Reid updated autoconf/libtool to newer versions.
  *. Reid contributed changes to rid several libraries from C++
     exception handling use. Almost all of LLVM now builds with
     -fno-exceptions, which shrinks executables significantly.
  *. Reid contributed changes to make LLVM -Woverloaded-virtual and -Wunused
     clean. These are now enabled by default.
  *. Jeff Cohen contributed changes to ensure LLVM builds with MSVC++ 7.1
     and updated project files to work with it.
  *. Jim updated the Xcode project files.

Other Changes:

  *. Patrick contributed a new mode to bugpoint: -find-bugs. This causes
     bugpoint to permute pass sequences to try to expose bugs due to pass
  *. The JIT now supports lazily streaming code from multiple modules at a
     time, implicitly linking the code as it goes.
  *. Bill and Fernando contributed new sections describing the code
     generator: http://llvm.org/docs/CodeGenerator.html
  *. Reid merged the functionality of the 'analyze' tool into the 'opt'
     tool, cutting LLVM's disk footprint significantly.
  *. Domagoj Babic contributed patches to make bugpoint converge faster when
     reducing programs.
  *. LLVM now uses far fewer static constructors than it used to: it now
     lazily initialized global datastructures and provides an explicit
     'teardown' API for releaseing the memory associated with them.
  *. Devang changed llvm-gcc to obey several GCC optimization options,
     including -funroll-loops, -fno-unit-at-a-time, -fno-inline-functions,
  *. Many varied codegen improvements, lots of bugs fixed, etc.