]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR debug/42728 ("-fcompare-debug failure (length)" at -O1)
authorJakub Jelinek <jakub@redhat.com>
Tue, 19 Jan 2010 12:38:25 +0000 (13:38 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 19 Jan 2010 12:38:25 +0000 (13:38 +0100)
PR debug/42728
* fwprop.c (all_uses_available_at): Return false if def_set dest
is a REG that is used in def_insn.

* gcc.dg/pr42728.c: New test.

From-SVN: r156037

gcc/ChangeLog
gcc/fwprop.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr42728.c [new file with mode: 0644]

index c9bea665fc59b30759520909e4194828d14c17ac..b6ea293c4e8bb47d9b4c1c28f21d1712dedd1a3d 100644 (file)
@@ -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.
index 0c5c7280ad5c9637004f25a1216440a0934d7466..708ab3f8edc1828ad70ac0003be45b88e1043532 100644 (file)
@@ -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;
        }
index fb6d09334531e6bba7a9e07c89d75f2fb3e54830..f2a4f8a198486f0769cd62de979f39d9acdfd66b 100644 (file)
@@ -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 (file)
index 0000000..7b2fbb6
--- /dev/null
@@ -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++;
+}