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
This commit is contained in:
Richard Biener 2016-09-19 06:55:17 +00:00 committed by Richard Biener
parent ed4fd95729
commit ae5276392f
4 changed files with 29 additions and 3 deletions

View File

@ -1,3 +1,9 @@
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

View File

@ -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

View File

@ -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;
}

View File

@ -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 ();