[llvm-announce] LLVM 1.5 Release and Status Update!
sabre at nondot.org
Wed May 18 13:06:12 PDT 2005
The LLVM 1.5 is out! Get it here:
http://llvm.cs.uiuc.edu/releases/ or read about it here:
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
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
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.
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
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).
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.
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
29. The llvm-test suite works much better on FreeBSD and Darwin.
30. Nightly tester output is now archived on the llvm-testresults mailing
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
PR517: [llvm-gcc] Crash compiling bitfield <-> aggregate assignment
PR520: [llvm-g++] Error compiling virtual function thunk with an
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:
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: :)
More information about the llvm-announce