This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
pr 17186 fallout
- From: Richard Henderson <rth at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 14 Sep 2004 22:47:03 -0700
- Subject: pr 17186 fallout
I hate this pr.
So, I could fix the bulk of the 3.4 regressions with the following
patch, plus some additional tweakage to expand_function_end wrt
cfun->x_clobber_return_insn setup. But -finstrument-functions was
not fixable with this approach.
I've reverted the original change from the 3.4 branch.
I've also committed this one, since it *could* be a problem, and
did survive a bootstrap and test cycle.
The only way to fix the original bug on the branch, I think, is to
change reg-stack such that if it sees (clobber reg), and reg is
live after, it should load up a NaN there just as it would for st0
at the end of a function.
I don't know if I have the energy to do that right now. Maybe later.
r~
* sibcall.c (call_ends_block_p): Fix thinko finding the
last real insn in a block.
Index: sibcall.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/sibcall.c,v
retrieving revision 1.45
diff -c -p -d -r1.45 sibcall.c
*** sibcall.c 11 Dec 2003 00:20:48 -0000 1.45
--- sibcall.c 15 Sep 2004 05:34:51 -0000
*************** static int
*** 330,337 ****
call_ends_block_p (rtx insn, rtx end)
{
rtx new_insn;
/* END might be a note, so get the last nonnote insn of the block. */
! end = next_nonnote_insn (PREV_INSN (end));
/* If the call was the end of the block, then we're OK. */
if (insn == end)
--- 330,339 ----
call_ends_block_p (rtx insn, rtx end)
{
rtx new_insn;
+
/* END might be a note, so get the last nonnote insn of the block. */
! if (NOTE_P (end))
! end = prev_nonnote_insn (end);
/* If the call was the end of the block, then we're OK. */
if (insn == end)