Indirect Addressing Merged In LLVM R600 Back-End
Merged into the mainline LLVM repository on Wednesday was support for indirect addressing within AMD's R600 GPU back-end.
It was back in January that the R600 GPU back-end picked up LLVM addressing support -- a missing capability of the LLVM back-end since its premiere in late 2011. After going through four code revisions, the indirect addressing support was finally ready for being merged into the mainline LLVM code-base and will be found in the LLVM 3.3 release later in the year where the R600 GPU back-end will officially appear for the first time.
This LLVM back-end is required for the OpenCL support within the Radeon Gallium3D graphics driver for Radeon HD 5000 series and newer graphics cards. The back-end can also optionally be used as the shader compiler for the Gallium3D driver, though that's not AMD's primary emphasis with its development. The Radeon Gallium3D drivers in Mesa don't yet support indirect addressing translations during the TGSI to LLVM pass so right now this doesn't work for graphics nor is it really optimized for that. Indirect addressing allows for a virtual address to be passed that then ends up mapping to the actual address, which is more important for compute scenarios.
This indirect addressing support doesn't work right now for the Radeon HD 7000 (or HD 8000) series but only the HD 5000/6000 series.
The support to LLVM for the R600 indirect addressing can be seen with this commit. The support was added by Tom Stellard at AMD.