New LLVM sparc backend

Hi everyone,

I'd like to let everyone know that LLVM has a new native Sparc backend available. This target is built with the LLVM target independent code generator, and can generate V8 or V9 binaries [1] using the 32-bit Sparc ABI.

The code generator is quite stable, compiling virtually all [2] of the llvm-test testsuite (including all of SPEC2K), and is quite performant (averaging ~7% faster on SPEC2K than GCC 3.4.5, with a lot of low-hanging things left). It is about 3700 lines of code for the entire port. A nightly tester is available here: http://llvm.cs.uiuc.edu/testresults/SPARC/index.html

To use it, you currently must build the C front-end with 32-bit sparc support (by passing --host=sparc-sun-solaris2.8 to the configure script, described here: http://llvm.cs.uiuc.edu/docs/CFEBuildInstrs.html), and then compile LLVM programs like normal. The new target is triggered by this difference in target triple: the new target matches "sparc-sun-solaris*" the old one matches "sparcv9-sun-solaris*".

As many know, LLVM has long had sparc support with the LLVM native "SparcV9" target. This target was the first code generator built for LLVM and has served us well for many years. One disadvantage of this port is that it was built when LLVM was very immature and was lacking a lot of the code generator infrastructure it now has. As such, the target has not received the maintenance it has deserved and is not integrated to use the target independent code generator (though it *has* heavily influenced the new code generator).

I think that it makes the most sense to ship LLVM 1.7 with both targets, and (assuming everything is working as it should) move the V9 backend to a separate CVS repository in the LLVM 1.8 timeframe. This gives us time for sparc users to try out the new backend and report problems (using the existing SparcV9 backend if there are any), and keeps the existing sparc backend available for those who need it afterwards. If desired, we can add 64-bit ABI support to the new target in 1.8 once the target triple is available.

If you're working on sparc machines, give it a try!

-Chris

[1] Selectable with the -mcpu=v8/v9 option.
[2] There are 4 failures in the llvm-test testsuite, which I'm working on
     when I have time.