From beea27550eb8be53affa33bdd8a32714b7166c60 Mon Sep 17 00:00:00 2001
From: Jie Zhang <jie@codesourcery.com>
Date: Sat, 5 Feb 2011 12:06:18 +0000
Subject: [PATCH] re PR rtl-optimization/42631 ("-fcompare-debug failure" with
 "-O1 -funroll-loops")

	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                    | 6 ++++++
 gcc/testsuite/ChangeLog          | 6 ++++++
 gcc/testsuite/gcc.dg/pr42631-2.c | 9 +++++++++
 gcc/testsuite/gcc.dg/pr42631.c   | 5 ++++-
 gcc/web.c                        | 6 +++++-
 5 files changed, 30 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/pr42631-2.c

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 39baf065e5e1..de08bab31e92 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 066e01963ee4..89053c20e6df 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 000000000000..a5da2de3f4b4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr42631-2.c
@@ -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" } } */
diff --git a/gcc/testsuite/gcc.dg/pr42631.c b/gcc/testsuite/gcc.dg/pr42631.c
index f5ac5a53a107..3d6c229a0163 100644
--- a/gcc/testsuite/gcc.dg/pr42631.c
+++ b/gcc/testsuite/gcc.dg/pr42631.c
@@ -14,10 +14,13 @@
    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" } } */
diff --git a/gcc/web.c b/gcc/web.c
index 9b849249b0d0..7014aa55dc74 100644
--- 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));
-- 
GitLab