Содержание
- 2. Содержание Структура компилятора Пример программы на С Линейная последовательность операций Анализ потока управления Анализ потока данных
- 3. ядро компилятора Структура компилятора Компилятор - переводит исходный код программы (написанные на языке высокого уровня) в
- 4. int func( int a, int b) { int res = 0; int c = 10; int
- 5. 1. MOVE.s32 -> res // line:3,0 2. MOVE.s32 -> c // line:4,0 3. MOVE.s32 -> d
- 6. Граф потока управления
- 7. Граф потока управления
- 8. Граф потока управления с промежуточным представлением
- 9. Обход (нумерация) Обход в глубину (depth first) 1. для каждого преемника { 2. устанавливаем номер ++
- 10. Обязательное предшествование (доминирование)
- 11. Узел d доминирует/постдоминирует узел n если любой путь от стартового/стопового узла к n проходит через d
- 12. Дерево доминаторов
- 13. Дерево постдоминаторов
- 14. Глубинное остовное дерево (depth-first spanning tree)
- 15. Глубинное остовное дерево (пример)
- 16. Выделение сильно связных подграфов
- 17. Разметка циклов
- 18. Дерево циклов
- 19. Несводимый цикл – цикл с более, чем одним входом Цикл можно свести путем дублирования кода Несводимые
- 20. Компоненты с одним входом и одним выходом
- 21. Дерево структуры программы (program structure tree)
- 22. Классический анализ потока данных
- 23. Время жизни переменных
- 24. Итерационный алгоритм определения времени жизни переменных
- 25. Форма статического единственного присваивания Фрагмент программы z = 3; if(P) { y = 5; } else
- 26. Форма статического единственного присваивания в виде Def-Use графа
- 27. Построение phi-функций Для каждой переменной определяем узлы cfg, в которых она инициализируется Запускаем алгоритм поиска итерационного
- 28. CFG CFG+DOM Dominance Frontier Фронт доминирования START STOP d STOP START J-дуги дуги дерева доминаторов b
- 29. Хорошо зарекомендовавшая себя техника потокового анализа. Анализ присваивает одинаковые номера операциям, вырабатывающие одинаковые значения. Номера называются
- 30. Классы эквивалентности: 1,2,3,4 Метод нумераций значений (пример) A = i; B = j; A = j
- 31. int func( int a, int b) { int res = 0; int c = 10; int
- 32. 16 (с + d) подстановка констант 11,13 (a+b) сбор общих подвыражений 13,18 (b+i) удаление частично избыточных
- 34. Скачать презентацию