diff options
author | Richard Biener <rguenther@suse.de> | 2018-08-29 14:13:20 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-08-29 14:13:20 +0000 |
commit | 8f70fdc31a7b0099e7322d0aba94830fb08f4c88 (patch) | |
tree | e7315f43889f8f5e6b56945e5dc103fb839d79b8 /gcc | |
parent | 6214d5c7e7470bdd5ecbeae668c2522551bfebbc (diff) | |
download | gcc-8f70fdc31a7b0099e7322d0aba94830fb08f4c88.zip gcc-8f70fdc31a7b0099e7322d0aba94830fb08f4c88.tar.gz gcc-8f70fdc31a7b0099e7322d0aba94830fb08f4c88.tar.bz2 |
re PR tree-optimization/87132 (Gcc miscompiles at -O2 on valid code)
2018-08-29 Richard Biener <rguenther@suse.de>
PR tree-optimization/87132
* tree-ssa-alias.c (get_continuation_for_phi): Do not translate
when skipping defs reachable over backedges.
* gcc.dg/torture/pr87132.c: New testcase.
From-SVN: r263959
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr87132.c | 18 | ||||
-rw-r--r-- | gcc/tree-ssa-alias.c | 9 |
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 02a7b94..91a06ed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2018-08-29 Richard Biener <rguenther@suse.de> + PR tree-optimization/87132 + * tree-ssa-alias.c (get_continuation_for_phi): Do not translate + when skipping defs reachable over backedges. + +2018-08-29 Richard Biener <rguenther@suse.de> + * tree-core.h: Document use of deprecated_flag in SSA_NAME. * tree.h (SSA_NAME_POINTS_TO_READONLY_MEMORY): Define. * tree-into-ssa.c (pass_build_ssa::execute): Initialize diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ebdfcf5..d785c90 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-08-29 Richard Biener <rguenther@suse.de> + + PR tree-optimization/87132 + * gcc.dg/torture/pr87132.c: New testcase. + 2018-08-29 David Malcolm <dmalcolm@redhat.com> PR c++/85110 diff --git a/gcc/testsuite/gcc.dg/torture/pr87132.c b/gcc/testsuite/gcc.dg/torture/pr87132.c new file mode 100644 index 0000000..48b8673 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr87132.c @@ -0,0 +1,18 @@ +/* { dg-do run } */ + +extern void abort (void); +int c, d; +int main() +{ + int e[] = {4, 4, 4, 4, 4, 4, 4, 4, 4}; + d = 8; + for (; d; d--) + for (int a = 0; a <= 8; a++) + { + c = e[1]; + e[d] = 0; + } + if (c != 0) + abort (); + return 0; +} diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index 6efe4c3..032e79b 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -2740,7 +2740,14 @@ next:; if (arg1 == arg0) ; else if (! maybe_skip_until (phi, arg0, ref, arg1, cnt, visited, - abort_on_visited, translate, data)) + abort_on_visited, + /* Do not translate when walking over + backedges. */ + dominated_by_p + (CDI_DOMINATORS, + gimple_bb (SSA_NAME_DEF_STMT (arg1)), + phi_bb) + ? NULL : translate, data)) return NULL_TREE; } |