aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/fwprop.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr42728.c11
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c9bea66..b6ea293 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2010-01-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/42728
+ * fwprop.c (all_uses_available_at): Return false if def_set dest
+ is a REG that is used in def_insn.
+
2010-01-19 Joern Rennecke <amylaar@spamcop.net>
* doc/tm.texi (TARGET_FIXED_CONDITION_CODE_REGS): Add argument names.
diff --git a/gcc/fwprop.c b/gcc/fwprop.c
index 0c5c728..708ab3f 100644
--- a/gcc/fwprop.c
+++ b/gcc/fwprop.c
@@ -818,17 +818,23 @@ all_uses_available_at (rtx def_insn, rtx target_insn)
}
else
{
+ rtx def_reg = REG_P (SET_DEST (def_set)) ? SET_DEST (def_set) : NULL_RTX;
+
/* Look at all the uses of DEF_INSN, and see if they are not
killed between DEF_INSN and TARGET_INSN. */
for (use_rec = DF_INSN_INFO_USES (insn_info); *use_rec; use_rec++)
{
df_ref use = *use_rec;
+ if (def_reg && rtx_equal_p (DF_REF_REG (use), def_reg))
+ return false;
if (use_killed_between (use, def_insn, target_insn))
return false;
}
for (use_rec = DF_INSN_INFO_EQ_USES (insn_info); *use_rec; use_rec++)
{
df_ref use = *use_rec;
+ if (def_reg && rtx_equal_p (DF_REF_REG (use), def_reg))
+ return false;
if (use_killed_between (use, def_insn, target_insn))
return false;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fb6d093..f2a4f8a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-01-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/42728
+ * gcc.dg/pr42728.c: New test.
+
2010-01-19 Anthony Green <green@moxielogic.com>
* gcc.dg/tree-ssa/20040204-1.c: Expect this test to pass.
diff --git a/gcc/testsuite/gcc.dg/pr42728.c b/gcc/testsuite/gcc.dg/pr42728.c
new file mode 100644
index 0000000..7b2fbb6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr42728.c
@@ -0,0 +1,11 @@
+/* PR debug/42728 */
+/* { dg-do compile } */
+/* { dg-options "-O1 -fcompare-debug" } */
+
+void
+foo (char *a)
+{
+ char *b;
+ for (; *a; a++)
+ a = b++;
+}