Why IBM Now Views LLVM As Being Critical Software
It wasn't until the middle of 2012 that IBM viewed LLVM as being "critical" to support but since then they have decided to fully support LLVM across all IBM server platforms. Last week in Paris at the European LLVM Meeting, one of their developers talked about the tipping point in supporting LLVM on IBM hardware and their current development status.
Ulrich Weigand of IBM was the compiler developer talking at the European LLVM Meeting in France last week. Weigand said until recently LLVM wasn't viewed as critical for enterprise Linux platforms and IBM's Linux Technology Center wasn't interested in fully supporting a second toolchain (after GCC), but then last year they decided to support LLVM across IBM server platforms. IBM LLVM support comes in the form of improvements to the 64-bit PowerPC back-end for their IBM POWER servers and creating a new SystemZ back-end for their mainframe systems.
One of the important LLVM uses that sparked IBM's attention was LLVM beginning to be adopted for a Just-In-Time (JIT) engine. LLVM is now widely used when it comes to Mesa's LLVMpipe Gallium3D driver as a software fall-back in cases of no hardware acceleration. With the latest GNOME release requiring 3D graphics or to use LLVMpipe, enterprise Linux distributions (RHEL) will soon require this LLVM support. There's also "certain proprietary database applications" using LLVM JIT for compiling SQL stored procedures. Beyond that, Mono and plenty of other projects are also using LLVM JIT.
Another main reason for IBM gaining interest in LLVM is that it's become a customer requirement and there's interesting LLVM/Clang advantages. Among the mentioned advantages were Address Sanitizer and Thread Sanitizer and Clang's better error messages over GCC. "Overall: LLVM support seen as critical now."
With LLVM now being critical to IBM, developers have made various improvements and fixes to the PowerPC back-end. IBM has also contributed PowerPC build bots for testing the latest LLVM code. New features provided to the back-end is improved code generation with compile-time PowerPC long double support, fully-implemented TLS support, medium/large code model support, and some Altivec enhancements. There's also been 64-bit MCJIT support, Assembler parser support, and disassembler support.
Some of the future work IBM has planned for the LLVM PowerPC back-end includes improved ISB support for current processors, performance tuning with instruction scheduling and benchmark analysis, and potential 32-bit improvements.
The other back-end IBM has been working on is for SystemZ. As luck would have it, just yesterday Clang SystemZ support was merged. Years ago there was a SystemZ back-end but it was dropped in 2011 over lack of maintenance. This new back-end is somewhat based on the old back-end and supports the 64-bit z/Architecture, support for Z10 processors and newer, Linux OS support, and focuses on features and correctness over performance.
The LLVM SystemZ back-end now works with support for the Clang C/C++ compiler, integrated assembler, assembler parser, and MCJIT. Right now LLVM is performing about 15% worse than GCC for SystemZ and about 7% worse for PowerPC, which are areas that will warrant further investigation. In comparing LLVM and GCC, Ulrich Weigand noted there's many similarities but LLVM seems more flexible for handling target-specific passes and overriding common passes.
For those that weren't in attendance at the 2013 European LLVM Meeting, there's PDF slides and a MOV video.
Latest Linux Hardware Reviews
Latest Linux Articles
Latest Linux News
Latest Forum Discussions