> It looks to me, that we in fact want: > > --cut here-- > Index: mode-switching.c > =================================================================== > --- mode-switching.c (revision 193407) > +++ mode-switching.c (working copy) > @@ -330,7 +330,7 @@ > short_block = 1; > break; > } > - if (copy_start >= FIRST_PSEUDO_REGISTER) > + if (!targetm.calls.function_value_regno_p (copy_start)) > { > last_insn = return_copy; > continue; > --cut here-- > > If we find an unrelated HARD register, we will fail in the same way as > described in the PR. This was found by post-reload vzeroupper > insertion pass that tripped on unrelated hard reg assignment. At this > point, we are interested only in hard registers that are also used for > function return value. Actually, even in pre-reload pass, there are no > other assignments to hard registers.
Fine with me if this passes testing on x86-avx and SH4. -- Eric Botcazou