From 834452d2f4f96aaaa048f2e50197f9c01fdcfdfe Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Wed, 23 May 2001 07:56:45 +0000 Subject: [PATCH] * jump.c (mark_jump_label): Fix thinko in 2001-05-19 change. From-SVN: r42491 --- gcc/ChangeLog | 4 +++ gcc/jump.c | 67 +++++++++++++++++++++------------------------------ 2 files changed, 32 insertions(+), 39 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 98aa47afcbe1..0bb7521f65ba 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2001-05-23 Mark Mitchell + + * jump.c (mark_jump_label): Fix thinko in 2001-05-19 change. + 2001-05-23 Richard Henderson * function.c (expand_function_start): Always use a pseudo diff --git a/gcc/jump.c b/gcc/jump.c index 8f9c6b45a368..5d5c6d6e796d 100644 --- a/gcc/jump.c +++ b/gcc/jump.c @@ -2542,47 +2542,36 @@ mark_jump_label (x, insn, cross_jump, in_mem) { if (GET_CODE (insn) == JUMP_INSN) JUMP_LABEL (insn) = label; - - /* If we've changed the label, update notes accordingly. */ - else if (label != olabel) + else { - rtx note; - - /* We may have a REG_LABEL note to indicate that this - instruction uses the label. */ - note = find_reg_note (insn, REG_LABEL, olabel); - if (note) - XEXP (note, 0) = label; - - /* We may also have a REG_EQUAL note to indicate that - a register is being set to the address of the - label. */ - note = find_reg_note (insn, REG_EQUAL, NULL_RTX); - if (note - && GET_CODE (XEXP (note, 0)) == LABEL_REF - && XEXP (XEXP (note, 0), 0) == olabel) - XEXP (XEXP (note, 0), 0) = label; - } + /* If we've changed the label, update notes accordingly. */ + if (label != olabel) + { + rtx note; + + /* We may have a REG_LABEL note to indicate that this + instruction uses the label. */ + note = find_reg_note (insn, REG_LABEL, olabel); + if (note) + XEXP (note, 0) = label; + + /* We may also have a REG_EQUAL note to indicate that + a register is being set to the address of the + label. */ + note = find_reg_note (insn, REG_EQUAL, NULL_RTX); + 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 - is one. */ - else if (! find_reg_note (insn, REG_LABEL, label)) - { - /* This code used to ignore labels which refered to dispatch - tables to avoid flow.c generating worse code. - - 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)); + /* Add a REG_LABEL note for LABEL unless there already + is one. All uses of a label, except for labels + that are the targets of jumps, must have a + REG_LABEL note. */ + if (! find_reg_note (insn, REG_LABEL, label)) + REG_NOTES (insn) = gen_rtx_INSN_LIST (REG_LABEL, label, + REG_NOTES (insn)); } } return; -- 2.43.5