re PR rtl-optimization/42631 ("-fcompare-debug failure" with "-O1 -funroll-loops")
authorJie Zhang <jie@codesourcery.com>
Sat, 5 Feb 2011 12:06:18 +0000 (12:06 +0000)
committerJie Zhang <jiez@gcc.gnu.org>
Sat, 5 Feb 2011 12:06:18 +0000 (12:06 +0000)
PR debug/42631
* web.c (entry_register): Don't clobber the number of the
first uninitialized reference in used[].

testsuite/
PR debug/42631
* gcc.dg/pr42631.c: Update test.
* gcc.dg/pr42631-2.c: New test.

From-SVN: r169851

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr42631-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr42631.c
gcc/web.c

index 39baf065e5e10610eea6855221d6545e8da8e784..de08bab31e921ee4ff5d6440d45191439ba671a7 100644 (file)
@@ -1,3 +1,9 @@
+2011-02-05  Jie Zhang  <jie@codesourcery.com>
+
+       PR debug/42631
+       * web.c (entry_register): Don't clobber the number of the
+       first uninitialized reference in used[].
+
 2011-02-04  Sebastian Pop  <sebastian.pop@amd.com>
 
        PR tree-optimization/46194
index 066e01963ee447e335c8da5cffaa6c62aa69f13b..89053c20e6dfbaea56dc4d6ee230b3c8a0771042 100644 (file)
@@ -1,3 +1,9 @@
+2011-02-05  Jie Zhang  <jie@codesourcery.com>
+
+       PR debug/42631
+       * gcc.dg/pr42631.c: Update test.
+       * gcc.dg/pr42631-2.c: New test.
+
 2001-02-05  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/47574
diff --git a/gcc/testsuite/gcc.dg/pr42631-2.c b/gcc/testsuite/gcc.dg/pr42631-2.c
new file mode 100644 (file)
index 0000000..a5da2de
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -funroll-loops -fdump-rtl-web" } */
+
+foo()
+{
+}
+
+/* { dg-final { scan-rtl-dump-not "Web oldreg" "web" } } */
+/* { dg-final { cleanup-rtl-dump "web" } } */
index f5ac5a53a107db8653d56045b589064aa1d0e071..3d6c229a01633e50131dd9c8b7263cfce5f63c10 100644 (file)
    combine uninitialized uses into a single web.  */
 
 /* { dg-do compile } */
-/* { dg-options "-g -O1 -funroll-loops -fcompare-debug" } */
+/* { dg-options "-g -O1 -funroll-loops -fcompare-debug -fdump-rtl-web" } */
 
 void foo()
 {
   unsigned k;
   while (--k > 0);
 }
+
+/* { dg-final { scan-rtl-dump-not "Web oldreg" "web" } } */
+/* { dg-final { cleanup-rtl-dump "web" } } */
index 9b849249b0d0634067aaaac687c024f18051e428..7014aa55dc74e0c34167db7aec1e012ad40a6dd6 100644 (file)
--- a/gcc/web.c
+++ b/gcc/web.c
@@ -260,7 +260,11 @@ entry_register (struct web_entry *entry, df_ref ref, unsigned int *used)
      and there won't be any use for the other values when we get to
      this point.  */
   if (used[REGNO (reg)] != 1)
-    newreg = reg, used[REGNO (reg)] = 1;
+    {
+      newreg = reg;
+      if (!used[REGNO (reg)])
+       used[REGNO (reg)] = 1;
+    }
   else
     {
       newreg = gen_reg_rtx (GET_MODE (reg));