aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-03-08 14:41:39 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-03-08 14:41:39 +0000
commit24545562ca5ece2615f8178ad6c6eb0be4fe6b3f (patch)
tree433242ce368d596cca18cadd75987dba9d2b4c25 /gcc
parent7fea20f6b8dc2cd598502145ce7ec93091b1bb44 (diff)
downloadgcc-24545562ca5ece2615f8178ad6c6eb0be4fe6b3f.zip
gcc-24545562ca5ece2615f8178ad6c6eb0be4fe6b3f.tar.gz
gcc-24545562ca5ece2615f8178ad6c6eb0be4fe6b3f.tar.bz2
re PR tree-optimization/84552 (Compile time hog w/ -O2 -floop-nest-optimize -fno-tree-copy-prop -fno-tree-fre -fno-tree-loop-ivcanon)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr84552.c23
-rw-r--r--gcc/tree-scalar-evolution.c6
4 files changed, 40 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bfff935..0d60c55 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3abed3c..5a5c31a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..15cbb08
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr84552.c
@@ -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;
+}
diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c
index 0ba1aa8..fefc9de 100644
--- a/gcc/tree-scalar-evolution.c
+++ b/gcc/tree-scalar-evolution.c
@@ -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))