Steven Bosscher - [PATCH] Clean up two places where we remove REG_EQ* notes (original) (raw)
This is the mail archive of the gcc-patches@gcc.gnu.orgmailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
- From: Steven Bosscher
- To: gcc-patches at gcc dot gnu dot org
- Cc: "Sayle, Roger"
- Date: Tue, 20 Feb 2007 18:36:23 +0100
- Subject: [PATCH] Clean up two places where we remove REG_EQ* notes
Hi,
This patch just cleans up code in combine.c and postreload.c that looks the same and does the same. I've factored that code into a new function.
Bootstrapped and tested on i686-pc-linux-gnu. OK for the trunk?
Gr. Steven
* rtl.h (remove_reg_equal_equiv_notes): New prototype.
* rtlanal.c (remove_reg_equal_equiv_notes): New function.
* combine.c (adjust_for_new_dest): Use it.
* postreload.c (reload_combine): Likewise.
Index: rtl.h
--- rtl.h (revision 122166) +++ rtl.h (working copy) @@ -1702,6 +1702,7 @@ extern int find_reg_fusage (rtx, enum rt extern int find_regno_fusage (rtx, enum rtx_code, unsigned int); extern int pure_call_p (rtx); extern void remove_note (rtx, rtx); +extern void remove_reg_equal_equiv_notes (rtx); extern int side_effects_p (rtx); extern int volatile_refs_p (rtx); extern int volatile_insn_p (rtx); Index: rtlanal.c
--- rtlanal.c (revision 122166) +++ rtlanal.c (working copy) @@ -1813,6 +1820,24 @@ remove_note (rtx insn, rtx note) gcc_unreachable (); } +/* Remove REG_EQUAL and/or REG_EQUIV notes if INSN has such notes. */ + +void +remove_reg_equal_equiv_notes (rtx insn) +{ + rtx *loc; + + loc = ®_NOTES (insn); + while (*loc) + { + enum reg_note kind = REG_NOTE_KIND (*loc); + if (kind == REG_EQUAL || kind == REG_EQUIV) + *loc = XEXP (*loc, 1); + else + loc = &XEXP (loc, 1); + } +} + / Search LISTP (an EXPR_LIST) for an entry whose first operand is NODE and return 1 if it is found. A simple equality test is used to determine if NODE matches. */ Index: combine.c
--- combine.c (revision 122166) +++ combine.c (working copy) @@ -1726,18 +1726,8 @@ likely_spilled_retval_p (rtx insn) static void adjust_for_new_dest (rtx insn) { - rtx *loc;
/* For notes, be conservative and simply remove them. */ - loc = ®_NOTES (insn); - while (*loc) - { - enum reg_note kind = REG_NOTE_KIND (*loc); - if (kind == REG_EQUAL || kind == REG_EQUIV) - *loc = XEXP (*loc, 1); - else - loc = &XEXP (loc, 1); - } + remove_reg_equal_equiv_notes (insn); / The new insn will have a destination that was previously the destination of an insn just above it. Call distribute_links to make a LOG_LINK from Index: postreload.c
--- postreload.c (revision 122166) +++ postreload.c (working copy) @@ -887,22 +887,13 @@ reload_combine (void) if (apply_change_group ()) { - rtx *np;
/* Delete the reg-reg addition. */
delete_insn (insn);
if (reg_state[regno].offset != const0_rtx)
/* Previous REG_EQUIV / REG_EQUAL notes for PREV
are now invalid. */
for (np = ®_NOTES (prev); *np;)
{
if (REG_NOTE_KIND (*np) == REG_EQUAL
|| REG_NOTE_KIND (*np) == REG_EQUIV)
*np = XEXP (*np, 1);
else
np = &XEXP (*np, 1);
}
remove_reg_equal_equiv_notes (prev); reg_state[regno].use_index = RELOAD_COMBINE_MAX_USES; reg_state[REGNO (const_reg)].store_ruid
- Follow-Ups:
- Re: [PATCH] Clean up two places where we remove REG_EQ* notes
* From: Richard Guenther
- Re: [PATCH] Clean up two places where we remove REG_EQ* notes
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |