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

--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Wilco from comment #2)
> (In reply to Andrew Pinski from comment #1)
> > lower-subreg should have be able to help here.  I wonder why it did not ...
> 
> I'm not sure how it can help. When you write a part of a multi-register mode
> using subreg, you get incorrect liveness info. This is why splitting 64-bit
> types on 32-bit targets before register allocation gives such a huge gain.

Actually no, lower-subreg was not supposed to fix incorrect liveness info but
rather improve other things.

Also lower-subreg does not handle OImode/CImode/XImode as an array of vectors
but rather as integer modes.  You can see that effect by changing the define
FORCE_LOWERING to 1 and see how it will decompose the registers.  Really we
want to decompose the registers to TImode in this case rather than DImode.  I
have not looked into how we could enhance lower-subreg to do that.  This will
fix the issue even better.

Reply via email to