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]

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 = &REG_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 = &REG_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.  */

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]