cse.c (new_label_ref): New variable.

* cse.c (new_label_ref): New variable.
	(insert): Set it instead of recorded_label_ref.
	(cse_basic_block): Set recorded_label_ref if new_label_ref use, has
	CODE_LABEL for this function, and not already in REG_LABEL note.

From-SVN: r39768
This commit is contained in:
Richard Kenner 2001-02-16 17:50:49 +00:00 committed by Richard Kenner
parent f0217d415d
commit f85cc4cbe2
2 changed files with 24 additions and 4 deletions

View File

@ -1,3 +1,10 @@
Fri Feb 16 12:41:30 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* cse.c (new_label_ref): New variable.
(insert): Set it instead of recorded_label_ref.
(cse_basic_block): Set recorded_label_ref if new_label_ref use, has
CODE_LABEL for this function, and not already in REG_LABEL note.
2001-02-16 Jeffrey Oldham <oldham@codesourcery.com>
* resource.c (mark_referenced_resources): Fix typo in introductory

View File

@ -382,11 +382,14 @@ static int cse_altered;
static int cse_jumps_altered;
/* Nonzero if we put a LABEL_REF into the hash table. Since we may have put
it into an INSN without a REG_LABEL, we have to rerun jump after CSE
to put in the note. */
/* Nonzero if we put a LABEL_REF into the hash table for an INSN without a
REG_LABEL, we have to rerun jump after CSE to put in the note. */
static int recorded_label_ref;
/* Says which LABEL_REF was put in the hash table. Used to see if we need
to set the above flag. */
static rtx new_label_ref;
/* canon_hash stores 1 in do_not_record
if it notices a reference to CC0, PC, or some other volatile
subexpression. */
@ -1581,7 +1584,7 @@ insert (x, classp, hash, mode)
if (GET_CODE (x) == LABEL_REF
|| (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == PLUS
&& GET_CODE (XEXP (XEXP (x, 0), 0)) == LABEL_REF))
recorded_label_ref = 1;
new_label_ref = x;
/* Put an element for X into the right hash bucket. */
@ -7308,7 +7311,17 @@ cse_basic_block (from, to, next_branch, around_loop)
libcall_insn = 0;
}
new_label_ref = 0;
cse_insn (insn, libcall_insn);
/* If this insn uses a LABEL_REF and there isn't a REG_LABEL
note for it, we must rerun jump since it needs to place the
note. If this is a LABEL_REF for a CODE_LABEL that isn't in
the insn chain, don't do this since no REG_LABEL will be added. */
if (new_label_ref != 0 && INSN_UID (XEXP (new_label_ref, 0)) != 0
&& reg_mentioned_p (new_label_ref, PATTERN (insn))
&& ! find_reg_note (insn, REG_LABEL, XEXP (new_label_ref, 0)))
recorded_label_ref = 1;
}
/* If INSN is now an unconditional jump, skip to the end of our