Так недавно, пытаясь отточить мои навыки сборки, я написал ОЧЕНЬ простой компилятор для игрушечного языка на С++. Он запускает одиночный проход и прямо испускает код во время фазы синтаксического анализа в несколько строк, каждый из которых представляет часть кода (т.е. Один представляет section .bss
, а другие представляют .data
и .text
). Впоследствии эти строковые потоки записываются в файл, и я использую NASM и gcc для их сборки и связывания. Я знаю, что этот однопроходный подход ужасно неэффективен, но опять же, это было больше упражнением в понимании стадии генерации кода, чем что-либо еще. Во всяком случае, я хотел бы изменить свой код, чтобы напрямую испускать LLVM IL вместо сырой сборки, снова как упражнение для обучения. Есть ли какой-либо вводный уровень для LLVM IL? Или, что еще лучше, инструмент для определения эквивалентного кода IL для линии сборки? Я посмотрел, и я нашел только полную спецификацию, которая является ПУТЕМ больше информации, чем мне нужно.
Портирование компилятора из x86 в LLVM
Ответ 1
Ссылка на LLVM IR language доступна здесь. Обратите внимание, что это подробная справочная страница, а не учебник. Прямого соответствия 1-к-1 между сборкой x86 и LLVM IR нет, хотя, поскольку LLVM IR является более высокоуровневым и более общим, чем сборка x86, не должно быть слишком сложно адаптировать компилятор от испускания x86 к испусканию LLVM IR.
Официальная документация LLVM поставляется с подробным учебным пособием, который является для вас самым лучшим стартовым местом - он просматривает создание компилятора игрушек из упрощенного языка программирования высокого уровня для LLVM IR. Посредством этого вы узнаете многие ключевые понятия LLVM и сможете эффективно использовать вышеупомянутую ссылку на язык.
Если вы обнаружили какие-либо проблемы с учебником, сообщите об этом в LLVM-трекер или список рассылки. Ожидается, что учебное пособие будет функционировать, и любая заявленная проблема будет исправлена.
Другим хорошим исходным ресурсом для понимания LLVM IR является онлайн-демонстрационная страница. Это позволяет вам скомпилировать фрагменты кода C до LLVM IR онлайн (без установки чего-либо) и должно быть очень полезным в понимании того, как базовые конструкции программирования могут быть представлены в LLVM IR.