Commit 52fe4de8 by John David Anglin Committed by John David Anglin

reorg.c (delete_from_delay_slot): If we have a barrier after the sequence…

reorg.c (delete_from_delay_slot): If we have a barrier after the sequence containing the insn to be deleted...

	* reorg.c (delete_from_delay_slot): If we have a barrier after the
	sequence containing the insn to be deleted, always reemit it.

From-SVN: r82065
parent 7e140280
2004-05-20 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* reorg.c (delete_from_delay_slot): If we have a barrier after the
sequence containing the insn to be deleted, always reemit it.
2004-05-20 Richard Henderson <rth@redhat.com> 2004-05-20 Richard Henderson <rth@redhat.com>
PR 15454 PR 15454
......
...@@ -570,6 +570,7 @@ delete_from_delay_slot (rtx insn) ...@@ -570,6 +570,7 @@ delete_from_delay_slot (rtx insn)
rtx trial, seq_insn, seq, prev; rtx trial, seq_insn, seq, prev;
rtx delay_list = 0; rtx delay_list = 0;
int i; int i;
int had_barrier = 0;
/* We first must find the insn containing the SEQUENCE with INSN in its /* We first must find the insn containing the SEQUENCE with INSN in its
delay slot. Do this by finding an insn, TRIAL, where delay slot. Do this by finding an insn, TRIAL, where
...@@ -583,6 +584,9 @@ delete_from_delay_slot (rtx insn) ...@@ -583,6 +584,9 @@ delete_from_delay_slot (rtx insn)
seq_insn = PREV_INSN (NEXT_INSN (trial)); seq_insn = PREV_INSN (NEXT_INSN (trial));
seq = PATTERN (seq_insn); seq = PATTERN (seq_insn);
if (NEXT_INSN (seq_insn) && GET_CODE (NEXT_INSN (seq_insn)) == BARRIER)
had_barrier = 1;
/* Create a delay list consisting of all the insns other than the one /* Create a delay list consisting of all the insns other than the one
we are deleting (unless we were the only one). */ we are deleting (unless we were the only one). */
if (XVECLEN (seq, 0) > 2) if (XVECLEN (seq, 0) > 2)
...@@ -597,8 +601,8 @@ delete_from_delay_slot (rtx insn) ...@@ -597,8 +601,8 @@ delete_from_delay_slot (rtx insn)
delete_related_insns (seq_insn); delete_related_insns (seq_insn);
add_insn_after (trial, prev); add_insn_after (trial, prev);
if (GET_CODE (trial) == JUMP_INSN /* If there was a barrier after the old SEQUENCE, remit it. */
&& (simplejump_p (trial) || GET_CODE (PATTERN (trial)) == RETURN)) if (had_barrier)
emit_barrier_after (trial); emit_barrier_after (trial);
/* If there are any delay insns, remit them. Otherwise clear the /* If there are any delay insns, remit them. Otherwise clear the
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment