From b30a3dbc878c1b49cfccdcf4f3f528a029cfd94b Mon Sep 17 00:00:00 2001 From: spark Date: Tue, 24 Apr 2007 19:58:38 +0000 Subject: 2007-04-24 Seongbae Park * final.c (leaf_renumber_regs_insn): Use SET_REGNO(). * df-scan.c (df_insn_refs_collect): Handle non-local gotos. * sparc.c: New include of df.h. * dce.c (prescan_insns_for_dce): Call mark_libcall for all insns with with REG_LIBCALL_ID. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/dataflow-branch@124118 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog.dataflow | 8 ++++++++ gcc/config/sparc/sparc.c | 1 + gcc/dce.c | 15 ++++++--------- gcc/df-scan.c | 20 ++++++++++++++++++-- gcc/final.c | 2 +- 5 files changed, 34 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog.dataflow b/gcc/ChangeLog.dataflow index b6a6229573a..e36dec2d4ce 100644 --- a/gcc/ChangeLog.dataflow +++ b/gcc/ChangeLog.dataflow @@ -1,3 +1,11 @@ +2007-04-24 Seongbae Park + + * final.c (leaf_renumber_regs_insn): Use SET_REGNO(). + * df-scan.c (df_insn_refs_collect): Handle non-local gotos. + * sparc.c: New include of df.h. + * dce.c (prescan_insns_for_dce): Call mark_libcall for all insns + with with REG_LIBCALL_ID. + 2007-04-23 Steven Bosscher Kenneth Zadeck diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index 4ab34e55800..eb9c040e554 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -52,6 +52,7 @@ Boston, MA 02110-1301, USA. */ #include "tree-gimple.h" #include "langhooks.h" #include "params.h" +#include "df.h" /* Processor costs */ static const diff --git a/gcc/dce.c b/gcc/dce.c index 84952d7fd66..01b386c4d1f 100644 --- a/gcc/dce.c +++ b/gcc/dce.c @@ -359,16 +359,13 @@ prescan_insns_for_dce (void) FOR_BB_INSNS (bb, insn) if (INSN_P (insn)) { - if (deletable_insn_p (insn, true)) + rtx note = find_reg_note (insn, REG_LIBCALL_ID, NULL_RTX); + if (note) + mark_libcall (insn, true); + else if (deletable_insn_p (insn, true)) mark_nonreg_stores (PATTERN (insn), insn, true); - else - { - rtx note = find_reg_note (insn, REG_LIBCALL_ID, NULL_RTX); - if (note) - mark_libcall (insn, true); - else - mark_insn (insn, true); - } + else + mark_insn (insn, true); } if (dump_file) diff --git a/gcc/df-scan.c b/gcc/df-scan.c index a2377b216a4..a5c73ca75d6 100644 --- a/gcc/df-scan.c +++ b/gcc/df-scan.c @@ -3104,8 +3104,24 @@ df_insn_refs_collect (struct df_collection_rec* collection_rec, case REG_EQUIV: case REG_EQUAL: df_uses_record (collection_rec, - &XEXP (note, 0), DF_REF_REG_USE, - bb, insn, DF_REF_IN_NOTE); + &XEXP (note, 0), DF_REF_REG_USE, + bb, insn, DF_REF_IN_NOTE); + break; + case REG_NON_LOCAL_GOTO: + /* The frame ptr is used by a non-local goto. */ + df_ref_record (collection_rec, + regno_reg_rtx[FRAME_POINTER_REGNUM], + NULL, + bb, insn, + DF_REF_REG_USE, 0); +#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM + df_ref_record (collection_rec, + regno_reg_rtx[HARD_FRAME_POINTER_REGNUM], + NULL, + bb, insn, + DF_REF_REG_USE, 0); +#endif + break; default: break; } diff --git a/gcc/final.c b/gcc/final.c index 9ec3981b7b8..03071acedc1 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -3855,7 +3855,7 @@ leaf_renumber_regs_insn (rtx in_rtx) gcc_assert (newreg >= 0); df_set_regs_ever_live (REGNO (in_rtx), false); df_set_regs_ever_live (newreg, true); - REGNO (in_rtx) = newreg; + SET_REGNO (in_rtx, newreg); in_rtx->used = 1; } -- cgit v1.2.3