re PR tree-optimization/82320 (Compile time hog w/ -O)
authorRichard Biener <rguenther@suse.de>
Tue, 26 Sep 2017 07:29:51 +0000 (07:29 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 26 Sep 2017 07:29:51 +0000 (07:29 +0000)
2017-09-26  Richard Biener  <rguenther@suse.de>

PR tree-optimization/82320
* tree-ssa-sccvn.c (set_ssa_val_to): Changing undef to undef
isn't a change.

* gcc.dg/torture/pr82320.c: New testcase.

From-SVN: r253188

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

index 962689bd241c34bace767ade46627f61ba1305a4..7c6d7dce293f2650a58075750e412de9363db07c 100644 (file)
@@ -1,3 +1,9 @@
+2017-09-26  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/82320
+       * tree-ssa-sccvn.c (set_ssa_val_to): Changing undef to undef
+       isn't a change.
+
 2017-09-25  Jeff Law  <law@redhat.com>
 
        * config/rs6000/rs6000-protos.h (output_probe_stack_range): Update
index 8c537ad5d6211727fed8b99fc986bf66131b0484..64017065637057c4f8f41b4838bd8558d10c6d91 100644 (file)
@@ -1,3 +1,8 @@
+2017-09-26  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/82320
+       * gcc.dg/torture/pr82320.c: New testcase.
+
 2017-09-26  Christophe Lyon  <christophe.lyon@linaro.org>
 
        * lib/target-supports.exp (check_effective_target_vect_hw_misalign):
diff --git a/gcc/testsuite/gcc.dg/torture/pr82320.c b/gcc/testsuite/gcc.dg/torture/pr82320.c
new file mode 100644 (file)
index 0000000..a4943fc
--- /dev/null
@@ -0,0 +1,39 @@
+/* { dg-do compile } */
+
+void
+ec (int n4, short int ea)
+{
+  if (1)
+    {
+      if (ea != 0)
+       {
+         int *c1 = (int *)&ea;
+
+nn:
+         for (;;)
+           ++*c1;
+       }
+    }
+  else
+    {
+      int *lq = &n4;
+      int *md;
+      int da;
+
+      goto nn;
+
+r1:
+      md = lq;
+      for (da = 0; da < 1; ++da)
+       {
+ig:
+         ++n4;
+         *md += n4;
+       }
+    }
+
+  for (ea = 0; ea < 1; ++ea)
+    goto r1;
+
+  goto ig;
+}
index ca78e2d97cf6bcaf027fbf6180d7a8ca5b48cd8d..59397495abf6b7d0b890af4daf11ba1fe58e37bd 100644 (file)
@@ -3355,6 +3355,12 @@ set_ssa_val_to (tree from, tree to)
 
   if (currval != to
       && !operand_equal_p (currval, to, 0)
+      /* Different undefined SSA names are not actually different.  See
+         PR82320 for a testcase were we'd otherwise not terminate iteration.  */
+      && !(TREE_CODE (currval) == SSA_NAME
+          && TREE_CODE (to) == SSA_NAME
+          && ssa_undefined_value_p (currval, false)
+          && ssa_undefined_value_p (to, false))
       /* ???  For addresses involving volatile objects or types operand_equal_p
          does not reliably detect ADDR_EXPRs as equal.  We know we are only
         getting invariant gimple addresses here, so can use