diff options
author | Richard Biener <rguenther@suse.de> | 2018-10-23 09:36:13 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-10-23 09:36:13 +0000 |
commit | b1a5c719518cffabfcd81a87518d0c82ee40a3da (patch) | |
tree | 20e26e91eaaa5c60a02ad4902f94e936207c7991 /gcc | |
parent | 20e363e4927ac76d314bd511bc726eb71d65d70f (diff) | |
download | gcc-b1a5c719518cffabfcd81a87518d0c82ee40a3da.zip gcc-b1a5c719518cffabfcd81a87518d0c82ee40a3da.tar.gz gcc-b1a5c719518cffabfcd81a87518d0c82ee40a3da.tar.bz2 |
re PR tree-optimization/87700 (Compile time hog w/ -O1)
2018-10-23 Richard Biener <rguenther@suse.de>
PR tree-optimization/87700
* tree-ssa-copy.c (set_copy_of_val): Fix change detection logic.
* gcc.dg/torture/pr87700.c: New testcase.
From-SVN: r265418
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr87700.c | 49 | ||||
-rw-r--r-- | gcc/tree-ssa-copy.c | 2 |
4 files changed, 60 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b334845..f382b20 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-10-23 Richard Biener <rguenther@suse.de> + + PR tree-optimization/87700 + * tree-ssa-copy.c (set_copy_of_val): Fix change detection logic. + 2018-10-23 Jakub Jelinek <jakub@redhat.com> PR target/87674 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 204e41c..9ca3488 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2018-10-23 Richard Biener <rguenther@suse.de> + PR tree-optimization/87700 + * gcc.dg/torture/pr87700.c: New testcase. + +2018-10-23 Richard Biener <rguenther@suse.de> + PR tree-optimization/87693 * gcc.dg/torture/pr87693.c: New testcase. diff --git a/gcc/testsuite/gcc.dg/torture/pr87700.c b/gcc/testsuite/gcc.dg/torture/pr87700.c new file mode 100644 index 0000000..3aee9a5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr87700.c @@ -0,0 +1,49 @@ +/* { dg-do compile } */ + +void +wn (int ki) +{ + int m8 = 0; + int *d6 = &ki; + + if (ki == 0) + { +ud: + for (ki = 0; ki < 1; ++ki) + for (m8 = 0; m8 < 1; ++m8) + goto ud; + + d6 = &m8; + +y8: + ++m8; + +xw: + if (ki == 0) + { + } + else + { + for (m8 = 0; m8 < 1; ++m8) + { +gt: + if (*d6 == 0) + goto y8; + } + + for (m8 = 0; m8 < 1; ++m8) + { + goto gt; + +ym: + ; + } + } + + d6 = &ki; + + goto ym; + } + + goto xw; +} diff --git a/gcc/tree-ssa-copy.c b/gcc/tree-ssa-copy.c index 0c667da..b526758 100644 --- a/gcc/tree-ssa-copy.c +++ b/gcc/tree-ssa-copy.c @@ -155,7 +155,7 @@ set_copy_of_val (tree var, tree val) copy_of[ver].value = val; if (old != val - || (val && !operand_equal_p (old, val, 0))) + && (!old || !operand_equal_p (old, val, 0))) return true; return false; |