LLVM (ранее Low Level Virtual Machine) – универсальная система анализа, трансформации и оптимизации программ, реализующая виртуальную машину с RISC-подобными инструкциями. Может использоваться как оптимизирующий компилятор этого байткода в машинный код для различных архитектур либо для его интерпретации и JIT-компиляции (для некоторых платформ).
LLVM (при помощи различных фронтендов, в том числе сторонних) позволяет компилировать программы, написанные на языках С, C++, Objective-C, Fortran, Ada, Haskell, Java, Python, Ruby, JavaScript, GLSL. В рамках проекта LLVM был разработан фронтенд Clang для языков C и C++ и версия GCC, использующие llvm в качестве бэкенда. В компиляторе Glasgow Haskell Compiler также реализована компиляция посредством llvm. Существует множество программ, использующих данную инфраструктуру.
В основе LLVM лежит промежуточное представление кода (Intermediate Representation, IR), над которым можно производить трансформации во время компиляции, компоновки и выполнения. Из этого представления генерируется оптимизированный машинный код для целого ряда платформ, как статически, так и динамически (JIT-компиляция). LLVM 3.1 поддерживает статическую генерацию кода для x86, x86-64, ARM, PowerPC, SPARC, MIPS, Qualcomm Hexagon. JIT (генерация машинного кода во время исполнения) поддержан для архитектур x86, x86_64, PowerPC, MIPS и частично ARM (только целочисленные, без NEON и Thumb).
LLVM написана на C++ и портирована на большинство UNIX-систем и Microsoft Windows. Система имеет модульную структуру, отдельные ее модули могут быть встроены в различные программные комплексы, она может расширяться дополнительными алгоритмами трансформации и кодогенераторами для новых аппаратных платформ.
В LLVM включена обёртка API для OCaml (Objective Caml).
Ссылки