Н. И. Лобачевского факультет вычислительной математики и кибернетики лаборатория «информационные технологии» проект «исследовательский компилятор» Практикум



СодержаниеЛексический анализатор.
Синтаксический анализатор
Семантический анализатор.
Оптимизирующим компилятором
Парсер (лексический и синтаксический анализатор)
Оптимизация дерева
Реализация функциональности находится в файле tree-inline.c.
Реализация методов находится в файле fold-const.c.
Генерация RTL описана в файлах: stmt.c, calls.c, expr.c, explow.c, expmed.c, function.c, optabs.c, emit-rtl.c.
Код для сохранения RTL-кода функции и последующего его встраивания содержится в файле integrate.c.
Оптимизация вызовов
Реализация располагается в файле sibcall.c.
Файл с реализацией: jump.c.
Файл с реализацией: regclass.c.
Файл с реализацией: jump.c
Ключ для получения отладочной информации: -dW, файл с отладочной информацией: .ssaccp.
Ключ для получения отладочной информации: -dX, файл с отладочной информацией: .ssadce.
Файлы с реализацией: cse.c, cselib.c.
Файлы с реализацией: gcse.c, lcm.c.
Файл с реализацией: gcse.c.
Ключ для получения отладочной информации: -dt, файл с отладочной информацией: .cse2.
Файл с реализацией: flow.c.
Файл с реализацией: combine.c.
Файл с реализацией: regmove.c.
Файлы с реализацией: sched-deps.c, sched-ebb.c,sched-int.h, sched-rgn.c, sched-vis.c.
Распределение регистров
Файл с реализацией: regclass.c.
Файл с реализацией: global.c.
Файлы с реализацией: bb-reorder.c, predict.c.
Файл с реализацией: reorg.c.
Преобразование регистров в регистровый стек
Название прохода
Название прохода
Register Transfer Language (RTL)
Представление регистров и памяти в RTL
Представление арифметических выражений в RTL
Прочие инструкции
SSA форма в GCC
Минусы представления RTL и дерева, используемого front end, как промежуточных представлений при работе оптимизатора
Управляющий граф (control flow graph)
Преобразование в SSA
Оригинальный код
Анализ исходной программы
Синтаксический анализ
Семантический анализ
Императивные (процедурные) языки.
Аппликативные (функциональные) языки.
Объектно-ориентированное программирование.
Front end
Создание собственного Front end
Выбор инструкций
Распределение регистров.
Рисунок 5. Конфликт между командами по использованию функционального устройства.
Программная конвейеризация.
Рисунок 6. Пример подстановки вперёд и переименования переменных.
Таблица 6. Схема формирования программного конвейера алгоритмом EPS.
Кодогенератор (backend compiler)
Описание архитектуры микропроцессора
Описание конвейера в GCC
Класс инструкции
Таблица 8. Синтаксис описания модели конвейера.
Параметры конструкции
Таблица 9. Синтаксис описания резервирования устройств.
Пример описания
Описание целевой машины в GCC на примере микроконтроллера семейства AVR.
Поддержка описания машины
Определение типов данных
Определение оптимизирующего преобразования
Разные результаты
Ошибка при работе с памятью
Различные результаты
Участки экономии.
Примеры оптимизации
Оригинальный код
Свертка констант
Оригинальный код
Цель оптимизации
Оригинальный код
Подстановка операторов
Оригинальный код
Прямое преобразование
Оригинальный код
Удаление неиспользуемого кода
Оригинальный код
Упрощение булевых выражений в серию переходов
Оригинальный код
Снижение мощности выражений с индексной переменной
Пути достижения
Оригинальный код
Удаление индексной переменной
Пути достижения
Оригинальный код
Раскрутка циклов
Пути достижения
Программная конвейеризация
Пути достижения
Вынесение условных выражений за пределы цикла
Пути достижения
Исходный код
Исходный граф потока управления
Вынесение первых и последних итераций
Исходный текст
Исходный граф потока данных
Оптимизация хвостовых вызовов
Исходная программа
Оптимизация вызовов отключена
Встраивание функций (Inline)
Оригинальный код
Получение дистрибутива.
Общие опции
Опции поиска каталогов и подключения библиотек
Пример компиляции
Корневой каталог
Подкаталог gcc
Имя выражение
Выражение {действие}
YACC (Yet Another Compiler Compiler)