1 / 16

Анализ потока управления

Анализ потока управления. Линейные участки ( basic blocks, базовые блоки). 1. t0 = ld [ x_addr ] 2. t1 = ld [ y_addr ] 3 . p0 = cmpe t0, t1 4 . brc p0, 12. 5 . t2 = ld [ i_addr ] 6. t3 = shl t2, 2 7 . p1 = cmpe t3, 10 8 . brc p1, 12. 9 . t1 = sub t1, 32

Download Presentation

Анализ потока управления

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Анализ потока управления

  2. Линейные участки(basic blocks, базовые блоки) 1. t0 = ld [x_addr] 2. t1 = ld [y_addr] 3. p0 = cmpe t0, t1 4. brc p0, 12. 5. t2 = ld [i_addr] 6. t3 = shl t2, 2 7. p1 = cmpe t3, 10 8. brc p1, 12. 9. t1 = sub t1, 32 10. add t2,1 -> t2 11. bru 6. 12. t4 = shl t1, 3 13. t5 = add arr_addr, 10 14. st [t5], t4 15. ret • Линейный участок – это максимальная последовательность инструкций, такая что: • Поток управления может входить только в первую инструкцию • Управление покидает линейный участок без ветвлений, за исключением, возможно, в последней команде.

  3. Разбиение кода на ЛУ • Поиск первых инструкций («лидеров», входов) • Первая команда • Целевая команда перехода • Команда за условным или безусловным переходом • Построение ЛУ, начиная с лидеров 1. t0 = ld [x_addr] 2. t1 = ld [y_addr] 3. p0 = cmpe t0, t1 4. brc p0, 12. 5. t2 = ld [i_addr] 6. t3 = shl t2, 2 7. p1 = cmpe t3, 10 8. brc p1, 12. 9. t1 = sub t1, 32 10. add t2,1 -> t2 11. bru 6. 12. t4 = shl t1, 3 13. t5 = add arr_addr, 10 14. st [t5], t4 15. ret

  4. Граф управления • Вершины – линейные участки • Дуги существуют между блоками если: • Между ними существует условный или безусловный переход • Блоки следуют друг за другом в исходной последовательности, причем первый не заканчивается безусловным переходом 1. t0 = ld [x_addr] 2. t1 = ld [y_addr] 3. p0 = cmpe t0, t1 4. brc p0, 12. 5. t2 = ld [i_addr] 6. t3 = shl t2, 2 7. p1 = cmpe t3, 10 8. brc p1, 12. 9. t1 = sub t1, 32 10. add t2,1 -> t2 11. bru 6. 12. t4 = shl t1, 3 13. t5 = add arr_addr, 10 14. st [t5], t4 15. ret

  5. Граф управления 1. t0 = ld [x_addr] 2. t1 = ld [y_addr] 3. p0 = cmpe t0, t1 4. brc p0, 12. 1. t0 = ld [x_addr] 2. t1 = ld [y_addr] 3. p0 = cmpe t0, t1 4. brc p0, 12. 5. t2 = ld [i_addr] 5. t2 = ld [i_addr] 6. t3 = shl t2, 2 7. p1 = cmpe t3, 10 8. brc p1, 12. 6. t3 = shl t2, 2 7. p1 = cmpe t3, 10 8. brc p1, 12. 4. brc 9. t1 = sub t1, 32 10. add t2,1 -> t2 11. bru 6. 11. brc 8. brc 9. t1 = sub t1, 32 10. add t2,1 -> t2 11. bru 6. 12. t4 = shl t1, 3 13. t5 = add arr_addr, 10 14. st [t5], t4 15. ret 12. t4 = shl t1, 3 13. t5 = add arr_addr, 10 14. st [t5], t4 15. ret

  6. Поиск в глубину DFS tree Start/Entry Start/Entry Node 1 Back edge tree edge Node 1 Node 2 Node 8 Node 2 Node 8 Node 3 Node 3 Node 4 Node 4 Node 7 Node 5 Node 7 Node 5 Cross edge Node 6 Node 6

  7. Особенности нумерации DFS tree Start/Entry • Pre-order s, 1, 2, 3, 4, 5, 6, 7, 8 • Post-order 6, 5, 7, 4, 3, 2, 8, 1, s • Reverse post order s, 1, 8, 2, 3, 4, 7, 5, 6 Start/Entry Node 1 Node 1 Node 2 Node 8 Node 2 Node 8 Node 3 Node 3 Node 4 Node 4 Node 7 Node 5 Node 7 Node 5 Node 6 Node 6

  8. Доминаторы и постдоминаторы • Отношение доминирования • Строгое доминирование • Непосредственный доминатор • Постдоминатор

  9. Доминаторы (пример) Дерево доминаторов Node 0 Node 0 Node 1 Node 1 Node 2 Node 8 Node 3 Node 2 Node 8 Node 3 Node 6 Node 4 Node 7 Node 4 Node 5 Node 5 Node 7 Node 6

  10. Постдоминаторы (пример) Дерево постдоминаторов Node 0 Node 6 Node 1 Node 3 Node 7 Node 5 Node 4 Node 2 Node 8 Node 1 Node 2 Node 8 Node 3 Node 0 Node 4 Node 5 Node 7 Node 6

  11. Зависимость по управлению Вершина y зависит по управлению от вершины xесли существует дуга из xв z, такая что ypdomz, но y !pdomx. Дерево постдоминаторов 6 Node 0 3 7 5 4 Node 1 1 2 8 Node 2 Node 8 0 Node 3 Граф зависимостей по управлению Node 4 Node 0 Node 1 Node 6 Node 3 Node 5 Node 7 Node 4 Node 8 Node 2 Node 5 Node 7 Node 6

  12. Граница доминирования Node 0 DF(x) множество вершин Y такое что xдоминирует предшественника yно не доминирует строго y Node 1 DF(1) = {4,7} Node 2 Node 8 DF(1) = {4,7} Node 3 Итеративная граница доминирования: Node 4 Node 5 Node 7 Node 6

  13. Циклы в графах потока управления • Цикл – множество вершин каждая из которых достижима из любой другой вершины этого множества (сильно связаная компонента на графе управления) • Особенные вершины: • Голова цикла • Входные вершины • Выходные вершины • Особенные дуги: • Обратные дуги • Входные дуги • Выходные дуги Statt/Entty Loop head Node 1 Node 2 Node 3 Node 4 backedge Stop

  14. Дерево циклов Loop nest: Loop ttee: Statt/Entty Outetmost Loop 1 Loop 0 Node 1 Innetmost Loop 2 Node 2 Node 3 Loop 1 Loop 3 Node 4 Loop 2 Loop 3 Node 5 Stop

  15. Несводимые циклы Start 0 Start 1 Node 1 Node 1 Побочный вход head 4 Node 2 Node 2 head Побочный вход 2 5 Node 5 Node 3 Node 5 Node 3 3 Node 4 Node 4 head 6 Stop Stop

  16. Пример для анализа 1 3 2 6 5 4 7 8 9 10 11 12

More Related