Россия |
Анализ потоков данных
Достижимые определения
Достижимые определения являются одной из классических задач анализа потоков данных. Эту задачу можно сформулировать следующим образом:
для каждого вхождения переменной требуется определить множество присваиваний, такое, что для каждого из них существует путь, в котором между ним и данным вхождением отсутствуют другие присваивания той же переменной.
Неформально говоря, задача достижимых определений заключается в выяснении, где именно устанавливаются значения того или иного вхождения данной переменной.
На слайде показан пример программы, в котором выделены вхождения некоторых переменных и некоторые присваивания. Стрелки ведут от определений (присваиваний) к вхождениям переменных.
Видно, что решения этой задачи достаточно для построения представления программы с использованием def-use chains, которое необходимо для проведения многих оптимизаций (см. "Оптимизация" ).
Живые переменные
Живые переменные также являются классической задачей анализа потоков данных. В ней требуется для каждой вершины графа потока управления построить множество переменных, обладающих следующим свойством:
существует путь через данную вершину, начинающийся присваиванием данной переменной и кончающийся ее использованием, не содержащий иных присваиваний той же переменной.
Пример решения данной задачи для конкретной программы показан на слайде.
В общем случае, решение данной задачи играет важную роль в распределении регистров.
Стадии анализа
Из вышесказанного видно, что логически процесс решения задачи анализа потоков данных состоит из двух стадий, выполняемых одновременно.
Локальная стадия заключается в учете влияния отдельного оператора (группы операторов в вершине графа управления) в предположении, что уже имеется решение задачи анализа потоков данных перед этим оператором.
На глобальной стадии происходит решение задачи анализа для каждого пути, ведущего в данную вершину и затем выделение общей части всех таких решений.