Какие x86 32-битные peepholes выполняет GCC?
Я просматривал исходный код GCC, и я был озадачен тем, как их извлекать. Может ли кто-нибудь предоставить список или информацию о том, как извлечь эти глазок (оптимизация перезаписи сборки)?
Код GCC: https://github.com/gcc-mirror/gcc
Изменить. Чтобы уточнить, "глазок" определяется как шаблон поиска и замены с некоторыми связанными с ним побочными условиями для того, чтобы rewrite был действительным (часто только некоторые данные об активности регистра/флажка).
Ответы
Ответ 1
Посмотрите в различных файлах *.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#Peephole-Definitions
Ответ 2
Это действительно вне темы, поскольку здесь слишком широко.
Вы можете заглянуть в мою страницы MELT; он имеет несколько полезных ссылок (особенно Индийский центр ресурсов GCC), и большинство слайдов, которые я написал, содержат справочный материал и учебный материал...
Большинство оптимизаций GCC происходят в промежуточных средах (целевых и исходных нейтральных), а не в бэкэнде.
И оптимизация peephole не означает многого (точно) в наши дни, и большая часть мощности оптимизации GCC не исходит от нее.