re PR tree-optimization/84552 (Compile time hog w/ -O2 -floop-nest-optimize -fno...
authorRichard Biener <rguenther@suse.de>
Thu, 8 Mar 2018 14:41:39 +0000 (14:41 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 8 Mar 2018 14:41:39 +0000 (14:41 +0000)
2018-03-08  Richard Biener  <rguenther@suse.de>

PR middle-end/84552
* tree-scalar-evolution.c: Include tree-into-ssa.h.
(follow_copies_to_constant): Do not follow SSA names registered
for update.

* gcc.dg/graphite/pr84552.c: New testcase.

From-SVN: r258365

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/graphite/pr84552.c [new file with mode: 0644]
gcc/tree-scalar-evolution.c

index bfff935..0d60c55 100644 (file)
@@ -1,5 +1,12 @@
 2018-03-08  Richard Biener  <rguenther@suse.de>
 
+       PR middle-end/84552
+       * tree-scalar-evolution.c: Include tree-into-ssa.h.
+       (follow_copies_to_constant): Do not follow SSA names registered
+       for update.
+
+2018-03-08  Richard Biener  <rguenther@suse.de>
+
        PR tree-optimization/84178
        * tree-if-conv.c (combine_blocks): Move insert_gimplified_predicates
        to caller.
index 3abed3c..5a5c31a 100644 (file)
@@ -1,5 +1,10 @@
 2018-03-08  Richard Biener  <rguenther@suse.de>
 
+       PR middle-end/84552
+       * gcc.dg/graphite/pr84552.c: New testcase.
+
+2018-03-08  Richard Biener  <rguenther@suse.de>
+
        PR tree-optimization/84178
        * gcc.dg/torture/pr84178-2.c: New testcase.
 
diff --git a/gcc/testsuite/gcc.dg/graphite/pr84552.c b/gcc/testsuite/gcc.dg/graphite/pr84552.c
new file mode 100644 (file)
index 0000000..15cbb08
--- /dev/null
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-nest-optimize -fno-tree-copy-prop -fno-tree-fre -fno-tree-loop-ivcanon" } */
+
+int cx;
+
+int
+e6 (int pj, int xe)
+{
+  for (cx = 0; cx < 2; ++cx)
+    while (xe < 1)
+      {
+       for (cx = 0; cx < 2; ++cx)
+         pj *= 2;
+
+       if (cx != 0)
+         goto o3;
+
+       ++xe;
+      }
+
+o3:
+  return pj;
+}
index 0ba1aa8..fefc9de 100644 (file)
@@ -280,6 +280,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "params.h"
 #include "tree-ssa-propagate.h"
 #include "gimple-fold.h"
+#include "tree-into-ssa.h"
 
 static tree analyze_scalar_evolution_1 (struct loop *, tree);
 static tree analyze_scalar_evolution_for_address_of (struct loop *loop,
@@ -1540,7 +1541,10 @@ static tree
 follow_copies_to_constant (tree var)
 {
   tree res = var;
-  while (TREE_CODE (res) == SSA_NAME)
+  while (TREE_CODE (res) == SSA_NAME
+        /* We face not updated SSA form in multiple places and this walk
+           may end up in sibling loops so we have to guard it.  */
+        && !name_registered_for_update_p (res))
     {
       gimple *def = SSA_NAME_DEF_STMT (res);
       if (gphi *phi = dyn_cast <gphi *> (def))