http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60763
--- Comment #6 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> --- (In reply to David Edelsohn from comment #5) > I can see why the proposed patch will work, but it seems a little > heavy-handed. This case isn't something that simplify_gen_subreg() should > handle? Normally it does, but in this case the backend uses CANNOT_CHANGE_MODE_CLASS to stop it: if (from_size < 8 || to_size < 8) return true; But AIUI the mode change is OK in this split. We start out with a 64-bit value in which the upper 32 bits are significant, then convert it to SFmode. Maybe it'd be more obvious if the input to vsx_xscvspdpn_directmove had the DImode version of the register too, to emphasise that no mode change happens outside the patterns.