diff options
author | Richard Biener <rguenther@suse.de> | 2018-09-03 17:41:05 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-09-03 17:41:05 +0000 |
commit | a5e8b0607431fdefa0dba2bcf477a1695ac5d227 (patch) | |
tree | 2b777ff2b25afd681d5c2ffce8b038862e57a893 /gcc | |
parent | 64979e04afabef10adfce819b9955dd8ae6c2fbe (diff) | |
download | gcc-a5e8b0607431fdefa0dba2bcf477a1695ac5d227.zip gcc-a5e8b0607431fdefa0dba2bcf477a1695ac5d227.tar.gz gcc-a5e8b0607431fdefa0dba2bcf477a1695ac5d227.tar.bz2 |
re PR tree-optimization/87177 (wrong code at -O2 and -O3 on x86-64-linux-gnu)
2018-09-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/87177
* tree-ssa-sccvn.c (vuse_ssa_val): Revert previous change, keep
cleanup.
* gcc.dg/torture/pr87177.c: New testcase.
* gcc.dg/torture/pr87177-2.c: Likewise.
From-SVN: r264069
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr87177-2.c | 28 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr87177.c | 61 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 12 |
5 files changed, 103 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e6791fd..62e32c6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-09-03 Richard Biener <rguenther@suse.de> + + PR tree-optimization/87177 + * tree-ssa-sccvn.c (vuse_ssa_val): Revert previous change, keep + cleanup. + 2018-09-03 Alexander Monakov <amonakov@ispras.ru> * bb-reorder.c (edge_order): Convert to C-qsort-style diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b44c714..9828b4b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,11 @@ 2018-09-03 Richard Biener <rguenther@suse.de> + PR tree-optimization/87177 + * gcc.dg/torture/pr87177.c: New testcase. + * gcc.dg/torture/pr87177-2.c: Likewise. + +2018-09-03 Richard Biener <rguenther@suse.de> + PR tree-optimization/87200 * gcc.dg/torture/pr87200.c: New testcase. diff --git a/gcc/testsuite/gcc.dg/torture/pr87177-2.c b/gcc/testsuite/gcc.dg/torture/pr87177-2.c new file mode 100644 index 0000000..5592076 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr87177-2.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-w" } */ + +int dk; + +void +lv (void) +{ + int nm; + + dk = 1; + while (dk != 0) + { + } + + if (1 / 0) + { + dk = 0; + while (dk != 0) + { + } + } + + for (;;) + nm = !!dk; + + (void) nm; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr87177.c b/gcc/testsuite/gcc.dg/torture/pr87177.c new file mode 100644 index 0000000..efeaebf --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr87177.c @@ -0,0 +1,61 @@ +/* { dg-do run } */ + +int __attribute__((noinline)) my_printf (const char *p, ...) +{ + static volatile int x; + ++x; +} + +int a, b, c, e, f, g, h, i, j, k, l; +unsigned d; + +static void p () +{ + while (1) + { + int n = h; + h = 8; + if (!e) + break; + h = n; + while (1) + ; + } + for (; c != 4; c++) + { + int o = g = 1; + for (; g; g--) + { + while (d < b) + e--; + a = g; + int q = o; + if (q) + L1: + j = f; + if (l) + { + my_printf ("%d", g); + goto L1; + } + o = l; + k = q; + } + } +} + +void s () +{ + int m = 0; +L2: + if (i && g) + goto L2; + for (; m < 2; m++) + p (); +} + +int main () +{ + s (); + return 0; +} diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 1f00335..34c193b 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -485,16 +485,8 @@ vuse_ssa_val (tree x) do { - if (SSA_NAME_IS_DEFAULT_DEF (x)) - return x; - vn_ssa_aux_t tem - = vn_ssa_aux_hash->find_with_hash (x, SSA_NAME_VERSION (x)); - /* For region-based VN this makes walk_non_aliased_vuses stop walking - when we are about to look at a def outside of the region. */ - if (!tem || !tem->visited) - return NULL_TREE; - gcc_assert (tem->valnum != VN_TOP); - x = tem->valnum; + x = SSA_VAL (x); + gcc_assert (x != VN_TOP); } while (SSA_NAME_IN_FREE_LIST (x)); |