diff options
author | spark <spark@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-04-24 19:58:38 +0000 |
---|---|---|
committer | spark <spark@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-04-24 19:58:38 +0000 |
commit | b30a3dbc878c1b49cfccdcf4f3f528a029cfd94b (patch) | |
tree | 047351725dbf57e6b28ea12e5436918ace5a2ee0 | |
parent | 6a319549b626e48866cacf3edc5cc1bb0a8e6bb9 (diff) |
2007-04-24 Seongbae Park <seongbae.park@gmail.com>
* 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
-rw-r--r-- | gcc/ChangeLog.dataflow | 8 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.c | 1 | ||||
-rw-r--r-- | gcc/dce.c | 15 | ||||
-rw-r--r-- | gcc/df-scan.c | 20 | ||||
-rw-r--r-- | 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 <seongbae.park@gmail.com> + + * 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 <steven@gcc.gnu.org> Kenneth Zadeck <zadeck@naturalbridge.com> 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; } |