diff mbox series

Fix PR82217

Message ID alpine.LSU.2.20.1709151118130.26836@zhemvz.fhfr.qr
State New
Headers show
Series Fix PR82217 | expand

Commit Message

Richard Biener Sept. 15, 2017, 9:18 a.m. UTC
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2017-09-15  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/82217
	* tree-ssa-sccvn.c (visit_phi): Properly handle all VN_TOP
	but not undefined case.

	* gcc.dg/torture/pr82217.c: New testcase.
diff mbox series

Patch

Index: gcc/tree-ssa-sccvn.c
===================================================================
--- gcc/tree-ssa-sccvn.c	(revision 252780)
+++ gcc/tree-ssa-sccvn.c	(working copy)
@@ -3901,13 +3901,10 @@  visit_phi (gimple *phi)
      if only a single edge is exectuable use its value.  */
   if (n_executable <= 1)
     result = seen_undef ? seen_undef : sameval;
-  /* If we saw only undefined values create a new undef SSA name to
-     avoid false equivalences.  */
+  /* If we saw only undefined values and VN_TOP use one of the
+     undefined values.  */
   else if (sameval == VN_TOP)
-    {
-      gcc_assert (seen_undef);
-      result = seen_undef;
-    }
+    result = seen_undef ? seen_undef : sameval;
   /* First see if it is equivalent to a phi node in this block.  We prefer
      this as it allows IV elimination - see PRs 66502 and 67167.  */
   else if ((result = vn_phi_lookup (phi)))
Index: gcc/testsuite/gcc.dg/torture/pr82217.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/pr82217.c	(nonexistent)
+++ gcc/testsuite/gcc.dg/torture/pr82217.c	(working copy)
@@ -0,0 +1,32 @@ 
+/* { dg-do compile } */
+
+int a, b, c;
+
+void fn1 ()
+{ 
+  while (1)
+    { 
+      if (c)
+	goto L2;
+      break;
+    }
+  if (c)
+    {
+L1:
+	{
+	  int g[1];
+	  if (b)
+	    goto L1;
+	  goto L1;
+L2:
+	  for (a = 0; a;)
+	    goto L1;
+	}
+    }
+}
+
+int main ()
+{ 
+  fn1 ();
+  return 0;
+}