Что такое дорогостоящие оптимизации GCC? - программирование
Подтвердить что ты не робот

Что такое дорогостоящие оптимизации GCC?

Документация GCC не является особенно подробным. Что он говорит:

-fexpensive-оптимизации:

     Perform a number of minor optimizations that are relatively expensive.

Какая из этих оптимизаций? Любой пример?

4b9b3361

Ответ 1

Мне не хватает специалиста по компилятору H ^ H ^ H, чтобы иметь возможность сделать многое из этого, но, возможно, кто-то может его построить...

Соответствующие биты gcc могут быть получены достаточно легко (если вы не попробуете проверить все это) с помощью

svn co --depth=immediates svn://gcc.gnu.org/svn/gcc/trunk/gcc gcc
cd gcc
svn --set-depth infinity update config c cp

(по крайней мере, что подмножество, которое, по-видимому, имело отношение к C/С++, которое я нашел, добавляет другие каталоги, если вы заинтересованы в других языках gcc поддерживает)

И затем

grep -R flag_expensive_optimizations . | grep -v .svn

выводит экран (35 строк) хитов на небольшое количество файлов. Я оставлю его кому-то другому, чтобы опубликовать более подробный анализ (если кто-то действительно заботится о себе).

Несколько из них привлекли мое внимание. Я упомяну, что (на момент написания):

  • Единственное упоминание flag_expensive_optimizations в cp/ (С++ поддержка) находится в разделе кода, прокомментированном /* Handle ordinary C++ destructors. */ и, по-видимому, влияет на настройку LOOKUP_NONVIRTUAL, с соответствующим комментарием /* Optimize for space over speed here. */

  • В конфигурации/каталоге конфигурации (sparc, alpha, sh, i386) имеется несколько обращений. Единственный i386 применяется для TARGET_AVX, когда не оптимизируется для размера и прокомментирован /* When not optimize for size, enable vzeroupper optimization for TARGET_AVX with -fexpensive-optimizations and split 32-byte AVX unaligned load/store. */

Взгляд на несколько других хитов убедил меня, что я должен просто быть доволен, чтобы оставить свои знания об этой функции на уровне документации gcc.