Commit 834452d2 by Mark Mitchell Committed by Mark Mitchell

* jump.c (mark_jump_label): Fix thinko in 2001-05-19 change.

From-SVN: r42491
parent 7cc72e9c
2001-05-23 Mark Mitchell <mark@codesourcery.com>
* jump.c (mark_jump_label): Fix thinko in 2001-05-19 change.
2001-05-23 Richard Henderson <rth@redhat.com> 2001-05-23 Richard Henderson <rth@redhat.com>
* function.c (expand_function_start): Always use a pseudo * function.c (expand_function_start): Always use a pseudo
......
...@@ -2542,47 +2542,36 @@ mark_jump_label (x, insn, cross_jump, in_mem) ...@@ -2542,47 +2542,36 @@ mark_jump_label (x, insn, cross_jump, in_mem)
{ {
if (GET_CODE (insn) == JUMP_INSN) if (GET_CODE (insn) == JUMP_INSN)
JUMP_LABEL (insn) = label; JUMP_LABEL (insn) = label;
else
/* If we've changed the label, update notes accordingly. */
else if (label != olabel)
{ {
rtx note; /* If we've changed the label, update notes accordingly. */
if (label != olabel)
/* We may have a REG_LABEL note to indicate that this {
instruction uses the label. */ rtx note;
note = find_reg_note (insn, REG_LABEL, olabel);
if (note) /* We may have a REG_LABEL note to indicate that this
XEXP (note, 0) = label; instruction uses the label. */
note = find_reg_note (insn, REG_LABEL, olabel);
/* We may also have a REG_EQUAL note to indicate that if (note)
a register is being set to the address of the XEXP (note, 0) = label;
label. */
note = find_reg_note (insn, REG_EQUAL, NULL_RTX); /* We may also have a REG_EQUAL note to indicate that
if (note a register is being set to the address of the
&& GET_CODE (XEXP (note, 0)) == LABEL_REF label. */
&& XEXP (XEXP (note, 0), 0) == olabel) note = find_reg_note (insn, REG_EQUAL, NULL_RTX);
XEXP (XEXP (note, 0), 0) = label; if (note
} && GET_CODE (XEXP (note, 0)) == LABEL_REF
&& XEXP (XEXP (note, 0), 0) == olabel)
XEXP (XEXP (note, 0), 0) = label;
}
/* Otherwise, add a REG_LABEL note for LABEL unless there already /* Add a REG_LABEL note for LABEL unless there already
is one. */ is one. All uses of a label, except for labels
else if (! find_reg_note (insn, REG_LABEL, label)) that are the targets of jumps, must have a
{ REG_LABEL note. */
/* This code used to ignore labels which refered to dispatch if (! find_reg_note (insn, REG_LABEL, label))
tables to avoid flow.c generating worse code. REG_NOTES (insn) = gen_rtx_INSN_LIST (REG_LABEL, label,
REG_NOTES (insn));
However, in the presense of global optimizations like
gcse which call find_basic_blocks without calling
life_analysis, not recording such labels will lead
to compiler aborts because of inconsistencies in the
flow graph. So we go ahead and record the label.
It may also be the case that the optimization argument
is no longer valid because of the more accurate cfg
we build in find_basic_blocks -- it no longer pessimizes
code when it finds a REG_LABEL note. */
REG_NOTES (insn) = gen_rtx_INSN_LIST (REG_LABEL, label,
REG_NOTES (insn));
} }
} }
return; return;
......
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