Ответы:
LLVM - это библиотека, которая используется для конструирования, оптимизации и производства промежуточного и / или двоичного машинного кода.
LLVM может использоваться в качестве среды компилятора, где вы предоставляете «внешний конец» (анализатор и лексер) и «внутренний конец» (код, который преобразует представление LLVM в фактический машинный код).
LLVM также может выступать в качестве JIT-компилятора - он поддерживает генерацию сборок x86 / x86_64 и PPC / PPC64 с быстрой оптимизацией кода, нацеленной на скорость компиляции.
Если вам интересно, вы можете поиграть с машинным кодом LLVM, который генерируется из кода C или C ++ на их демонстрационной странице , но демонстрационная страница в настоящее время отключена с 2013 года.
Хорошее резюме LLVM это:
На фронтенде у вас есть Perl и многие другие языки высокого уровня. На сервере у вас есть встроенный код, который запускается непосредственно на компьютере.
В центре ваше промежуточное представление кода. Если каждый язык высокого уровня может быть представлен в этом формате IR LLVM, то инструменты анализа, основанные на этом IR, могут быть легко использованы повторно - это основное обоснование.
LLVM (используется для обозначения «Низкоуровневая виртуальная машина», но больше не является) - это инфраструктура компилятора, написанная на C ++, которая предназначена для оптимизации написанных программ во время компиляции, во время соединения, во время выполнения и во время простоя. в произвольных языках программирования. Первоначально реализованный для C / C ++, независимый от языка дизайн (и успех) LLVM породил широкий спектр внешних интерфейсов, включая Objective C, Fortran, Ada, Haskell, байт-код Java, Python, Ruby, ActionScript, GLSL. , и другие.
Прочитайте это для более подробного объяснения.
Также проверьте Unladen Swallow
Согласно книге «Начало работы с основными библиотеками LLVM» (c):
На самом деле, имя LLVM может относиться к любому из следующего:
Проект / инфраструктура LLVM: это зонтик для нескольких проектов, которые вместе образуют полный компилятор: внешние интерфейсы, серверные части, оптимизаторы, ассемблеры, компоновщики, libc ++, compiler-rt и механизм JIT. Слово «LLVM» имеет это значение, например, в следующем предложении: «LLVM состоит из нескольких проектов».
Компилятор на основе LLVM: это компилятор, созданный частично или полностью с использованием инфраструктуры LLVM. Например, компилятор может использовать LLVM для внешнего интерфейса и внутреннего интерфейса, но использовать системные библиотеки GCC и GNU для выполнения окончательного соединения. LLVM имеет это значение в следующем предложении, например: «Я использовал LLVM для компиляции программ на C для платформы MIPS».
Библиотеки LLVM: это повторно используемая часть кода инфраструктуры LLVM. Например, LLVM имеет это значение в предложении: «Мой проект использует LLVM для генерации кода через свою среду компиляции Just-in-Time».
Ядро LLVM: Оптимизация, которая происходит на уровне промежуточного языка, и бэкэнд-алгоритмы образуют ядро LLVM, с которого начался проект. LLVM имеет это значение в следующем предложении: «LLVM и Clang - это два разных проекта».
LLVM IR: это промежуточное представление компилятора LLVM. LLVM имеет это значение при использовании в таких предложениях, как «Я создал интерфейс, который переводит мой собственный язык в LLVM».
LLVM - это библиотека, используемая для создания компиляторов и / или программного обеспечения, ориентированного на язык. Основная суть в том, что хотя у вас есть gcc, который, вероятно, является наиболее распространенным набором компиляторов, он не предназначен для повторного использования, т.е. трудно взять компоненты из gcc и использовать его для создания собственного приложения. LLVM хорошо решает эту проблему, создавая набор «модульных и многократно используемых технологий компиляторов и наборов инструментов», которые каждый может использовать для создания компиляторов и языкового программного обеспечения.
Инфраструктура компилятора LLVM особенно полезна для выполнения оптимизаций и преобразований в коде. Он также состоит из ряда инструментов, обслуживающих различные виды использования. llvm-prof - это инструмент профилирования, который позволяет вам выполнять профилирование выполнения для определения горячих точек программы. Opt - это инструмент оптимизации, который предлагает различные этапы оптимизации (например, удаление мертвого кода).
Важно отметить, что LLVM предоставляет вам библиотеки для написания ваших собственных пропусков. Например, если вам требуется добавить проверку диапазона для определенных аргументов, которые передаются в определенные функции Программы, достаточно написать простой проход LLVM.
Для получения дополнительной информации о написании вашего собственного Pass, проверьте это http://llvm.org/docs/WritingAnLLVMPass.html