https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99025
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Uroš Bizjak from comment #2) > Comment on attachment 50154 [details] > gcc11-pr99025.patch > > >2021-02-09 Jakub Jelinek <ja...@redhat.com> > > >+ if (SUBREG_P (operands[1])) > >+ operands[1] = force_reg (V2SFmode, operands[1]); > > There is no need to check for SUBREG, force_reg has early exit in case > operand is already a register. I know, I've just misread nonimmediate_operand as nonmemory_operand and thought I need to let immediates get through to simplify_gen_subreg. The predicates are register_operand (so REG or SUBREG) or nonimmediate_operand (so REG, SUBREG or MEM and in that case this is used in !MEM_P paths) and so you're right force_reg can be called unconditionally.