Генерация высококачественного кода для программ на СИ - Datalight Inc.
ОГЛАВЛЕНИЕ
Datalight Inc.
С появлением Optimum-C Datalight стала одним из первых поставщиков,
предложивших оптимизирующий компилятор. Хотя набор тестов не подтвердил
наглядно претензии Datalight на глобальную оптимизацию, Optimum-C сработал
так хорошо в некоторых фрагментах теста, что он продемонстрировал слабые
фрагменты набора, требующие изменений для усовершенствования желаемой
проверки. Например, в первой версии функции jump_compression не
возвращалось значение, что делало все вычисления и присваивания в функции
лишними. Optimum-C выявил это и удалил большую часть кода функции, включая
цепочку переходов.
В тесте размножения констант и копий Optimum-C определил, что присваивание
i5 в обоих условных операторах является излишним по отношению к
последующим присваиваниям. Компилятор удалил не только эти присваивания,
но и условные операторы.
Неудовлетворительным оказалось удаление лишних сохранений значений
регистров. Optimum-C удалил одно лишнее присваивание, i=k5, в тесте
размножения констант и копий и лишнее присваивание в функции dead_code. Он
не удалил второе лишнее присваивание, i=2, в тесте размножения констант и
копий, и k=2, дублируемое присваивание.
Optimum-C - единственный компилятор, который пытался выполнить глубокое
удаление общих выражений. Проверка сгенерированного кода показала, что
общее выражение i5+i2 было перемещено выше первого базового блока
условного оператора, но не было удалено из второго.
Вне ограничений на стандартное использование регистров, накладываемых
семейством микропроцессоров 80x86, Optimum-C разумно использует регистры.
В функции jump_compression каждый передаваемый параметр был помещен в
регистр. Внутри тела функции не было ссылок в память, кроме начальной
засылки в регистры.
Одной важной областью, в которой компилятор Optimum-C требует улучшений,
является оптимизация циклов. Компилятор не пытается выполнять вынесение
инвариантного кода и удаление переменных индукции цикла.
Тест выполнения показал, что компилятор Datalight очень эффективно
управляет вводом/выводом getc/putc, а остальные тесты выполняются в
приемлемое время.