aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorspark <spark@138bc75d-0d04-0410-961f-82ee72b054a4>2007-04-24 19:58:38 +0000
committerspark <spark@138bc75d-0d04-0410-961f-82ee72b054a4>2007-04-24 19:58:38 +0000
commitb30a3dbc878c1b49cfccdcf4f3f528a029cfd94b (patch)
tree047351725dbf57e6b28ea12e5436918ace5a2ee0
parent6a319549b626e48866cacf3edc5cc1bb0a8e6bb9 (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.dataflow8
-rw-r--r--gcc/config/sparc/sparc.c1
-rw-r--r--gcc/dce.c15
-rw-r--r--gcc/df-scan.c20
-rw-r--r--gcc/final.c2
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;
}