re PR tree-optimization/87177 (wrong code at -O2 and -O3 on x86-64-linux-gnu)
authorRichard Biener <rguenther@suse.de>
Mon, 3 Sep 2018 17:41:05 +0000 (17:41 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 3 Sep 2018 17:41:05 +0000 (17:41 +0000)
2018-09-03  Richard Biener  <rguenther@suse.de>

PR tree-optimization/87177
* tree-ssa-sccvn.c (vuse_ssa_val): Revert previous change, keep
cleanup.

* gcc.dg/torture/pr87177.c: New testcase.
* gcc.dg/torture/pr87177-2.c: Likewise.

From-SVN: r264069

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr87177-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr87177.c [new file with mode: 0644]
gcc/tree-ssa-sccvn.c

index e6791fd8dba3b16b3ba67802d4cfbe64d44a8ca5..62e32c68774169f7ed845d3f816073d97e052af0 100644 (file)
@@ -1,3 +1,9 @@
+2018-09-03  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/87177
+       * tree-ssa-sccvn.c (vuse_ssa_val): Revert previous change, keep
+       cleanup.
+
 2018-09-03  Alexander Monakov  <amonakov@ispras.ru>
 
        * bb-reorder.c (edge_order): Convert to C-qsort-style
index b44c714d7d20b426e4a2a8557c67a68de9b6f1f6..9828b4b94dfe80d0ee015f906de81fcf3a703e88 100644 (file)
@@ -1,3 +1,9 @@
+2018-09-03  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/87177
+       * gcc.dg/torture/pr87177.c: New testcase.
+       * gcc.dg/torture/pr87177-2.c: Likewise.
+
 2018-09-03  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/87200
diff --git a/gcc/testsuite/gcc.dg/torture/pr87177-2.c b/gcc/testsuite/gcc.dg/torture/pr87177-2.c
new file mode 100644 (file)
index 0000000..5592076
--- /dev/null
@@ -0,0 +1,28 @@
+/* { dg-do compile } */
+/* { dg-options "-w" } */
+
+int dk;
+
+void
+lv (void)
+{
+  int nm;
+
+  dk = 1;
+  while (dk != 0)
+    {
+    }
+
+  if (1 / 0)
+    {
+      dk = 0;
+      while (dk != 0)
+       {
+       }
+    }
+
+  for (;;)
+    nm = !!dk;
+
+  (void) nm;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr87177.c b/gcc/testsuite/gcc.dg/torture/pr87177.c
new file mode 100644 (file)
index 0000000..efeaebf
--- /dev/null
@@ -0,0 +1,61 @@
+/* { dg-do run } */
+
+int __attribute__((noinline)) my_printf (const char *p, ...)
+{
+  static volatile int x;
+  ++x;
+}
+
+int a, b, c, e, f, g, h, i, j, k, l;
+unsigned d;
+
+static void p ()
+{
+  while (1)
+    {
+      int n = h;
+      h = 8;
+      if (!e)
+       break;
+      h = n;
+      while (1)
+       ;
+    }
+  for (; c != 4; c++)
+    {
+      int o = g = 1;
+      for (; g; g--)
+       {
+         while (d < b)
+           e--;
+         a = g;
+         int q = o;
+         if (q)
+           L1:
+               j = f;
+         if (l)
+           {
+             my_printf ("%d", g);
+             goto L1;
+           }
+         o = l;
+         k = q;
+       }
+    }
+}
+
+void s ()
+{
+  int m = 0;
+L2:
+  if (i && g)
+    goto L2;
+  for (; m < 2; m++)
+    p ();
+}
+
+int main ()
+{
+  s ();
+  return 0;
+}
index 1f00335885136f54c7151134b35cd95599275559..34c193b58f5348b2095ef9a417deec2ab35d3873 100644 (file)
@@ -485,16 +485,8 @@ vuse_ssa_val (tree x)
 
   do
     {
-      if (SSA_NAME_IS_DEFAULT_DEF (x))
-       return x;
-      vn_ssa_aux_t tem
-       = vn_ssa_aux_hash->find_with_hash (x, SSA_NAME_VERSION (x));
-      /* For region-based VN this makes walk_non_aliased_vuses stop walking
-        when we are about to look at a def outside of the region.  */
-      if (!tem || !tem->visited)
-       return NULL_TREE;
-      gcc_assert (tem->valnum != VN_TOP);
-      x = tem->valnum;
+      x = SSA_VAL (x);
+      gcc_assert (x != VN_TOP);
     }
   while (SSA_NAME_IN_FREE_LIST (x));