Stuff I've done with LLVM
- Written a BigBlock register allocator. It gives good quality
allocations on huge basic blocks, and it does so quickly. It was shipped
with releases 2.1 through 2.5. Currently, LLVM does not include a
usable allocator for large (machine generated) blocks. One
workaround may be to artificially break up large basic blocks into chains of
smaller ones in an effort to escape the local allocator's failure mode.
Another is to just reimplment BigBlock or another simple (greedy)
allocator.
- Written an IA64 backend. It was shipped with version 1.5 through 2.5,
but only worked properly around 1.8. If you still need to
generate IA64 code when using LLVM, you can either:
- Write a new backend (much easier these days thanks to vast
improvements in LLVM backend infrastructure over the past few years)
- Dig up the existing backend and get it working again
- Use the LLVM C backend and some other IA64 compiler
- Write an LLVM/WHIRL translator and use open64/pro64.
The first of these is perhaps the most practical, the last of these the most
interesting.
- Written a bunch of other backends and code mangling passes for some
special-purpose processors.
Stuff I'm doing with LLVM
Stuff I would like to do with LLVM
- Add better support for interesting architectures. It's certainly
possible to write backends for VLIW-like processors (including DSPs etc)
right now, but there's little support for it, so you're basically on your own.
It would be great to add infrastructure to better support architectures that do not
do large amounts of scheduling in hardware, but the sheer breadth of such architectures makes it
difficult to imagine what exactly such support might involve.
Possibly useful links
- A bunch of machines build LLVM daily, you can see the
results here.