diff options
author | Richard Biener <rguenther@suse.de> | 2016-09-19 06:55:17 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-09-19 06:55:17 +0000 |
commit | ae5276392fb59dbdec56dd8cc6cc8253d9334c8b (patch) | |
tree | 92c04dc20ae233a40fcee15fb98698f932e77acc /gcc | |
parent | ed4fd957296b0633d21996a9c4cd5a5f3a2ee2ba (diff) | |
download | gcc-ae5276392fb59dbdec56dd8cc6cc8253d9334c8b.zip gcc-ae5276392fb59dbdec56dd8cc6cc8253d9334c8b.tar.gz gcc-ae5276392fb59dbdec56dd8cc6cc8253d9334c8b.tar.bz2 |
re PR tree-optimization/77605 (wrong code at -O3 on x86_64-linux-gnu)
2016-09-19 Richard Biener <rguenther@suse.de>
PR middle-end/77605
* tree-data-ref.c (analyze_subscript_affine_affine): Use the
proper niter to bound the loops.
* gcc.dg/torture/pr77605.c: New testcase.
From-SVN: r240227
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/pr77605.c | 15 | ||||
-rw-r--r-- | gcc/tree-data-ref.c | 6 |
4 files changed, 29 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e48f844..e29c212 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2016-09-19 Richard Biener <rguenther@suse.de> + PR middle-end/77605 + * tree-data-ref.c (analyze_subscript_affine_affine): Use the + proper niter to bound the loops. + +2016-09-19 Richard Biener <rguenther@suse.de> + PR tree-optimization/77514 * tree-ssa-pre.c (create_expression_by_pieces): Optimize search for folded stmt. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5ea3ac5..1077e17 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-09-19 Richard Biener <rguenther@suse.de> + + PR middle-end/77605 + * gcc.dg/torture/pr77605.c: New testcase. + 2016-09-18 Louis Krupp <louis.krupp@zoho.com> * gfortran.dg/pr68078.f90: XFAIL run on Darwin diff --git a/gcc/testsuite/gcc.dg/torture/pr77605.c b/gcc/testsuite/gcc.dg/torture/pr77605.c new file mode 100644 index 0000000..3f1a26b --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr77605.c @@ -0,0 +1,15 @@ +/* { dg-do run } */ + +int a, b, c[2][8]; + +int main () +{ + for (a = 0; a < 8; a++) + for (b = 0; b < 2; b++) + c[b][a] = c[b][b + 6] ^ 1; + + if (c[0][7] != 0) + __builtin_abort (); + + return 0; +} diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index 58da248..8152da3 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -2686,13 +2686,13 @@ analyze_subscript_affine_affine (tree chrec_a, if (niter > 0) { - HOST_WIDE_INT tau2 = MIN (FLOOR_DIV (niter - i0, i1), - FLOOR_DIV (niter - j0, j1)); + HOST_WIDE_INT tau2 = MIN (FLOOR_DIV (niter_a - i0, i1), + FLOOR_DIV (niter_b - j0, j1)); HOST_WIDE_INT last_conflict = tau2 - (x1 - i0)/i1; /* If the overlap occurs outside of the bounds of the loop, there is no dependence. */ - if (x1 >= niter || y1 >= niter) + if (x1 >= niter_a || y1 >= niter_b) { *overlaps_a = conflict_fn_no_dependence (); *overlaps_b = conflict_fn_no_dependence (); |