Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория языков программирования методов трансляции.-1.pdf
Скачиваний:
13
Добавлен:
05.02.2023
Размер:
1.36 Mб
Скачать

146

Отметим, что если F строится из программы, то число дуг не более чем вдвое превосходит число участков. Потому шаг 1) алгоритма выполняется за время пропорциональное квадрату числа участков. Требуется емкость памяти пропорциональная числу участков.

Если 1, 2,.., n участок программы, то их доминаторы можно записать как последовательность e1, e2,.., en, где ei прямой доминатор

для i.

6.3.3.Примеры преобразования программ

Полного каталога оптимизирующих преобразований программ с циклами не существует, однако для широкого класса программ можно использовать следующие преобразования.

Удаления бесполезных операторов

Это - обобщение топологического преобразование Т1. Без оператора, не влияющего на значение программы можно обойтись. Линейные участки, недостижимые из начальной вершины, очевидно, бесполезны, и их можно удалить. Операторы, вычисляющие значения, не используемые в конечном итоге при вычислении выходной переменной, такие попадают в эту категорию.

Исключение избыточных вычислений

Это преобразование обобщает топологическое преобразованиеТ2.

Предположим, что у нас есть программа, в которой участок домини-

рует над ¢, и что и содержит операторы A¬B+C и A¢¬B+C. Если В и С не переопределены (выяснить это не трудно), то значения вычислен-

ные этими двумя выражениями совпадают. Тогда в после вычисления А¬В+С можно вставить операторX¬A, где X- новая переменная. Затем A¢¬B+C, можно заменить на А¢¬X. Кроме того, если А, нигде на

пути из в ¢ не переопределяется, то оператор X¬ A не нужен, а А¢¬B+C можно заменить А¢¬A.

Пример. Рассмотрим граф управления, изображенный на рис. 11.15.

147

B¬D+D

C¬D*D

A¬B+C

A¬B*C B 2

F¬A+G

G¬B+C

D¬D+1

B1

A¬B+C B3

E¬A*A

B 4

B 5

Рис. 11.15. Граф управления.

В этом графе 1 доминирует над 2, 3 и 4. Тогда В+С принимает одно и то же значение при вычислении в 1, 3 и 4. Поэтому в 3 и

4 не обязательно перевычислять выражения В+С.

В 1 после оператораА¬В+С, можно поместить оператор при-

своения X¬А. Тогда в 3 и 4 операторы А¬В+С и G¬B+C можно заменить A¬X и G¬X соответственно. Отметим, что А вычисляется в

2, вместо X нельзя использовать А.

Теперь в 3 присвоение A¬X становится избыточным, его можно исключить.

Для исключения из программ избыточных вычислений (общих подвыражений) надо выявить вычисления, общие для двух или более участков программы. Избыточные вычисления, общие для участка и какого-нибудь из доминантов мы рассмотрим. Однако, выражения А+В могут вычисляться в нескольких участках, ни один из которых ни до-

минирует над данным участком . Вообще выражение А+В считается

избыточным в участке если