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

Насколько C 6.0 изощрен в уничтожении бесполезной функции, настолько же
он беспомощен при удалении бесполезного дублирующегося присваивания.
Наиболее важная область, за которую WATCOM C 6.0, как и Optimum-C, не смог
взяться, была оптимизация циклов. Он не поддерживает вынесение инвариантного
кода и удаление переменных индукции циклов.
Хотя C 6.0 не выполняет разворачивание циклов в отдельные команды, он
(также как Datalight Optimum-C и Computer Innovations C86Plus) использует
команду REP/STOSW процессоров 80x86 для инициализации тестового массива,
благодаря чему удаляет цикл.
Прекрасная генерация кода в WATCOM, в частности, разумное использование
регистров, дает ему очень важное преимущество. В тесте выполнения он победил
в большинстве тестов, интенсивно использующих процессор, и при этом
выполнялся для большой модели в лучшее время, чем большинство других
компиляторов для малой модели. К слабым сторонам WATCOM можно отнести
ввод/вывод файлов, использование getc и putc. Здесь он близок к наихудшим
компиляторам.

Выявленные лидеры

По существующему определению, любой компилятор, который выполняет не
буквальное отображение исходного текста, выполняет некоторый вид
оптимизации, даже если преобразование это такое низкоуровневое, как свертка
констант. Минимальный приемлемый уровень оптимизации будет возрастать по
мере того, как доступная на рынке технология генерации кода будет
предоставлять более глубокие методы оптимизации. На сегодняшнем уровне
технологии минимальным приемлемым уровнем оптимизации представляется
удаление общих подвыражений. Этот уровень подразумевает, что компиляторы,
которые выполняют удаление общих подвыражений, также выполняют основные
приемы оптимизации, такие как свертка констант и алгебраические упрощения.
Даже с установленным минимальным уровнем оценка возможностей конкретных
компиляторов усложняется существованием многих несоизмеримых форм
оптимизации. Компилятор может хорошо использовать регистры, но не
поддерживать удаление общих подвыражений. Поскольку оптимизированный код
зависит не только от применяемых методов, но также и от структуры программы,
которая оптимизировалась, в общем случае было бы заблуждением считать, что
один компилятор лучше другого, опираясь исключительно на один отдельный
тест.
Хотя все девять рассматриваемых компиляторов генерируют приемлемый код,
три из них, - Datalight Optimum-C, Microsoft C 5.0 и WATCOM C 6.0, -
выполняют оптимизацию кода более высокого уровня, чем остальные.
Компилятор Datalight Optimum-C - это быстрый и выразительный
исполнитель. Он выполняет обширный анализ потоков данных и оптимизирует код,
за который другие компиляторы не берутся.
Microsoft C 5.0 применяет оптимизацию циклов, которая является одной из
областей с большими потенциальными возможностями улучшения кода. Применяя
вынесение инвариантного кода, удаление переменных индукции циклов и очень
качественное распределение переменных по регистрам, Microsoft C 5.0
вырабатывает прекрасный код.
Компилятор WATCOM C 6.0 соперничает с Microsoft C 5.0 по степени
выполняемой оптимизации и генерирует наиболее быстрый код в тесте