diff options
author | Richard Biener <rguenther@suse.de> | 2016-10-06 08:54:37 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-10-06 08:54:37 +0000 |
commit | 37f6a157f592dcd13f61f693b40257621ac83226 (patch) | |
tree | 4b2f3ec013d897f01da756a41ee3d4c10946b109 | |
parent | 2d5edbede6495f09b26123d8b71f217ea480c496 (diff) | |
download | gcc-37f6a157f592dcd13f61f693b40257621ac83226.zip gcc-37f6a157f592dcd13f61f693b40257621ac83226.tar.gz gcc-37f6a157f592dcd13f61f693b40257621ac83226.tar.bz2 |
re PR tree-optimization/77839 (Memory- and compile time hog at -O1 and above)
2016-10-06 Richard Biener <rguenther@suse.de>
PR tree-optimization/77839
* tree-ssa-sccvn.c (set_ssa_val_to): Forbid value -> constant value
lattice transition.
* gcc.dg/torture/pr77839.c: New testcase.
From-SVN: r240829
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr77839.c | 29 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 17 |
4 files changed, 57 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aa41f37..b7e7a6d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-10-06 Richard Biener <rguenther@suse.de> + + PR tree-optimization/77839 + * tree-ssa-sccvn.c (set_ssa_val_to): Forbid value -> constant value + lattice transition. + 2016-10-06 Martin Liska <mliska@suse.cz> * gcc.c: Set -fprofile-update=atomic when profiling is diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1f55a336..0f24a75 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-10-06 Richard Biener <rguenther@suse.de> + + PR tree-optimization/77839 + * gcc.dg/torture/pr77839.c: New testcase. + 2016-10-06 Marek Polacek <polacek@redhat.com> * g++.dg/cpp1z/init-statement9.C: New test. diff --git a/gcc/testsuite/gcc.dg/torture/pr77839.c b/gcc/testsuite/gcc.dg/torture/pr77839.c new file mode 100644 index 0000000..b98231b --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr77839.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ + +void +sd(int yn) +{ + while (yn < 1) + { + int hy; + int *n6 = &hy; + int **ot = &n6; + + (void)ot; + for (yn = 0; yn < 1; ++yn) + { + int tc, wo = 0, ez = 0, b8 = 0; + int *ls = &wo; + + (void)ls; + hy = 0; + for (tc = 0; tc < 1; ++tc) + { + ez ^= hy; + wo ^= ez; + ++b8; + } + hy += (b8 < wo); + } + } +} diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 1653d73..fc8bf74 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -3260,6 +3260,23 @@ set_ssa_val_to (tree from, tree to) } return false; } + else if (currval != VN_TOP + && ! is_gimple_min_invariant (currval) + && is_gimple_min_invariant (to)) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Forcing VARYING instead of changing " + "value number of "); + print_generic_expr (dump_file, from, 0); + fprintf (dump_file, " from "); + print_generic_expr (dump_file, currval, 0); + fprintf (dump_file, " (non-constant) to "); + print_generic_expr (dump_file, to, 0); + fprintf (dump_file, " (constant)\n"); + } + to = from; + } else if (TREE_CODE (to) == SSA_NAME && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (to)) to = from; |