LLVM 1.5 Release and Status Update!

The LLVM 1.5 is out! Get it here:
http://llvm.cs.uiuc.edu/releases/ or read about it here: http://llvm.cs.uiuc.edu/releases/1\.5/docs/ReleaseNotes\.html\#whatsnew

This release adds several new major features to the LLVM compiler, allows it to be used in domains where it couldn't before (e.g. for functional languages), supports new targets, generates faster code, and is much easier to port to a new target than before.

Here are some of the biggest changes since the last status update (which also includes new features from 1.4). You can read the previous status update here: http://mail.cs.uiuc.edu/pipermail/llvm-announce/2005-February/000015.html

High-Level Changes:

   1. Duraid contributed a shiny new IA-64 backend (still beta).
   2. Andrew has fixed many bugs in the Alpha backend, it it is making a
      lot of progress.
   3. The new instruction selection framework is complete and in heavy
      use. Many extensions are still possible, but the basic functionality
      works well.
   4. LLVM now supports per-function calling conventions, allowing us to
      support targets with multiple cc's (e.g. fastcall/stdcall on X86),
      and convention changing compiler flags (e.g. GCC's -mregparm).
   5. LLVM now supports proper tail calls, as required to implement
      functional languages (such as Scheme and Haskell) efficiently.
      For more information, see:
   6. Misha updated the llvm-tv (LLVM Transformation Visualizer) project to
      work with LLVM CVS.
   7. The LLVM_LIB_SEARCH_PATH environment still works, but should not
      be needed for most people now. llvm-gcc now always includes the
      libraries in <LLVMGCCDIR>/lib.

Optimization Changes:

   8. Reid has started a new -simplify-libcalls pass to optimize standard
      library function calls (e.g. it turns strcat(P, "foo") into
      memcpy(P+strlen(P), "foo", 4) and has implemented many transforms.
   9. The globalsmodref alias analysis generates more precise results.
  10. Several bugs in the andersensaa and steensaa passes were fixed,
      and their alias and mod/ref precision has improved.
  11. The optimizer now eliminates simple cases where redundant conditions
      exist between neighboring blocks.
  12. The -prune-eh pass now detects no-return functions in addition to the
      no-unwind functions it did before.

Code Generator Changes:

  13. The code generator now tracks function live-in registers explicitly,
      instead of requiring the target to generate 'implicit defs' at the
      entry to a function.
  14. Nate implemented the integer division by a constant strength
      reduction algorithm that uses multiplication by a magic constant.
  15. Duraid implemented the multiplication by a constant strength
      reduction algorithm that emits sequences of shift/adds.
  16. tblgen now allows lazy resolution of variables, making it easier to
      write more expressive and compact .td files in some cases.
  17. The code generator now compiles fabs/fneg to assembly instructions
      when possible.
  18. Morton Ofstad contributed generic codegen support and X86 backend
      support for sin/cos/sqrt.
  19. Andrew contributed initial patches to track the LLVM pointer
      that SelectionDAG nodes point to, allowing the code generator to use
      LLVM alias analysis info (it does not currently use it though).

Target Changes:

  20. Nate wrote a new PowerPC instruction selector using the
      new SelectionDAG framework.
  21. Nate added several optimizations to the PPC backend, including
      support for generating FMA instructions and using recording ("dot")
      forms of various PPC instructions.
  22. The X86 backend uses a new SelectionDAG-based instruction selector.
  23. The X86 codegen attempts to order code to reduce register pressure.
      However, the current implementation still has several deficiencies.
  24. The C backend should no longer produce code that crashes ICC 8.1.

Other Changes:

  25. Reid and Andrew enhanced the LLVM configure script to support an
      --enable-targets= flag which permits building a subset of the
      targets (instead of all of them all the time).
  26. Jeff continued working on the Visual C++ build scripts and
      portability to native Win32. Most LLVM tools work natively in win32
      now, but there is no native C/C++ front-end support yet (must use
  27. Adam Treat contributed patches to the LLVM linker to handle programs
      containing combinations of native and bytecode libraries much
  28. Adam Treat contributed patches to the LLVM linker, allowing it to
      build shared libraries with 'llvm-gcc -shared' and -Wl,-native
      or -Wl,-native-cbe.
  29. The llvm-test suite works much better on FreeBSD and Darwin.
  30. Nightly tester output is now archived on the llvm-testresults mailing
      list: http://mail.cs.uiuc.edu/pipermail/llvm-testresults/
  31. Evan Jones contributed patches to improve our doxygen output.
  32. Misha renamed the llvm 'extract' tool to 'llvm-extract' (makes sense!)
  33. Justin Wick contributed support for a new llvm.prefetch intrinsic.
      llvm-gcc now compiles __builtin_prefetch to it.
  34. Andrew added llvm.ctpop,llvm.cttz and llvm.ctlz intrinsics. llvm-gcc
      now codegens __builtin_popcount, etc to these intrinsics.
  35. Duraid contributed patches to build LLVM on HP-UX with the GNU
      toolchain. He also got it working with aCC, but it requires several
      work-arounds for the (rather old) STL it provides.

Notable Bugs Fixed:

   PR496: Cannot build llvm without llvm-gcc
   PR510: [llvmgcc] Field offset miscalculated for some structure fields
          following bit fields
   PR513: [llvm-g++] Temporary lifetimes incorrect for short circuit
          logical operations
   PR517: [llvm-gcc] Crash compiling bitfield <-> aggregate assignment
   PR520: [llvm-g++] Error compiling virtual function thunk with an
          unnamed argument
   PR522: [llvm-gcc] Crash on certain C99 complex number routines
   PR529: [llvm-g++] Crash using placement new on an array type
   PR562: [llvm-gcc] crash on global variable nested union with initializer

Finally, here's the previous status update: http://mail.cs.uiuc.edu/pipermail/llvm-announce/2005-February/000015.html

As usual, if you have any questions or comments about LLVM or any of the features in this status update, please feel free to contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)!

On a more personal note, I recently finished up my Ph.D. In June, I'll be joining Apple Computer's Compiler and Tools group, where I will continue open-source LLVM development. Stay tuned for good things to come! Oh yeah, if you are interested in some of the nifty things that can be done with LLVM, take a look at my thesis: :slight_smile: http://llvm.cs.uiuc.edu/pubs/2005-05-04-LattnerPHDThesis.html