Message ID | CAFULd4bNJounwyhgT3DgAJzPZ_iH-yZG-Z-rbRoJytD4M0UJJQ@mail.gmail.com |
---|---|
State | New |
Headers | show |
> 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.
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;