Опубликован: 23.07.2006 | Доступ: свободный | Студентов: 2218 / 892 | Оценка: 4.28 / 4.17 | Длительность: 21:37:00
Специальности: Системный архитектор
Лекция 12:

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

Линейные компоненты


Линейной компонентой называется фрагмент L , обладающий следующими пятью свойствами:

  1. L является альтом
  2. L имеет не более одной конечной вершины
  3. Начальная вершина L не достижима из его конечной вершины
  4. Начальная и конечная вершины L принадлежат любому пути в графе от start до stop
  5. L - минимальный подграф, обладающий предыдущими свойствами

Множество всех линейных компонент образует разбиение множества вершин графа. Стягивание линейных компонент переводит граф в луч.

Можно также показать, что начальная вершина линейной компоненты есть либо start, либо конечная вершина другой линейной компоненты. Наконец, можно показать, что начальная вершина произвольной линейной компоненты является бивершиной.

Выделение линейных компонент в исходном графе позволяет применять к нему оптимизирующие преобразования, рассчитанные на линейный участок.

Выделение линейных компонент в сводимом графе

Идея алгоритм выделения линейных компонент в сводимом графе опирается на использование свойств, сформулированных выше.

Алгоритм обходит граф в порядке возрастания T -номеров и добавляет вершины в текущую линейную компоненту. Признаком завершения линейной компоненты является то, что вершина со следующим номером является, во-первых, бивершиной, а во-вторых, ее номер - максимальный среди номеров всех потомков вершин текущей линейной компоненты.

Разбиение графа на линейные компоненты изображено на рисунке на слайде.

Литература к лекции

  • А. Ахо, Р. Сети, Дж. Ульман "Компиляторы: принципы, технологии и инструменты", М.: "Вильямс", 2001. 768 с.
  • Steven S. Muchnik "Advanced Compiler Design And Implementation", Morgan Kaufmann Publishers, July 1997. 880 pp.
  • В.Н. Касьянов "Оптимизирующие преобразования программ", М., "Наука", 1988. 336 с.