Анализ Потока Данных Итеративные алгоритмы и SSA.

Презентация:



Advertisements
Похожие презентации
Анализ потока управления. Линейные участки (basic blocks, базовые блоки) Линейный участок – это максимальная последовательность инструкций, такая что:
Advertisements

Новиков Сергей Анализ потока управления и потока данных в программе.
Внутреннее представление компилятора Типы представлений и их особенности.
Санкт-Петербургский Государственный Университет Математико-Механический факультет Кафедра системного программирования Применение диаграмм двоичных решений.
9 класс 1. Какое уравнение называется уравнением с двумя переменными? 2. Что называют решением уравнения с двумя переменными? 3. Важен ли в этой паре порядок.
МЕТОД ИНТЕРВАЛОВ
Генерация кода Преобразование дерева операций в код на языке ассемблера Ассемблер процессоров типа Intel 80x86 Code – функция перевода узла в команды ассемблера.
Логарифмическая функция. Её свойства и график. Определение.
Системы неравенств с двумя переменными. Учитель: Захарова Е. А. школа 2025.
Распределение регистров при планировании инструкций для архитектуры Эльбрус Дипломная работа Иванова Д. С. Научный руководитель Шлыков С. Л. Москва 2008.
Решите уравнения. Решение линейного уравнения Решение квадратного уравнения.
Изучение нового материала «ЛИНЕЙНАЯ ФУНКЦИЯ» Функция, заданная формулой, где k, b любые числа, x аргумент, называется линейной Определение.
Построение графиков показательной функции 25 Января 2007.
Функция вида a>0, ветви направлены вверх а < 0, ветви направлены вниз.
Графический способ решения систем уравнений Алгебра 9 класс.
Квадратичная функция, её свойства, график ? Понятие функции Определение квадратичной функции Область определения функции График.
Графический способ решения систем уравнений 9 класс.
График линейного уравнения с двумя переменными.. График уравнения. Каждая пара чисел, являющаяся решением уравнения с переменными х и у, изображается.
Организация циклов в Ассемблере. Цикл – это многократно повторяющаяся последовательность операторов.
Функция – такая зависимость переменной у от переменной х, при которой каждому значению переменной х соответствует единственное значение переменной у.
Транксрипт:

Анализ Потока Данных Итеративные алгоритмы и SSA

Предмет анализа Определения и использования переменных Пути в графе управления t0 = mov 10 t1 = mov 2 t2 = add t1, t0 t3 = mul t2, 4 t4 = sub t3, t0 Время жизни t0 Определение t0 Использования t0 t1 = mov 1 t2 = add t1,2 t3 = shl t1,2 t4 = mul t2, 2 t0 = ld [x] t1 = add t0, 2 t2 = mov 10 Node Node 0 Node 1 Node 2 const t1t2 t4

Основные понятия 1. t0 = mov t1 = mov 2 3. t2 = add t1, t0 4. t3 = mul t2, 4 5. t4 = sub t3, t0 OUT[5] = {}, IN[5]= {t0,t3} OUT[4] = IN[5] = {t0,t3} IN[4] = {t0, t2} IN[4] OUT[4] = IN [5] GEN[5] = {t0,t3} GEN[4] = {t2} KILL[4] = {t3} OUT[5]

Значения потока данных 1. t0 = mov t1 = mov 2 3. t2 = add t1, t0 4. t0 = add t2, 4 5. t3 = sub t1, t0 INOUT S -… …

Глобальный анализ

Решение уравнений потока

Достигающие определения (reaching definitions)

Пример d1. Def t d2. Def t u1. Use t d4. Def t d3. Def t u2. Use t GENKILL Node 0{d1}{d2,d3,d4} 1{} 2{d2}{d1,d3,d4} 3{d4}{d1,d2,d3} 4{} 5{d3}{d1,d2,d4} Итеративное решение 01Iter IN OUT {}{d1} {d2}{d4}{d2} 2345 {d1} {d2}{d4} {d3} IN OUT 0 {}{d1, d4}{d1}{d2}{d4, d3}{d2} {d1}{d1, d4}{d2}{d4}{d4, d3}{d3} 1 IN OUT {}{d1, d4}{d1}{d2}{d4, d3}{d2} {d1}{d1, d4, d3}{d2}{d4}{d4, d3}{d3} 2

Влияние порядка вершин d1. Def t d2. Def t u1. Use t d4. Def t d3. Def t u2. Use t GENKILL Node 0{d1}{d2,d3,d4} 1{} 2{d2}{d1,d3,d4} 3{d4}{d1,d2,d3} 4{} 5{d3}{d1,d2,d4} Итеративное решение в порядке RPO 0Iter IN OUT {}{d2} {d3,d4}{d1,d3,d4} 3541 {d1}{d4}{d3}{d1,d3,d4} 0 2 {d1} {d2} {d3,d4}

