Компилятор стал осторожнее, но не всем сценариям такой подход пошёл на пользу.

Иногда скорость работы программы меняет не новая архитектура, а всего одна строка в компиляторе: инженер Intel внёс в GCC правку, которая ускорила один тест на 12%, но одновременно вызвала заметное замедление в другом сценарии.
GCC объединяет компиляторы для C, C++ и других языков программирования, превращая исходный код в машинные инструкции, которые затем выполняет процессор. От выбранных в нём правил оптимизации зависит, какие команды попадут в готовую программу и насколько удачно они совпадут с особенностями конкретного железа.
Свежее изменение коснулось оценки неверного предсказания ветвления на процессорах x86. Когда программа доходит до условия if, процессор заранее угадывает, по какой ветке пойдёт выполнение. Ошибка заставляет сбрасывать часть уже подготовленных операций, поэтому современные CPU теряют на таких промахах больше времени, чем предполагала старая модель GCC.
В GCC вес такой ошибки подняли с 2 до 5 условных инструкций. После правки компилятор чаще заменяет ветвления на условные команды без переходов, включая CMOV. Такой код помогает избежать пауз при неправильном прогнозе и лучше подходит для современных конвейеров обработки команд.
В тесте 544.nab_r изменение дало заметный прирост. При оптимизациях -O2 -mtune=graniterapids для Intel Granite Rapids и Xeon 6 производительность выросла на 12,7%, а при -O2 -mtune=znver5 для AMD Zen 5 — на 12,1%. Раньше похожая оценка уже применялась для Intel Ice Lake и Alder Lake, теперь её перенесли в общий профиль x86.
После включения правки разработчики GCC нашли и обратный эффект. Тест Hint у одного из участников стал выполняться на 30% медленнее при сборке под znver5 и graniterapids, а автор исходного изменения подтвердил замедление на 14% при настройках -O2 -mtune=generic -march=x86-64-v3. При этом SPEC2017 и SPEC2026 в целом сохранили прежний уровень производительности.
Причина регрессии оказалась узкой. В коде Hint нашлась только одна условная конструкция, которую GCC превратил в CMOV, но выполнялась она редко, примерно в 3% случаев, и почти не влияла на итоговую скорость. Зато изменённый способ генерации кода затронул более часто исполняемые участки и замедлил тест.
История показала, что даже одна точечная оптимизация под современные процессоры может улучшить один класс задач и ухудшить другой.