Commit 8fb1e50e by Graham Stott Committed by Graham Stott

* cse.c (cse_insn): Emit BARRIER after unconditional jump.

From-SVN: r46824
parent b972dd02
2001-11-07 Graham Stott <grahams@redhat.com>
* cse.c (cse_insn): Emit BARRIER after unconditional jump.
Wed Nov 7 13:33:34 CET 2001 Jan Hubicka <jh@suse.cz> Wed Nov 7 13:33:34 CET 2001 Jan Hubicka <jh@suse.cz>
* expmed.c (expand_mult): Force operand to register before computing * expmed.c (expand_mult): Force operand to register before computing
......
...@@ -5767,6 +5767,11 @@ cse_insn (insn, libcall_insn) ...@@ -5767,6 +5767,11 @@ cse_insn (insn, libcall_insn)
be a conditional or computed branch. */ be a conditional or computed branch. */
else if (dest == pc_rtx && GET_CODE (src) == LABEL_REF) else if (dest == pc_rtx && GET_CODE (src) == LABEL_REF)
{ {
/* Now emit a BARRIER after the unconditional jump. */
if (NEXT_INSN (insn) == 0
|| GET_CODE (NEXT_INSN (insn)) != BARRIER)
emit_barrier_after (insn);
/* We reemit the jump in as many cases as possible just in /* We reemit the jump in as many cases as possible just in
case the form of an unconditional jump is significantly case the form of an unconditional jump is significantly
different than a computed jump or conditional jump. different than a computed jump or conditional jump.
...@@ -5777,20 +5782,23 @@ cse_insn (insn, libcall_insn) ...@@ -5777,20 +5782,23 @@ cse_insn (insn, libcall_insn)
if (n_sets == 1) if (n_sets == 1)
{ {
rtx new = emit_jump_insn_before (gen_jump (XEXP (src, 0)), insn); rtx new = emit_jump_insn_before (gen_jump (XEXP (src, 0)), insn);
JUMP_LABEL (new) = XEXP (src, 0); JUMP_LABEL (new) = XEXP (src, 0);
LABEL_NUSES (XEXP (src, 0))++; LABEL_NUSES (XEXP (src, 0))++;
insn = new; insn = new;
/* Now emit a BARRIER after the unconditional jump. */
if (NEXT_INSN (insn) == 0
|| GET_CODE (NEXT_INSN (insn)) != BARRIER)
emit_barrier_after (insn);
} }
else else
INSN_CODE (insn) = -1; INSN_CODE (insn) = -1;
never_reached_warning (insn); never_reached_warning (insn);
/* Now emit a BARRIER after the unconditional jump. Do not bother /* Do not bother deleting any unreachable code,
deleting any unreachable code, let jump/flow do that. */ let jump/flow do that. */
if (NEXT_INSN (insn) != 0
&& GET_CODE (NEXT_INSN (insn)) != BARRIER)
emit_barrier_after (insn);
cse_jumps_altered = 1; cse_jumps_altered = 1;
sets[i].rtl = 0; sets[i].rtl = 0;
......
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