July Status Update
------------------
Hi everyone!
This month has been a busy month of cleanups and refinements, and marks
over a year of LLVM status updates :). LLVM is getting substantially
smaller (in memory footprint) and faster, received a few cool new
features, and has a few more fixed bugs. We are currently thinking about
unleashing the LLVM 1.3 release in about 3-4 weeks from now.
If you're interested in LLVM, have a few questions about it, or just want
to chat with the developers, you might want to drop in to the official
#llvm IRC Channel on irc.oftc.net. If you're running Mozilla and have
chatzilla installed, you can join by clicking here:
irc://irc.oftc.net/llvm
Anyway, here's the usual dose of good stuff people have been working on:
High-Level Changes:
1. Reid is continuing to work on PR122. In particular, the LLVM Type
class now no longer derives from the Value class, which is a huge
cleanup and a big fix for LLVM!
2. Brian and Misha finished conversion of the LLVM Command Guide to perl
POD format, which provides HTML and *man* pages for all of the LLVM
tools. Get your copy here: http://llvm.cs.uiuc.edu/docs/CommandGuide/
3. Tanya found and fixed all of the broken links on the LLVM web page.
4. Several nasty sources of non-determinism in the compiler have been
eliminated, including these passes: mem2reg, licm, domset, domtree,
simplifycfg, inline, scalarevolutions, argpromotion.
LLVM IR Size Reduction:
5. We've started to look at reducing the memory footprint of the various
LLVM IR classes. The meta-bug PR388 now tracks various ideas for
reducing the size of the LLVM IR: http://llvm.cs.uiuc.edu/PR388
6. Reid's patches for PR122 have reduced the size of the LLVM Type class
by 20 bytes by eliminating Value overhead from the Type class:
http://llvm.cs.uiuc.edu/PR388#c9
7. In addition, subsequent patches have shrunk the overhead of each Type
by 12 more bytes and the LLVM Instruction class also shrunk by 12
bytes since LLVM 1.2.
New Cool Features:
8. Reid finished up the LLVM bytecode analyzer tool, useful for
inspecting bytecode file internals:
http://llvm.cs.uiuc.edu/docs/CommandGuide/html/llvm-bcanalyzer.html
9. Reid completed the LLVM Bytecode Format Specification:
http://llvm.cs.uiuc.edu/docs/BytecodeFormat.html
10. LLVM now has a very simple (though quite effective) implementation of
a context-sensitive mod/ref analysis for global variables. For details,
see http://llvm.cs.uiuc.edu/docs/AliasAnalysis.html#globalsmodref
LLVM Core Additions:
11. The BinaryOperator class now has a BinaryOperator::createAdd(...)
method as a shortcut for BinaryOperator::create(Instruction::Add,
...). It also has methods for all of the other opcodes too :)
12. LLVM now has an llvm.isunordered intrinsic for unordered floating
point comparison support.
Code Generator Changes:
13. Vladimir Prus contributed a nice ConstantExpr lowering pass that makes
it substantially easier to write instruction selectors for LLVM.
14. The target-independent live-variable analysis is quicker and simpler
than before.
15. Vladimir Prus contributed code generator support for targets that have
object alignments bigger than their size (e.g. bytes aligned on 32-bit
boundaries).
16. Alkis implemented MachineFunction::viewCFG and ::viewCFGOnly methods,
which make it really easy to visualize machine code in a debugger
(operating like the Function::viewCFG method). Note that this does
not work with the SparcV9 target yet.
17. The LLVM llc and lli tools now support dynamically loaded target
implementations:
http://mail.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20040705/015916.html
C/C++ Front-end Changes:
18. Fixed Bug #377, which caused the C front-end to miscompile static
bitfield initializers in some cases. This bug affected 124.m88ksim.
19. The C front-end now supports C99 unordered comparison operations like
__builtin_islessequal.
Nightly Tester Related Changes:
20. Vladimir Merzliakov contributed changes to get the LLVM test suite
working on FreeBSD again and is hosting a FreeBSD nightly tester.
21. Reid is now hosting a nightly tester for an optimized LLVM build
(the existing Linux/X86 tester runs a debug build).
Miscellaneous Changes:
22. Reid wrote the utils/llvmgrep script to make it easy to grep through
the LLVM source code.
23. Reid fixed Value.h to no longer #include <iostream>. This means
compiles are faster, but you will probably have to add an explicit
#include to .cpp files not in CVS.
24. Reid wrote the Support/SetVector.h file, which provides a vector-like
object that does not allow duplicates to be inserted and supports
an efficient member query operation.
25. Perhaps most importantly, Brian updated the picture of Bitter Melon
on the demo page to a higher fidelity image!!
Here are some selected bugs fixed since the last status update:
C/C++ Front End: PR374, PR377, PR396
LLVM Core: PR391
Sparc: PR368
X86: PR366, PR369
... and here is the previous status update, just in case you forgot what
we did last time:
http://mail.cs.uiuc.edu/pipermail/llvm-announce/2004-June/000009.html
If you have any questions or comments about LLVM or the contents of this
status update, please feel free to email the llvmdev list!
-Chris
--
http://llvm.cs.uiuc.edu/
http://nondot.org/sabre/