On Wed, Apr 14, 2021 at 09:25:46PM +0200, Jakub Jelinek wrote: > On Wed, Apr 14, 2021 at 01:47:04PM -0500, Segher Boessenkool wrote: > > > and I must say I don't know if make_more_copies was meant to > > > split insn 2 into (set (reg:QI pseudo) (reg:QI 0 x0)) and > > > (set (reg/v:SI 96) (zero_extend:SI (reg:QI pseudo))) > > > or not. > > > > It makes > > > > (set (reg:QI new) (reg:QI x0)) > > (set (reg:SI 96) (zero_extend:SI (reg:QI new))) > > > > The point is it keeps exactly the same form, but no hard regs anymore. > > It doesn't, as make_more_copies does: > rtx dest = SET_DEST (set); > if (!(REG_P (dest) && !HARD_REGISTER_P (dest))) > continue; > > rtx src = SET_SRC (set); > if (!(REG_P (src) && HARD_REGISTER_P (src))) > continue; > but in this case the hard reg is wrapped into the zero_extend already > and so it will continue;
Ah, I see. That could/should be improved then. But, GCC 12 :-) Segher