Upload
sean-blackburn
View
34
Download
3
Embed Size (px)
DESCRIPTION
Внутреннее представление компилятора. Типы представлений и их особенности. Архитектура транслятора языка ВУ. Исходный код. Парсер. Синтаксическое дерево. Оптимизации. Машинно-независимое представление. Оптимизации. Конвертер. Машинно-зависимое представление. Конвертер. test.s. - PowerPoint PPT Presentation
Citation preview
Внутреннее представление компилятора
Типы представленийи их особенности
Архитектура транслятора языка ВУИсходный
код Парсер
Синтаксическое дерево
КонвертерМашинно-
независимое представление
Оптимизации
Машинно-зависимое представлениеКонвертер
Кодогенератор test.s
Оптимизации
Front End Middle End Back End
Архитектура двоичного трансляторИсходныйдвоичный
кодДекодер
Декодированные команды
КонвертерМашинно-
независимое представление
Оптимизации
Машинно-зависимое представлениеКонвертер
Кодогенератор test.s
Оптимизации
Front End Middle End Back End
Свойства промежуточного представления (IR)
• Структура• Уровень абстракции• Поддерживаемые входные и выходные
языки• Поддерживаемые оптимизации
Содержит всю информацию необходимую для трансляции исходного кода в семантически эквивалентный промежуточный код.
Структура IR
• Граф– Деревья– DAG– Граф потока управления– Граф зависимостей
• Линейная последовательность команд– Код стековой машины– Трехадресный код (четверки, тройки)
Древовидное представлениеz = x – 2 * y
Абстрактное синтаксическое дерево:
zx
2
-*
y
=
Абстракция на уровне исходного кода
+
num12
-
write
Val sp +
Val sp
read
Num4
*Num
2+
Val sp
read
Num8
Явно выраженные вычисления адресов переменных, чтения и записи в память
Направленный ациклический граф (DAG)
z = 2 * y – 2 * y * x
Абстрактное синтаксическое дерево:
z
2
-
*y
=
*
2*
yx
Направленный ациклический граф (DAG):
z -=
*
2*
y
x
Линейные последовательности команд
OperationL0: Operation Operation Operation Cond jump L1 Operation Operation Operation Uncond jump L0L1: Operation Operation Operation
• Используемые операции зависят от уровня абстрактности и входного выходного языка
• Для полного представления исходного кода требуются операции передачи управления
• Популярные виды представления:1. Код (абстрактной) стековой машины2. Трехадресный код
a. Четверкиb. Тройки
Код стековой машины
• Использует соглашение о нахождении операндов в стеке
• Операции читают операнды из стека, удаляют их и записывают результат на стек
+ Очень компактное представление- Результаты и аргументы не выраженны
явно в представленнии
z = x – 2 * y
push 2push ymulpush xsubpop z
Трехадресный код
• Совокупность оператора и трех адресов (операндов): двух аргументов и результата
• На практике в представлении могут встречаться команды – Без результата, одного или двух
аргументов– С большим количеством аргументов– Количество таких команд мало
• Можно рассматривать как код абстрактной RISC-машины
z = x – 2 * y
t1 = 2t2 = yt3 = t1 * t2t4 = xt5 = t4 – t3z = t5
Реализация в виде четверок (quadruples)
Напрямую представлены имя операции, результат и аргументы
z = x – 2 * y
t1 = 2t2 = yt3 = t1 * t2t4 = xt5 = t4 – t3z = t5
op arg1 arg2 res
move 2 NULL t1
move y NULL t2
mul t1 t2 t3
sub t4 t3 t5
move x t4
move t5 z
NULL
NULL
1.
2.
3.
4.
5.
6.
Реализация в виде троек(triples)
Временные переменные полностью замещаются ссылкой на производящую операцию
z = x – 2 * y
t1 = 2t2 = yt3 = t1 * t2t4 = xt5 = t4 – t3z = t5
op arg1 arg2
move 2 NULL
load y NULL
mul Op 1 Op 2
sub Op 4 Op 3
load x
save Op5
NULL
z
1.
2.
3.
4.
5.
6.
Линейное представление(на примере LLVM)
int func( int a, int b){ int c; if ( a > b) { c = a + 1; } else { c = a + b; } return c;}
%cmp.res = icmp %a, %bbr %cmp.res, label %if.then, label %if.else
if.then:%c.0 = add %a, 1br label %if.end
if.else:%c.1 = add %a, %bbr label %if.end
if.end:%c.2 = phi [%c.0, %if.then], [%c.1, %if.else]ret %c.2
Граф потока управления
%cmp.res = icmp %a, %bbr %cmp.res, label %true, label %false
true:%c.0 = add %a, 1br label %end
false:%c.1 = add %a, %bbr label %end
end:%c.2 = phi [%c.0, %true], [%c.1, %false]ret %c.2
Комбинированные представления
• Граф управления в вершинах которого находятся:– Линейные цепочки операций– Список корневых вершин деревьев
• Граф зависимостей, вершинами которого являются отдельные операции– Управление также может быть представлено в виде
зависимостей
Аналитические структуры данных
• Строятся при помощи анализа основной части представления
• Могут быть временными (внутри фазы) или постоянными (сохраняются между фазами)
• Корректируются либо перестраиваются при преобразованиях представления
Примеры аналитических структур
• Граф потока управления– Классификация дуг– Циклы, дерево циклов– Доминаторы/Постдоминаторы
• Граф потока данных• Граф зависимостей