LLVM 17: инфраструктура для разработки компиляторов
Здесь можно купить книгу "LLVM 17: инфраструктура для разработки компиляторов" в печатном или электронном виде. Также, Вы можете прочесть аннотацию, цитаты и содержание, ознакомиться и оставить отзывы (комментарии) об этой книге.
Место издания: Москва
ISBN: 978-5-93700-303-4 (рус.). – ISBN 978-1-83763-134-6 (англ.)
Страниц: 372
Артикул: 112913
Возрастная маркировка: 16+
Краткая аннотация книги "LLVM 17: инфраструктура для разработки компиляторов"
Перед вами руководство по LLVM 17 – системе разработки компиляторов и сопутствующих библиотек на C++. Вы узнаете, как написать и использовать реальные компиляторы, включая фронтальную часть, конвейер оптимизации и кодогенератор.Книга ориентирована на разработчиков компиляторов, энтузиастов и инженеров, только начинающих знакомство с LLVM. Также будет полезна программистам на C++, которые хотели бы использовать в своей работе инструменты для анализа улучшения кода.
Содержание книги "LLVM 17: инфраструктура для разработки компиляторов "
От издательства
Об авторах
О рецензентах
Предисловие
Часть I. ОСНОВЫ ПОСТРОЕНИЯ С ПОМОЩЬЮ LLVM
Глава 1. Установка LLVM
Компиляция LLVM или установка двоичных файлов
Подготовка среды
Ubuntu
Fedora и RedHat
FreeBSD
OS X
Windows
Клонирование репозитория и сборка из исходного кода
Конфигурирование Git
Клонирование репозитория
Создание каталога сборки
Генерирование файлов системы сборки
Компиляция и установка LLVM
Настройка процесса сборки
Переменные, определенные CMake
Использование конфигурационных переменных сборки, определенных LLVM
Резюме
Глава 2. Структура компилятора
Структурные элементы компилятора
Язык арифметических выражений
Формализм для определения синтаксиса языка программирования
Как грамматика помогает автору компилятора
Лексический анализ
Рукописный лексический анализатор
Синтаксический анализ
Рукописный синтаксический анализатор
Абстрактное синтаксическое дерево
Семантический анализ
Генерирование кода с помощью кодогенератора LLVM
Текстовое представление LLVM IR
Генерирование IR-кода на основе AST
Недостающие части – драйвер и библиотека времени выполнения
Резюме
Часть II. ОТ ИСХОДНОГО КОДА К ГЕНЕРИРОВАНИЮ МАШИННОГО КОДА
Глава 3. Преобразование исходного файла в абстрактное синтаксическое дерево
Определение реального языка программирования
Создание структуры проекта
Управление входными файлами компилятора
Работа с сообщениями для пользователя
Структура лексического анализатора
Построение парсера с рекурсивным спуском
Выполнение семантического анализа
Обработка области видимости имен
Использование RTTI в стиле LLVM для AST
Создание семантического анализатора
Резюме
Глава 4. Основы генерирования IR-кода
Генерирование IR-кода по AST
Разбираемся в IR-коде
Подход «загрузи и сохрани»
Отображение потока управления на простые блоки
Использование нумерации AST для генерирования IR-кода в форме SSA
Определение структуры данных для хранения значений
Чтение и запись значений, локальных в простом блоке
Поиск значения в блоках-предшественниках
Оптимизация сгенерированных команд phi
Запечатывание блока
Создание IR-кода для выражений
Порождение IR-кода функции
Управление видимостью с помощью стиля компоновки и декорирования имен
Преобразование типа из описания в AST в типы LLVM
Создание IR-кода функции в LLVM
Создание IR-кода тела функции
Создание модуля и драйвера
Обертывание всего кодогенератором
Инициализация класса целевой машины
Порождение ассемблерного и объектного кодов
Резюме
Глава 5. Генерирование IR-кода для конструкций языка высокого уровня
Технические требования
Работа с массивами, структурами и указателями
Работа с двоичным интерфейсом приложений
Создание IR-кода для классов и виртуальных функций
Реализация одиночного наследования
Расширение одиночного наследования за счет интерфейсов
Добавление поддержки множественного наследования
Резюме
Глава 6. Генерирование более сложного IR-кода
Возбуждение и перехват исключений
Возбуждение исключения
Обработка исключения
Включение кода обработки исключений в приложение
Генерирование метаданных для анализа псевдонимов на основе типов
Зачем нужны дополнительные метаданные
Создание TBAA-метаданных в LLVM
Добавление TBAA-метаданных в tinylang
Добавление отладочных метаданных
Общая структура отладочных метаданных
Прослеживание переменных и их значений
Добавление номеров строк
Добавление поддержки отладки в tinylang
Резюме
Глава 7. Оптимизация IR-кода
Технические требования
Диспетчер проходов LLVM
Реализация нового прохода
Разработка прохода ppprofiler в виде плагина
Добавление прохода в дерево исходного кода LLVM
Использование прохода ppprofiler совместно с инструментами LLVM
Добавление конвейера оптимизации к компилятору
Создание конвейера оптимизации
Расширение конвейера проходов
Резюме
Часть III. ПЕРЕХОД НА СЛЕДУЮЩИЙ УРОВЕНЬ LLVM
Глава 8. Язык TableGen
Технические требования
Знакомство с языком TableGen
Эксперименты с языком TableGen
Определение записей и классов
Создание сразу нескольких записей с помощью мультиклассов
Имитация вызовов функций
Генерирование C++-кода по файлу на языке TableGen
Определение данных на языке TableGen
Реализация кодогенератора TableGen
Недостатки TableGen
Резюме
Глава 9. JIT-компиляция
Технические требования
Обзор реализации JIT-компиляции в LLVM и ее применений
Применение JIT-компиляции для непосредственного выполнения
Знакомство с программой lli
Реализация собственного JIT-компилятора с помощью LLJIT
Интеграция движка LLJIT в калькулятор
Изменения в генерировании кода с целью поддержки JIT-компиляции посредством LLJIT
Построение калькулятора, основанного на LLJIT
Построение JIT-компилятора с чистого листа
Создание класса JIT-компилятора
Использование нового класса JIT-компилятора
Резюме
Глава 10. Отладка с применением инструментов LLVM
Технические требования
Оснащение приложения контролерами
Обнаружение проблем доступа к памяти с помощью контролера адресов
Нахождение ошибок доступа к неинициализированной памяти с помощью контролера памяти
Обнаружение гонки за данные с помощью контролера потоков
Нахождение ошибок с помощью libFuzzer
Ограничения и альтернативы
Профилирование с помощью XRay
Проверка исходного кода с помощью статического анализатора clang
Добавление нового проверщика в статический анализатор clang
Создание собственного инструмента на основе clang
Резюме
Часть IV. СОЗДАНИЕ СОБСТВЕННОГО КОДОГЕНЕРАТОРА
Глава 11. Описание целевой платформы
Подготовка сцены для нового кодогенератора
Добавление новой архитектуры в класс Triple
Расширение определения файлового формата ELF в LLVM
Создание описания целевой платформы
Добавление определения регистров
Определение форматов команд и информации о командах
Создание верхнеуровневого файла для описания целевой платформы
Добавление кодогенератора для M88k в LLVM
Реализация парсера языка ассемблера
Создание дизассемблера
Резюме
Глава 12. Выбор команд
Определение правил соглашения о вызове
Реализация правил соглашения о вызове
Выбор команд с помощью DAG выбора
Реализация DAG – обработка легальных типов и задание операций
Реализация DAG – трансляция формальных аргументов
Реализация DAG – трансляция возвращаемых значений
Реализация преобразований DAG в схеме выбора команд
Добавление информации о регистрах и командах
Пустой код трансляции кадра стека
Вывод машинных команд
Создание целевой платформы и субплатформы
Реализация класса M88kSubtarget
Реализация M88kTargetMachine – определения
Реализация M88kTargetMachine – добавление кода
Глобальный выбор команд
Трансляция аргументов и возвращаемых значений
Легализация обобщенных машинных команд
Выбор банка регистров для операндов
Трансляция обобщенных машинных команд
Пример
В какую сторону развивать кодогенератор
Резюме
Глава 13. За пределами выбора команд
Добавление нового прохода по машинным функциям в LLVM
Реализация верхнеуровневого интерфейса с платформой M88k
Добавление реализации класса TargetMachine для прохода по машинным функциям
Разработка прохода по машинным функциям
Сборка с новым проходом по машинным функциям
Прогон прохода по машинным функциям через llc
Интеграция новой платформы с фронтальной частью clang
Интеграция с драйвером в clang
Реализация поддержки ABI для M88k в clang
Реализация инструментария для платформы M88k в clang
Сборка целевой платформы M88k после интеграции с clang
Компиляция для другой архитектуры процессора
Резюме
Предметный указатель
Все отзывы о книге LLVM 17: инфраструктура для разработки компиляторов
С книгой "LLVM 17: инфраструктура для разработки компиляторов" читают
Внимание!
При обнаружении неточностей или ошибок в описании книги "LLVM 17: инфраструктура для разработки компиляторов (автор Кай Наке, Эми Кван)", просим Вас отправить сообщение на почту help@directmedia.ru. Благодарим!
и мы свяжемся с вами в течение 15 минут
за оставленную заявку