> What I was confused about is that the first set isn't valid rtl. > The SET_SRC and SET_DEST always have to have the same mode > (or VOIDmode in the case of a CONST_INT, etc., where the mode > is implicitly the same as the SET_DEST). So wouldn't it have > to be: > > (set (reg:SI 1) > (subreg:SI (reg:PSI 2))) > > or: > > (set (reg:PSI 1) > (subreg:PSI (reg:SI 2))) > > ?
If my memory doesn't match reality, I blame my memory. I'd have to experiment a while to dig out the details, but the key point is that a PSI in a reg is not stored the same as a PSI subreg of an SI reg. You have to keep that information across subregs or you lose track of where the actual bits are.