ТЕХНИКА ОПТИМИЗАЦИИ ПРОГРАММ

Сводная таблица




компилятор

действие

Microsoft Visual C++ 6

Borland C++ 5

WATCOM C 10

размножение констант

всегда размножает

никогда не размножает

всегда размножает

свертка констант

всегда сворачивает

никогда не сворачивает

всегда сворачивает

вычисление константных выражений

вычисляет

вычисляет

вычисляет

свертка функций

никогда не сворачивает

никогда не сворачивает

никогда не сворачивает

удаление неиспользуемых переменных

удаляет с все неявно неиспользуемые отслеживанием генетических связей

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

удаляет с все неявно неиспользуемые отслеживанием генетических связей

удаление неиспользуемых присвоений

удаляет

удаляет

удаляет

удаление копий переменных

удаляет

не удаляет

удаляет

удаление лишних присвоение

удаляет

не удаляет

удаляет

удаление лишних вызовов функций

не удаляет

не удаляет

не удаляет

выполнение алгебраических упрощений

частично

не выполняет

не выполняет

оптимизация подвыражений

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

частично оптимизирует без учета перегруппировки

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

замена деления сдвигом

заменяет

заменяет

заменяет

замена деления умножением

заменяет

не заменяет

не заменяет

замена оператора взятия остатка битовыми операциями

заменяет

заменяет

заменяет

быстрое вычисление остатка

не поддерживает

не поддерживает

не поддерживает

замена умножения сдвигом

заменяет

заменяет

заменяет

замена умножения сложением

заменяет

заменяет

не заменяет

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

использует

использует

использует

замена условных переходов арифметическими операциями

не заменяет

не заменяет

не заменяет

удаление лишних условий

удаляет

не удаляет

не удаляет

удаление заведомо ложных условий

частично

не удаляет

не удаляет

балансировка дерева case-переходов

балансирует

балансирует

не балансирует

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

создает

создает

частично

разворот циклов

не разворачивает

не разворачивает

не разворачивает

слияние циклов

не сливает

не сливает

не сливает

вынос инвариантного кода за пределы цикла

выносит

не выносит

выносит

замена циклов с предусловием на циклы с постусловием

заменяет

не заменяет

не заменяет

замена возрастающих циклов на убывающие циклы

заменяет

не заменяет

не заменяет

удаление ветвлений из цикла

удаляет

не удаляет

не удаляет

учет частоты использования переменных при помещении их в регистр

не учитывает

учитывает

учитывает

передача аргументов в регистрах по умолчанию

нет

да

да

количество регистров, выделенных для передачи аргументов функции

2

3

4

адресация локальных переменных через ESP

да

да

да

оптимизация инициализации константных строк

да

нет

нет

удаление "мертвого" кода

да

нет

частично

оптимизация константных условий

да

нет

да

Таблица 1 Поддержка основных методов оптимизации компиляторами Microsoft Visual C++, Borland C++ и WATCOM C++. Серым цветом для облегчения ориентации закрашены не поддерживаемые пункты



Содержание раздела