This is the mail archive of the gcc-patches@gcc.gnu.org mailing 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 = ®_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
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |