LLVM Status Update

Hi all LLVMers!

It's time for another dose of LLVM status update. Since 1.1, we've fixed
34 new LLVM bugs (including a lot of quality-of-implementation bugs), sped
up the optimizer, and even implemented some new features. Here are the

1. Misha reorganized the sparc backend to be a bit more modular and
    cleaned up the asmwriter.
2. The JIT now lazily initializes global variables instead of initializing
    them all at once, which leads to faster startup times, especially for
    C++ programs.
3. LLVM now has a (partially implemented) source-level debugger! This
    debugger can currently walk through the program (step,next,finish,run,
    cont,etc) and inspect the stack, but can't set breakpoints or print
    program variables. If you're interested, the philosophy and design of
    the debugger are described here:
    This will continue to be worked on in the the coming months, but we
    don't have a specific ETA for a finished and completely useful debugger.
4. Alkis has been working on the linear scan register allocator. It now
    outperforms the local allocator in almost all cases, and there is one
    big improvement he has left to do. The linear scan allocator will
    probably be the default for 1.2.
5. The C front-end now correctly turns 'extern inline' into LLVM linkonce
    linkage, giving the optimizer more freedom.
6. The LLVM constant folding interfaces are much simpler and cleaner. If
    you want to fold a constant expression, just use ConstantExpr::get*.
7. Bytecode files have been shrunk for 1.2 fairly substantially for large
    programs (15-30%). We are now running out of obvious things that can
    be done to shrink bytecode files (aside from using bzip2 or gzip :slight_smile:
8. Brian checked in a _skeletal_ PowerPC backend that he had in his tree.
    This backend doesn't work, and is missing several large pieces, but
    could be a starting point for someone interested in starting the
9. LLVM now supports -0.0 much better, and support for floating point
    constants on big-endian 32-bit targets (like powerpc) is not
    completely broken now.
10. John merged new bits from the GCC CVS repository into our C/C++
    front-end. We are still lagging, but a lot closer to current.
11. Alkis simplified the way that the X86 backend handles two address
    instructions (such as REG += REG).
12. John fixed the gccld -native option to work correctly with crtend.a
13. The loadvn/gcse pass, the inliner, and the scalarerepl/mem2reg passes
    have all been dramatically sped up in cases where the program has
    large basic blocks. For example, the testcase in PR209 went from
    taking 300s to optimize to 2s.
14. Brian fixed a problem that could occur when using the precompiled C
    front-end on power-pc, which resulted in an obscure "can't find a rule
    to build x" when building the runtime libraries.
15. As recently noted, TableGen is now documented.

At this point, we don't have immediate plans for the 1.2 release, but the
magic eightball say that a release in the next month or so is pretty
likely. If you are working with LLVM and would like to get these updates,
you can choose to work with LLVM CVS. As always, if you have any
questions or comments, feel free to send them our way!

Here's the previous status update: