"Генерация высококачественного кода для программ, написанных на СИ" - читать интересную книгу автора (Хислей Филипп Н.)

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, а остальные тесты выполняются в приемлемое время.