LLVM - это библиотека, которая используется для конструирования, оптимизации и производства промежуточного и / или двоичного машинного кода.
LLVM может использоваться в качестве среды компилятора, где вы предоставляете «внешний конец» (анализатор и лексер) и «внутренний конец» (код, который преобразует представление LLVM в фактический машинный код).
LLVM также может выступать в качестве JIT-компилятора - он поддерживает генерацию сборок x86 / x86_64 и PPC / PPC64 с быстрой оптимизацией кода, нацеленной на скорость компиляции.
Если вам интересно, вы можете поиграть с машинным кодом LLVM, который генерируется из кода C или C ++ на их демонстрационной странице , но демонстрационная страница в настоящее время отключена с 2013 года.
Ссылка в ответе гласит: «Демонстрационная страница LLVM в настоящее время отключена».
EngrStudent
5
ellcc.org/demo/index.cgi - это еще один способ поиграть с компиляцией C / C ++ через LLVM для различных целей, включая промежуточный код
Том Гудфеллоу
1
Можете ли вы привести пример того, что это значит?
Migrate2Lazarus посмотреть мой профиль
Теперь вы можете играть с LLVM, сгенерированным из C / C ++, используя Compiler Explorer. godbolt.org
Галактика
112
Хорошее резюме LLVM это:
На фронтенде у вас есть Perl и многие другие языки высокого уровня. На сервере у вас есть встроенный код, который запускается непосредственно на компьютере.
В центре ваше промежуточное представление кода. Если каждый язык высокого уровня может быть представлен в этом формате IR LLVM, то инструменты анализа, основанные на этом IR, могут быть легко использованы повторно - это основное обоснование.
Так что кажется, что LLVM полезен для разработчиков компиляторов. Должен ли программист заботиться, компилирует ли он со стандартным компилятором или компилятором, основанным на LLVM, помимо анализа сгенерированного кода независимо от исходного кода?
Джинави
4
если вы можете скомпилировать LLVM для его IR, то вам будет доступно множество инструментов для анализа IR. Но если ваш инструмент способен анализировать только собственные двоичные файлы (например, x86), то не имеет значения, является ли это двоичными файлами, сгенерированными LLVM, или сгенерированными с помощью gcc, или сгенерированными Intel-компилятором.
Питер Теох
73
LLVM (используется для обозначения «Низкоуровневая виртуальная машина», но больше не является) - это инфраструктура компилятора, написанная на C ++, которая предназначена для оптимизации написанных программ во время компиляции, во время соединения, во время выполнения и во время простоя. в произвольных языках программирования. Первоначально реализованный для C / C ++, независимый от языка дизайн (и успех) LLVM породил широкий спектр внешних интерфейсов, включая Objective C, Fortran, Ada, Haskell, байт-код Java, Python, Ruby, ActionScript, GLSL. , и другие.
.. так, что доктора пытаются сказать; в то время как LLVM является аббревиатурой для низкоуровневой виртуальной машины , проект называется просто LLVM , а не полностью прописанные слова.
Подведем итоги комментирования. «Низкоуровневая виртуальная машина (LLVM)» должна быть чем-то вроде «LLVM (что означало« Низкоуровневая виртуальная машина »ранее в течение срока службы проектов)»
На самом деле, имя 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 - это библиотека, а Clang - это компилятор?
Абдул
11
Clang является компилятором внешнего интерфейса C / C ++ LLVM. Он преобразует код C в битовый код LLVM, который переводится на некоторый язык ассемблера внутренним компилятором.
Борис Малдер
6
Инфраструктура компилятора LLVM особенно полезна для выполнения оптимизаций и преобразований в коде. Он также состоит из ряда инструментов, обслуживающих различные виды использования. llvm-prof - это инструмент профилирования, который позволяет вам выполнять профилирование выполнения для определения горячих точек программы. Opt - это инструмент оптимизации, который предлагает различные этапы оптимизации (например, удаление мертвого кода).
Важно отметить, что LLVM предоставляет вам библиотеки для написания ваших собственных пропусков. Например, если вам требуется добавить проверку диапазона для определенных аргументов, которые передаются в определенные функции Программы, достаточно написать простой проход LLVM.
Ответы:
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 - это библиотека, используемая для создания компиляторов и / или программного обеспечения, ориентированного на язык. Основная суть в том, что хотя у вас есть gcc, который, вероятно, является наиболее распространенным набором компиляторов, он не предназначен для повторного использования, т.е. трудно взять компоненты из gcc и использовать его для создания собственного приложения. LLVM хорошо решает эту проблему, создавая набор «модульных и многократно используемых технологий компиляторов и наборов инструментов», которые каждый может использовать для создания компиляторов и языкового программного обеспечения.
источник
Инфраструктура компилятора LLVM особенно полезна для выполнения оптимизаций и преобразований в коде. Он также состоит из ряда инструментов, обслуживающих различные виды использования. llvm-prof - это инструмент профилирования, который позволяет вам выполнять профилирование выполнения для определения горячих точек программы. Opt - это инструмент оптимизации, который предлагает различные этапы оптимизации (например, удаление мертвого кода).
Важно отметить, что LLVM предоставляет вам библиотеки для написания ваших собственных пропусков. Например, если вам требуется добавить проверку диапазона для определенных аргументов, которые передаются в определенные функции Программы, достаточно написать простой проход LLVM.
Для получения дополнительной информации о написании вашего собственного Pass, проверьте это http://llvm.org/docs/WritingAnLLVMPass.html
источник