[llvm-announce] LLVM 1.9 Release!

Chris Lattner clattner at apple.com
Sun Nov 19 23:45:13 PST 2006

LLVM 1.9 is available now!  Download it here: http://llvm.org/ 
releases/ or view the release here: http://llvm.org/releases/1.9/docs/ 

This is a huge new release with many improvements, new features,  
better codegen, faster compiles, and many bugs fixed.  One telling  
feature is that LLVM now correctly builds itself and passes all its  
regression tests when self-hosted: an impressive feat, considering  
that it is ~400,000 lines of complex C/C++ code.

While LLVM 1.9 stuck to our planned 3-month release cycle, we plan to  
extend this cycle to 6 months for the 2.0 release.  This longer  
release cycle will allow us to focus on cleaning up LLVM APIs and  
removing some old backward compatibility code we have maintained  
since 1.0.  As such, we plan for LLVM 2.0 to drop support for some  
really old .bc and .ll files (LLVM 1.4 and earlier), and LLVM 2.0  
will probably drop support for llvm-gcc3.  I plan to send out a  
status update in 3 months to update everyone on the progress of LLVM  

Here are some of the most notable aspects of the LLVM 1.9 Release:

Major new Features:

  1. Evan contributed a new X86-64 backend.  Currently it supports
     Darwin/x86-64, and other operating systems in -static mode.
     Support for PIC codegen on other target should be straight-forward
     to add if someone is interested.
  2. Devang contributed liblto, a library which allows a system
     linker to efficiently and tightly integrate LLVM Link-Time-
     Optimization: http://llvm.org/docs/LinkTimeOptimization.html
  3. 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.
  4. Reid wrote a new FAQ for the oft-misunderstood getelementptr
     instruction: http://llvm.org/docs/GetElementPtr.html

Mid-Level Optimizer Enhancements:

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

Target-Independent Code Generator Enhancements:

13. LLVM now includes a late branch folding pass which optimizes code
     layout, performs several branch optimizations, and deletes
     unreachable code.
14. Evan contributed common code generator support for targets that
     support pre/post-increment addressing modes.
15. Jim added support for dynamically-loadable register allocators and
16. 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.
17. LLVM 1.9 includes several improvements to inline asm support,
     including support for new constraints and modifiers.
18. The register coalescer is now more aggressive than before,
     allowing it to eliminate more copies.
19. The core SelectionDAG data structures are now much more efficient,
     which yields faster compiles.
20. Bill sped up PHI elimination and live variables significantly on
     large functions by eliminating N^2 algorithms.
21. The target-independent switch lowering code now produces better
     code in several situations for common idioms.
22. Jim added several enhancements to speed up debug info generation
     and reduce the size of the emitted debug info.

Target-specific Enhancements:

23. Anton contributed support for Win32 dllimport/dllexport linkage
     and stdcall/fastcall calling conventions.
24. Jim contributed support for Darwin/x86 debug information.
25. Reid contributed basic Linux/X86 support for LLVM debug info.
26. Anton contributed basic debug support for Cygwin and MingW when
     those environments are configured to use DWARF.
27. Anton contributed several patches to improve compatibility with
28. Evan added code generator support for machine-specific constant
     pool entries.
29. 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.
30. Nate contributed initial support for a direct Mach-o object file
     writer, but it is not yet complete.

Target Description Enhancements:

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

Major LLVM IR / API Changes:

34. Reid merged the ConstantUInt and ConstantSInt classes together
     into a single ConstantInt class.
35. 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.
36. ConstantBool::True and False have been renamed to
     ConstantBool::getTrue() and ConstantBool::getFalse().

LLVM Build System Changes:

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

Other Changes:

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

In addition to the new features and infrastructure we have built, we  
also fixed many minor bugs and made many diverse optimization  
improvements.  LLVM 1.9 is the clearly our best release yet, and  
upgrading from a previous release is highly recommended.

This release wouldn't be possible without the LLVM community building  
new features, reporting bugs, testing the pre-release bits, and  
contributing in many other ways.  Tanya (our release manager)  
deserves a lot of credit for this being the smoothest and best  
release so far!

Here is the previous status report, the LLVM 1.8 Release:

If you have any questions or comments, please contact the LLVMdev  
mailing list (llvmdev at cs.uiuc.edu)!



More information about the llvm-announce mailing list