aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-08-29 14:13:20 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-08-29 14:13:20 +0000
commit8f70fdc31a7b0099e7322d0aba94830fb08f4c88 (patch)
treee7315f43889f8f5e6b56945e5dc103fb839d79b8
parent6214d5c7e7470bdd5ecbeae668c2522551bfebbc (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr87132.c18
-rw-r--r--gcc/tree-ssa-alias.c9
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;
}