An ‘ALLVM system’ is one in which all software components — except a small set needed for bootstrapping — are represented in a virtual instruction set instead of native machine code. The goal of the approach is to enable sophisticated compiler analyses and transformations to be applied across arbitrary software boundaries — not just caller-callee boundaries analyzed using traditional interprocedural techniques, but also several others: between applications and third-party libraries; applications and the underlying operating system; and between communicating processes in a distributed system.
The key difference between LLVM and ALLVM is that LLVM enables individual software components to be analyzed and optimized throughout their lifetime (“lifelong compilation”) whereas ALLVM enables all the software on a system to be analyzed and optimized together (“system-wide, lifelong compilation”). Several research projects under the ALLVM umbrella are exploring the performance, reliability, security, and software engineering benefits of the ALLVM approach.
This project is funded by the Office of Naval Research, the National Science Foundation, the Semiconductor Research Corporation, DARPA, and the Department of Defense.