diff options
author | Steven Bosscher <steven@gcc.gnu.org> | 2012-10-17 06:15:38 +0000 |
---|---|---|
committer | Steven Bosscher <steven@gcc.gnu.org> | 2012-10-17 06:15:38 +0000 |
commit | 8c266ffa32d238cc400fa8ed92448de789f67739 (patch) | |
tree | fef0784fa67a3a57115f1178eca84b52d9a8e0aa /gcc | |
parent | d564b816874a443ae3ced1f11b48633abe412cc3 (diff) | |
download | gcc-8c266ffa32d238cc400fa8ed92448de789f67739.zip gcc-8c266ffa32d238cc400fa8ed92448de789f67739.tar.gz gcc-8c266ffa32d238cc400fa8ed92448de789f67739.tar.bz2 |
df-problems.c (df_kill_notes): Split up in two functions.
* df-problems.c (df_kill_notes): Split up in two functions.
(df_remove_dead_and_unused_notes): New function, first half of
df_kill notes to remove all REG_DEAD and REG_UNUSED notes.
(df_remove_dead_eq_notes): New function, second half of df_kill_notes
to remove REG_EQUAL and REG_EQUIV notes referring to dead registers.
(df_note_bb_compute): Call df_remove_dead_and_unused_notes instead
of df_kill_notes. Call df_remove_dead_eq_notes after processing insn.
* web.c (web): Re-add DF_RD_PRUNE_DEAD_DEFS;
From-SVN: r192526
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/df-problems.c | 34 | ||||
-rw-r--r-- | gcc/web.c | 3 |
3 files changed, 40 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5bef03d..72b9e14 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2012-10-16 Steven Bosscher <steven@gcc.gnu.org> + + * df-problems.c (df_kill_notes): Split up in two functions. + (df_remove_dead_and_unused_notes): New function, first half of + df_kill notes to remove all REG_DEAD and REG_UNUSED notes. + (df_remove_dead_eq_notes): New function, second half of df_kill_notes + to remove REG_EQUAL and REG_EQUIV notes referring to dead registers. + (df_note_bb_compute): Call df_remove_dead_and_unused_notes instead + of df_kill_notes. Call df_remove_dead_eq_notes after processing insn. + + * web.c (web): Re-add DF_RD_PRUNE_DEAD_DEFS; + 2012-10-16 Ian Lance Taylor <iant@google.com> * doc/extend.texi (Return Address): Change diff --git a/gcc/df-problems.c b/gcc/df-problems.c index b4df2ba..3f9228d 100644 --- a/gcc/df-problems.c +++ b/gcc/df-problems.c @@ -2822,13 +2822,10 @@ df_ignore_stack_reg (int regno ATTRIBUTE_UNUSED) #endif -/* Remove all of the REG_DEAD or REG_UNUSED notes from INSN and add - them to OLD_DEAD_NOTES and OLD_UNUSED_NOTES. Remove also - REG_EQUAL/REG_EQUIV notes referring to dead pseudos using LIVE - as the bitmap of currently live registers. */ +/* Remove all of the REG_DEAD or REG_UNUSED notes from INSN. */ static void -df_kill_notes (rtx insn, bitmap live) +df_remove_dead_and_unused_notes (rtx insn) { rtx *pprev = ®_NOTES (insn); rtx link = *pprev; @@ -2873,6 +2870,27 @@ df_kill_notes (rtx insn, bitmap live) } break; + default: + pprev = &XEXP (link, 1); + link = *pprev; + break; + } + } +} + +/* Remove REG_EQUAL/REG_EQUIV notes referring to dead pseudos using LIVE + as the bitmap of currently live registers. */ + +static void +df_remove_dead_eq_notes (rtx insn, bitmap live) +{ + rtx *pprev = ®_NOTES (insn); + rtx link = *pprev; + + while (link) + { + switch (REG_NOTE_KIND (link)) + { case REG_EQUAL: case REG_EQUIV: { @@ -2913,6 +2931,7 @@ df_kill_notes (rtx insn, bitmap live) } break; } + default: pprev = &XEXP (link, 1); link = *pprev; @@ -2921,7 +2940,6 @@ df_kill_notes (rtx insn, bitmap live) } } - /* Set a NOTE_TYPE note for REG in INSN. */ static inline void @@ -3195,7 +3213,7 @@ df_note_bb_compute (unsigned int bb_index, debug_insn = DEBUG_INSN_P (insn); bitmap_clear (do_not_gen); - df_kill_notes (insn, live); + df_remove_dead_and_unused_notes (insn); /* Process the defs. */ if (CALL_P (insn)) @@ -3336,6 +3354,8 @@ df_note_bb_compute (unsigned int bb_index, } } + df_remove_dead_eq_notes (insn, live); + if (debug_insn == -1) { /* ??? We could probably do better here, replacing dead @@ -336,8 +336,7 @@ web_main (void) rtx insn; df_set_flags (DF_NO_HARD_REGS + DF_EQ_NOTES); - /* We can not RD_PRUNE_DEAD_DEFS, because we care about REG_EQUAL - notes. */ + df_set_flags (DF_RD_PRUNE_DEAD_DEFS); df_chain_add_problem (DF_UD_CHAIN); df_analyze (); df_set_flags (DF_DEFER_INSN_RESCAN); |