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.