LLVM 1.4 Release and Status Update!

The LLVM 1.4 Release is now out! Get it here: http://llvm.cs.uiuc.edu/releases/
or read about it here:

This release features a huge assortment of improvements in functionality, generated code quality, and compile times. Thanks to everyone who has helped make this release the best one yet. In addition to the changes mentioned below, this release also includes the changes mentioned in the October 11 status update, here:

Here's a quick summary of the biggest changes since Oct 11:

High-Level Changes:

  1. This releases includes a fully functional PowerPC JIT compiler.
  2. Michael McCracken contributed patches to llvm-gcc to allow it to emit
     source-line number debug information when passed -g. This debug
     information works correctly with llvm-db.
  3. Tanya converted the LLVM regression test suite from QMTest to Dejagnu,
     fixing some long-standing problems with the test suite.
  4. Reid finished implementation of llvm-ar and added an llvm-ranlib tool,
     which allows LLVM to index .a files for faster link times.
  5. Reid has 'llvmc' fully functional in this release. We hope to switch
     over to using llvmc as the default compiler driver for the 1.5
     release. http://llvm.cs.uiuc.edu/docs/CompilerDriver.html
  6. LLVM is now much more compatible with Visual C++ 7.1, thanks to the
     efforts of Morten Ofstad, Jeff Cohen, and others. It is now possible
     to build and use LLVM for JIT applications with VC7.1, and LLVM now
     includes Visual Studio projects files in llvm/win32.
  7. Reid changed the makefiles to build tools into llvm/Debug/bin instead
     of llvm/tools/Debug. Make sure to remove the old directory when you
     upgrade (similarly for Release and Profile builds).
  8. We now host an "LLVM Developer Page", including mugshots of some of
     the LLVM hackers. If you'd like to be included, please send in a
     photo: http://llvm.cs.uiuc.edu/Developers.html

Core LLVM Changes:

  9. LLVM now includes an unreachable instruction and 'undef' value, which
     provide more information to the optimizer:
10. Reid contributed changes to allow the bytecode writer to automatically
     compress and decompress LLVM bytecode files with bzip2 compression,
     making them approximately 50% smaller.
11. Reid split all linking related functionality into a new lib/Linker
     directory and library. All .a file routines are in lib/Bytecode/Archive.
12. A new 'llvm/IntrinsicInst.h' header is available, which provides classes
     to simplify code that deals with intrinsic function calls.
13. Misha enhanced the JIT to not emit stubs for external functions like
     'printf' on targets that do not require them.
14. The JIT interfaces have been completely reworked to make them simpler,
     more efficient, and require less target-specific code.
15. LLVM now tracks target triplets for compiled LLVM modules, allowing
     code generators to be intelligently selected.

Documentation Changes:

16. John, Reid, and Tanya audited the documentation, making many
     corrections and updating several of the documents.
17. Reid fully documented the LLVM Makefile system in this
     document: http://llvm.cs.uiuc.edu/docs/MakefileGuide.html
18. Full documentation on LLVM constants was added to the LangRef
     document: http://llvm.cs.uiuc.edu/docs/LangRef.html#constants

Target Specific Code Generator Improvements:

19. Misha implemented the machine code emitter for the PowerPC target.
20. Nate substantially improved instruction selection in the PowerPC
     backend, allowing it to generate rlwimi, rlwinm, and other
21. Jeff Cohen contributed patches to allow the X86 backend to fold the
     addresses of globals more aggressively into X86 memory references.
22. John contributed a patch to the C backend to make it emit code that
     has fewer dynamic copies for PHI nodes, speeding up the resultant code.
23. The X86 backend now spills floating point values with 64-bits of
     precision instead of 80-bits. This speeds up floating point intensive
     programs dramatically (up to 2x), as 80-bit instructions are often
24. Nate fixed the PowerPC instruction selector to emit far fewer move
     instructions, improving compile time with the PowerPC backend.

Build System Improvements:

25. Reid improved the makefiles to build LLVM about twice as fast as
26. Reid added new standard targets to the LLVM makefiles, like
     dist-check. 'make install' now installs man pages for all tools.
     Doxygen documentation can now be built upon "make install" if it
     is configured with --enable-doxygen.
27. Reid changes the runtime libraries to build proper .a files instead of
     .bc files, allowing them to be specified multiple times without harm.
28. Reid changed libraries and object files generated by building LLVM all
     now have an LLVM prefix (preventing collisions with existing libraries)
29. Reid made our configure script more standard (PR256) and made it check
     for known good version numbers of tools.

Miscellaneous Improvements:

30. The -globalopt pass is more aggressive about optimizing away global
31. The -simplifycfg pass now performs simple code factoring in some
     cases, reducing code size.
32. gccld now supports both -S and -s options to strip all symbols or just
     debug symbols from the resultant binary (for compatibility with ld).
33. The C++ frontend no longer expands and emits all inline functions,
     even if they are unused. It now properly tracks which functions are
     used and only emits those that are needed.

Notable bug fixes:

34. A linker bug has been fixed, allowing all of the Fortran 77 SPEC
     benchmarks to work with f2c and LLVM.
35. PR139: Linker doesn't link objects/archives in order specified on the
     command line.
36. Several C/C++ front-end bugs, including PR244, 277, 360, 397, 421,
     424, 447, 459, and 461.
37. Several compile-time speedups are included in this release for various
     LLVM components.

Finally, here's a link to the Oct 11th status update, which includes more goodies that are new to the 1.4 release:

If you have any questions or comments about LLVM or any of the features
in this status update, please feel free to contact us on the llvmdev mailing list (llvmdev@cs.uiuc.edu)!