cfgrtl.c (delete_insn): Assert insn hasn't been deleted yet.

* cfgrtl.c (delete_insn): Assert insn hasn't been deleted yet.
        * reload1.c (delete_output_reload): Zap spill_reg_store.  Take
        care not to delete instructions twice.

From-SVN: r48760
This commit is contained in:
Richard Henderson 2002-01-10 18:44:48 -08:00
parent df2c9a4453
commit cda94cbba1
3 changed files with 41 additions and 28 deletions

View File

@ -1,3 +1,9 @@
2002-01-10 Richard Henderson <rth@redhat.com>
* cfgrtl.c (delete_insn): Assert insn hasn't been deleted yet.
* reload1.c (delete_output_reload): Zap spill_reg_store. Take
care not to delete instructions twice.
2002-01-10 Zack Weinberg <zack@codesourcery.com>
* toplev.c: Don't declare environ (it's not used anywhere).
@ -154,7 +160,7 @@ Thu Jan 10 22:35:54 CET 2002 Jan Hubicka <jh@suse.cz>
Thu Jan 10 17:19:12 CET 2002 Jan Hubicka <jh@suse.cz>
* cfgcleanup.c (try_forward_edges): Properly initialize nthreaded_edges;
update edge probabilities to match.
update edge probabilities to match.
2002-01-10 Joseph S. Myers <jsm28@cam.ac.uk>
@ -187,7 +193,7 @@ Thu Jan 10 11:19:18 CET 2002 Jan Hubicka <jh@suse.cz>
2002-01-20 Graham Stott <grahams@redhat.com>
* dwarf2out.c (indirect_string_alloc, output_indirect_string):
Move prototype into DWARF2_DEBUGGING_INFO conditional block.
Move prototype into DWARF2_DEBUGGING_INFO conditional block.
2002-01-10 Richard Henderson <rth@redhat.com>
@ -287,8 +293,8 @@ Thu Jan 10 11:19:18 CET 2002 Jan Hubicka <jh@suse.cz>
2002-01-09 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
* real.c (c4xtoe, toc4x): Do some special conversion on long doubles
for the c4x target. Also improve layout.
* real.c (c4xtoe, toc4x): Do some special conversion on long doubles
for the c4x target. Also improve layout.
2002-01-09 Richard Henderson <rth@redhat.com>

View File

@ -135,6 +135,9 @@ delete_insn (insn)
if (really_delete)
{
/* If this insn has already been deleted, something is very wrong. */
if (INSN_DELETED_P (insn))
abort ();
remove_insn (insn);
INSN_DELETED_P (insn) = 1;
}

View File

@ -7537,9 +7537,8 @@ gen_reload (out, in, opnum, type)
return last ? NEXT_INSN (last) : get_insns ();
}
/* Delete a previously made output-reload
whose result we now believe is not needed.
First we double-check.
/* Delete a previously made output-reload whose result we now believe
is not needed. First we double-check.
INSN is the insn now being processed.
LAST_RELOAD_REG is the hard register number for which we want to delete
@ -7633,15 +7632,21 @@ delete_output_reload (insn, j, last_reload_reg)
}
}
/* We will be deleting the insn. Remove the spill reg information. */
for (k = HARD_REGNO_NREGS (last_reload_reg, GET_MODE (reg)); k-- > 0; )
{
spill_reg_store[last_reload_reg + k] = 0;
spill_reg_stored_to[last_reload_reg + k] = 0;
}
/* The caller has already checked that REG dies or is set in INSN.
It has also checked that we are optimizing, and thus some inaccurancies
in the debugging information are acceptable.
So we could just delete output_reload_insn.
But in some cases we can improve the debugging information without
sacrificing optimization - maybe even improving the code:
See if the pseudo reg has been completely replaced
with reload regs. If so, delete the store insn
and forget we had a stack slot for the pseudo. */
It has also checked that we are optimizing, and thus some
inaccurancies in the debugging information are acceptable.
So we could just delete output_reload_insn. But in some cases
we can improve the debugging information without sacrificing
optimization - maybe even improving the code: See if the pseudo
reg has been completely replaced with reload regs. If so, delete
the store insn and forget we had a stack slot for the pseudo. */
if (rld[j].out != rld[j].in
&& REG_N_DEATHS (REGNO (reg)) == 1
&& REG_N_SETS (REGNO (reg)) == 1
@ -7650,11 +7655,10 @@ delete_output_reload (insn, j, last_reload_reg)
{
rtx i2;
/* We know that it was used only between here
and the beginning of the current basic block.
(We also know that the last use before INSN was
the output reload we are thinking of deleting, but never mind that.)
Search that range; see if any ref remains. */
/* We know that it was used only between here and the beginning of
the current basic block. (We also know that the last use before
INSN was the output reload we are thinking of deleting, but never
mind that.) Search that range; see if any ref remains. */
for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
{
rtx set = single_set (i2);
@ -7677,7 +7681,8 @@ delete_output_reload (insn, j, last_reload_reg)
}
}
/* Delete the now-dead stores into this pseudo. */
/* Delete the now-dead stores into this pseudo. Note that this
loop also takes care of deleting output_reload_insn. */
for (i2 = PREV_INSN (insn); i2; i2 = PREV_INSN (i2))
{
rtx set = single_set (i2);
@ -7685,8 +7690,6 @@ delete_output_reload (insn, j, last_reload_reg)
if (set != 0 && SET_DEST (set) == reg)
{
delete_address_reloads (i2, insn);
/* This might be a basic block head,
thus don't use delete_insn. */
delete_insn (i2);
}
if (GET_CODE (i2) == CODE_LABEL
@ -7694,14 +7697,15 @@ delete_output_reload (insn, j, last_reload_reg)
break;
}
/* For the debugging info,
say the pseudo lives in this reload reg. */
/* For the debugging info, say the pseudo lives in this reload reg. */
reg_renumber[REGNO (reg)] = REGNO (rld[j].reg_rtx);
alter_reg (REGNO (reg), -1);
}
delete_address_reloads (output_reload_insn, insn);
delete_insn (output_reload_insn);
else
{
delete_address_reloads (output_reload_insn, insn);
delete_insn (output_reload_insn);
}
}
/* We are going to delete DEAD_INSN. Recursively delete loads of