Анализ потока управления
Анализ потока управления
В задачу анализа потока управления (control flow analysis) входит определение свойств передачи управления между операторами программы. Проверка многих свойств этого вида необходима для решения задач оптимизации, преобразований программ и т.д.
При решении этих задач обычно используется формальная графовая модель (т.е. анализ производится над графом потока управления), а сами задачи формулируются в теоретико-графовой форме.
Основное употребление анализа потока управления в оптимизации - это фрагментация, то есть представление графа потока управления в виде совокупности фрагментов определенного вида. Как было показано в "Оптимизация" , такое представление необходимо для применения практически всех оптимизирующих преобразований.
Ниже будут рассмотрены основные понятия в области анализа потока управления, приведены определения некоторых фрагментов и алгоритмы их распознавания.
Граф потока управления
Основным способом представления потока управления программы является граф потока управления (см. "Оптимизация" ) - ориентированный граф с двумя выделенными вершинами start и stop , такими, что
- в start не заходит ни одна дуга
- из stop не выходит ни одна дуга
- произвольная вершина принадлежит хотя бы одному пути из start в stop
Для произвольной дуги e обозначим через beg(e) ее начало, а через end(e) - ее конец.
Для произвольной вершины v обозначим через in(v) множество входящих в нее дуг, а через out(v) - множество исходящих дуг.
Путем в графе назовем последовательность вершин, такую, что между каждой последующей и предыдущей вершиной в графе существует ребро.