https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67609
--- Comment #22 from Richard Henderson <rth at gcc dot gnu.org> --- (In reply to Jeffrey A. Law from comment #21) > So going back to the original problem, for a subreg of a multi-word reg, > why can't we simplify that down to a suitably sized reg? Because we're dealing with registers of different sizes. Assigning to a subreg as the low-part of a multi-word pseudo only makes sense when talking about general registers, which is the only place that "word_mode" applies. When talking about vector registers, which are universally larger than word-mode, we cannot simply assign to a subreg. There is a vec_set named pattern that can perform an insertion into a vector element, like what's being demonstrated in the test source here. Ideally that's how we'd have expanded this originally. We already have ix86_cannot_change_mode_class to avoid the cases that we knew we couldn't support, e.g. QI and HImode loads/stores. But perhaps we should prevent all size-changing mode changes for the vector registers.