"Генерация высококачественного кода для программ, написа" - читать интересную книгу автора (Хислей Филипп Н.) | WATCOM C 6.0. |
| * - компилятор применяет этот метод оптимизации. | +-------------------------------+ | Большинство включенных в обзор компиляторов языка Си | | поддерживают простые методы оптимизации, такие как | | алгебраические упрощения, и только несколько компиляторов | | применяют более сложные формы, такие как удаление общих | | подвыражений. | L------------------------------- Borland International. Выход компилятора Turbo C представляет собой разумный, но не очень оптимизированный код. Кроме свертки констант, удаления лишних загрузок регистров и алгебраических упрощений, компилятор выполняет только снижение мощности, удаление недостижимого кода и размещение переменных в регистрах. Он не поддерживает другие общие методы оптимизации, такие как удаление лишних сохранений, общих подвыражений и переменных индукции цикла, а также вынесение инвариантного кода. Turbo C разумно управляет прологом и эпилогом функций и использованием регистров, засылая в стек и извлекая только те регистры, которые явно используются внутри тела функции. Computer Innovation Inc. Компилятор C86Plus вырабатывает хороший код со средним уровнем оптимизации. Он выполняет базовые приемы оптимизации, такие как свертка констант и размножение копий. Однако он не выполняет размножение констант для удаления лишних сохранений. Хотя компилятор успешно выполняет алгебраические упрощения, он порождает лишние инструкции из-за того, что размещает результаты в регистрах, вместо того, чтобы помещать их в переменные. Этот эффект проявляется в том, что при размещении переменных в регистрах предпринимаются попытки переразмещения, так как при выполнении нескольких операторов результаты в действительности должны быть присвоены соответствующим переменным. Хотя C86Plus успешно справляется со сверткой явных дублирующихся присваиваний в одно присваивание, удаление лишних сохранений он выполняет неустойчиво. Единственное лишнее присваивание в функции dead_code остается единственной командой после того, как компилятор удаляет недостижимый код из функции. C86Plus - один из нескольких компиляторов рассматриваемого набора, который преобразует инициализацию элементов массива из функции проверки разворачивания циклов в эквивалентную команду STOSW процессора 80x86 с префиксом REP. Однако, что касается разумного уровня оптимизации в других областях, то он не смог решить задачу преобразования цепочки переходов в функции jump_chain_compression в один переход. Он не выполняет существенную оптимизацию циклов. |
|
|