Генерация высококачественного кода для программ на СИ
Страница 14. 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, а остальные тесты выполняются в
 приемлемое время.

 
« Предыдущая статья   Следующая статья »