Локальный анализ d1. Def t d2. Def t u1. Use t d4. Def t d3. Def t u2. Use t IN Node 0{} 1{d1,d3,d4} 2{d1} 3{d2} 4{d3,d4} 5{d2} d1d2d3d4 u1u2 Граф потока данных

Поиск доминаторов Возможна формулировка в виде прямой задачи потока Dom[B] – множество доминаторов узла B Передаточная функция Dom[B] = OUT[B] = IN[B] + {B} Оператор сбора В другом виде

SSA форма Одно присваивание каждой переменной (версии) Псевдооперация ϕ для версий одной переменной достигающих точек схождения по разным путям 1. x = mov y = mov 2 3. z = add x, y 4. x = add z, 4 5. z = sub x, y 1. x.0 = mov y.0 = mov 2 3. z.0 = add x.0, y.0 4. x.1 = add z.0, 4 5. z.1 = sub x.1, y.0 t1 = mov 1 t2 = add t1,2 t3 = shl t1,2 t4 = mul t2, 2 t0 = ld [x] t1 = add t0, 2 t2 = mov 10 Node 0 Node 1 Node 2 t1.0 = mov 1 t2.0 = add t1.0, 2 t1.2 = ϕ t1.0, t1.1 t2.2 = ϕ t2.0, t2.1 t3 = shl t1.2,2 t4 = mul t2.2, 2 t0 = ld [x] t1.1 = add t0, 2 t2.1 = mov 10 Node 0 Node 1 Node 2

Граф потока данных с SSA t1.0 = mov 1 t2.0 = add t1.0, 2 t1.2 = ϕ t1.0, t1.1 t2.2 = ϕ t2.0, t2.1 t3 = shl t1.2,2 t4 = mul t2.2, 2 t0 = ld [x] t1.1 = add t0, 2 t2.1 = mov 10 Node 0 Node 1 Node 2 t1.0 = mov 1 t0 = ld [x] t2.0 = add t1.0, 2 t1.1 = add t0, 2 t2.1 = mov 10 t1.2 = ϕ t1.0, t1.1 t2.2 = ϕ t2.0, t2.1 t3 = shl t1.2,2t4 = mul t2.2, 2 Существенно меньше дуг чем при прямом построении def-use цепочек

ДОПОЛНИТЕЛЬНО

Def-Use Chains loop: true: 3. %c = add %a, 1 false: 4. %b = 1 5. %c = add %a, %b end: 7. ret %d 6. %a = 1 1.%a = 1 2.%d = 2 1. %a = 1 3. %c = add %a, 1 5. %c = add %a, %b 4. %b = 16. %a = 1 2. %d = 1 7. ret %d

Problem with Def-Use Chains loop: 2. %a = add %a, 1 6. ret %a 1.%a = 1 %a.3 3. %a = add %a, 1 4. %a = add %a, 15. %a = add %a, 1 1. %a = 1 2. %c = add %a, 1 6. ret %d 3. %c = add %a, 1 4. %c = add %a, 15. %c = add %a, 1

Φ-Functions loop: true: 2. %a = add %a, 1 4. ret %a 3. %a = add %a, 1 1.%a = 1 2. %a = add %a, 1 3. %a = add %a, 1 4. ret %a %a.1 %a.3 %a.1 | %a.3 %a.2

Φ-Functions loop: true: 2. %a.2 = add %a_t1, 1 4. ret %a_t2 3. %a.3 = add %a_t2, 1 1.%a.1 = 1 5.mov %a_t1 = %a.1 6.mov %a_t1 = %a.3 8.mov %a_t2 = %a.2 7.mov %a_t2 = %a_t1

Φ-Functions 1. %a.1 = 1 2. %a.2 = add %a_t1, 1 3. %a.3 = add %a_t2, 1 4. ret %a 5.mov %a_t1 = %a.16.mov %a_t1 = %a.3 8.mov %a_t2 = %a.27.mov %a_t2 = %a_t1 ϕ ϕ

Φ-Functions 1. %a.1 = 1 2. %a.2 = add %a_t1, 1 3. %a.3 = add %a_t2, 1 4. ret %a 9.phi %a_t1 = %a.1, %a.3 10.phi %a_t2 = %a.2, %a_t1

Φ-Functions loop: 9.Phi %a_t1 = %a.1, %a.3 true: 2. %a.2 = add %a_t1, 1 4. ret %a_t2 10. Phi %a_t2 = %a.2, %a_t1 3. %a.3 = add %a_t2, 1 1.%a.1 = 1 loop: true: 2. %a = add %a, 1 4. ret %a 3. %a = add %a, 1 1.%a = 1