https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106101
--- Comment #17 from Segher Boessenkool <segher at gcc dot gnu.org> --- (In reply to Andreas Krebbel from comment #16) > (In reply to Segher Boessenkool from comment #15) > > (In reply to Andreas Krebbel from comment #14) > > > > So you are suggesting that every strict_low_part after reload can just > > > > be > > > > removed? If that is true, should we not just do exactly that then? > > > > > > I think we have 3 options: > > > (1) Prevent reload from removing SUBREGs in STRICT_LOW_PARTs. > > > (2) Remove the STRICT_LOW_PART when resolving the inner SUBREG > > > (3) Define what a (STRICT_LOW_PART (reg:mode x)) means. > ... > > > (3) E.g. it means that the bits of hardreg x in its hardware mode (the > > > mode > > > for UNITS_PER_WORD) which are not covered by MODE are not touched by the > > > SET. > > > > But say you have (strict_low_part (subreg:HI (reg:SI) 0)) and the hardware > > is 64-bit. That only means the low 32 bits of the reg aren't clobbered, the > > high 32 bits are fair game. That does not agree with your proposed > > semantics. > > In that case I would have expected reload to turn this into > (strict_low_part (reg:HI xx)) > already. Yes, but that says the high 48 bits of the hardware reg are untouched, which is not true (only the high 16 of the low 32 are guaranteed unmodified).