Реферат: Оптимизация программ

2) сдвиг оператора не приводит к тому, что между опреде­лением переменной и ее использованием в качестве операнда по­является новый оператор, присваивающий этой переменной другое значение. Например, для блока

(mi) := A,1

.

.

(mj) := A,10

.

.

(mk) := C,A

если больше никакой оператор после mj не присваивает зна­чение переменной A, то оператор mj может быть сдвинут вниз, но не может быть поставлен после оператора mk, операторами mi, а также вверх, но не выше оператора, использующего значение пе­ременной A, присвоенное оператором mi.

3) сдвиг оператора не нарушает связи между сдвигаемым оператором и оператором, использующим результат сдвигаемого в качестве операнда.

Таким образом, оператор инвариантен в области, если его операнды не зависят от места определения переменных в данной области.

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

Необходимо также отметить, что перед сдвигом инвариантных операторов нужно устранить идентичные операторы (об этом речь пойдет позже), так как они могут оказаться препятствием для

сдвига операторов.

Рассмотрим условия, достаточные для сдвига операторов

I. Сдвиг оператора, не являющегося оператором присваива­ния, из области назад (на его входные пути) производится, если операнды оператора не зависят от места определения переменных в области, т.е.:

1) mi - идентификаторы, используемые в качестве аргумента оператора, не определены в блоке ни одним предшествующим опе­ратором;

2) программные переменные оператора не определены в об­ласти.

Если оба эти условия выполняются, то операнды оператора не зависят от места определения переменных в области.

II. Сдвиг оператора присваивания, из области назад (на его входные пути) производится, если:

1) mi - идентификаторы, используемые в качестве аргумента оператора, не определены в блоке ни одним предшествующим опе­ратором;

2) программные переменные, используемые в качестве опе­ранда оператора не определены в области;

3) блок является артикуляционным, т.е. лежит на пересече­нии всех входных или всех выходных путей сильно связанной об­ласти;

4) не существует другого определения или использования программной переменной на любом пути от входа в область до этого определения.

III. Сдвиг оператора, не являющегося оператором присваи­вания, из области вперед (на его выходные пути) производится, если:

1) mi - идентификаторы, используемые в качестве аргумента оператора, не переопределяются ни на одном пути между операто­ром и точкой выхода из области;

2) программные переменные, используемые в качестве аргу­мента оператора не переопределяются ни на одном пути между оператором и точкой выхода из области;

3) mi - указатель, являющийся результатом действия опера­тора, не используется на пути между оператором и концом блока.

IV. Сдвиг оператора присваивания, из области назад (на его входные пути) производится, если:

К-во Просмотров: 743
Бесплатно скачать Реферат: Оптимизация программ