https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105930

--- Comment #25 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Linus Torvalds from comment #23)
> (In reply to Jakub Jelinek from comment #22)
> > 
> > If the wider registers are narrowed before register allocation, it is just
> > a pair like (reg:SI 123) (reg:SI 256) and it can be allowed anywhere.
> 
> That was more what I was thinking - why is the DImode information being kept
> so long?

This is what is being discussed here.
Some possibilities are lower these multi-word operations during expansion from
GIMPLE to RTL (after all, the generic code usually does that without anything
special needed on the backend side unless one declares the backend can do that
better), one counter-argument to that is the x86 STV pass which uses vector
operations for 2 word operations when possible and it won't really work when it
is lowered during expansion.

Another is splitting those before register allocation, which is what some
patterns did and what other patterns didn't.

Or it can be split after register allocation.

My understanding was that Roger tried to change some patterns from splitting
after RA to before RA and it didn't improve this testcase, so in the end
changed some other patterns from splitting before RA to after RA.

Reply via email to