Какие 32-битные глазки x86 выполняет GCC?

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

Код GCC: https://github.com/gcc-mirror/gcc

Редактировать: Чтобы уточнить, "глазок" определен как шаблон поиска и замены с некоторыми связанными побочными условиями для перезаписи, чтобы быть действительным (часто только некоторая информация о живучести регистра / флагов).

2 ответа

Решение

Посмотри в различных *.md файлы и поиск define_peephole,

Например: gcc/config/i386/i386.md содержит (среди многих других):

;; For HI, SI and DI modes, or $-1,reg is smaller than mov $-1,reg.
(define_peephole2
  [(set (match_operand:SWI248 0 "register_operand")
    (const_int -1))]
  "(optimize_insn_for_size_p () || TARGET_MOVE_M1_VIA_OR)
   && GENERAL_REGNO_P (REGNO (operands[0]))
   && peep2_regno_dead_p (0, FLAGS_REG)"
  [(parallel [(set (match_dup 0) (const_int -1))
          (clobber (reg:CC FLAGS_REG))])]
{
  if (<MODE_SIZE> < GET_MODE_SIZE (SImode))
    operands[0] = gen_lowpart (SImode, operands[0]);
})

Соответствующая документация содержится в Руководстве по внутренним компонентам GCC.

https://gcc.gnu.org/onlinedocs/gccint/Peephole-Definitions.html

Это действительно не по теме, так как здесь слишком широк.

Вы можете заглянуть на мою страницу документации MELT; у него есть несколько полезных ссылок (в частности, ресурсный центр GCC в Индии), и большинство слайдов, которые я написал, содержат справочные и учебные материалы...

Большинство оптимизаций GCC происходит в промежуточных слоях (нейтральных по отношению к целевому и исходному), а не во внутреннем.

И оптимизация глазка не значит много (точно) в наши дни, и большая часть возможностей оптимизации GCC не проистекает из этого.

Другие вопросы по тегам