Commit 8b41b1b2 by Daniel Berlin Committed by Daniel Berlin

tree-data-ref.c (build_classic_dist_vector): If either loop is outside of the…

tree-data-ref.c (build_classic_dist_vector): If either loop is outside of the nest we asked about, the dependence can't matter.

2004-11-10  Daniel Berlin  <dberlin@dberlin.org>

	* tree-data-ref.c (build_classic_dist_vector): If either loop
	is outside of the nest we asked about, the dependence can't
	matter.
	(build_classic_dir_vector): Ditto.

From-SVN: r90454
parent 78e54994
2004-11-10 Daniel Berlin <dberlin@dberlin.org>
* tree-data-ref.c (build_classic_dist_vector): If either loop
is outside of the nest we asked about, the dependence can't
matter.
(build_classic_dir_vector): Ditto.
2004-11-10 Zdenek Dvorak <dvorakz@suse.cz>
* tree-ssa-loop-ivopts.c (get_address_cost): Add address elements in
......
/* { dg-do compile } */
/* { dg-options "-O2 -ftree-loop-linear" } */
/* This testcase was causing an ICE in building distance vectors because
we weren't ignoring the fact that one of the induction variables
involved in the dependence was outside of the loop. */
extern int foo (int, int);
int
main (void)
{
int a[50];
int b[50];
int i, j, k;
for (i = 4; i < 30; i++)
{
for (j = 3; j < 40; j++)
{
for (k = 9; k < 50; k++)
{
b[j] = a[i];
a[k] = b[i];
}
}
}
foo (a[i], b[i]);
}
......@@ -1816,12 +1816,12 @@ build_classic_dist_vector (struct data_dependence_relation *ddr,
struct loop *loop_b = current_loops->parray[loop_nb_b];
struct loop *loop_first = current_loops->parray[first_loop];
/* If the loops for both variables are at a lower depth than
the first_loop's depth, then they can't possibly have a
/* If the loop for either variable is at a lower depth than
the first_loop's depth, then we can't possibly have a
dependency at this level of the loop. */
if (loop_a->depth < loop_first->depth
&& loop_b->depth < loop_first->depth)
|| loop_b->depth < loop_first->depth)
return false;
if (loop_nb_a != loop_nb_b
......@@ -1992,11 +1992,12 @@ build_classic_dir_vector (struct data_dependence_relation *ddr,
struct loop *loop_b = current_loops->parray[loop_nb_b];
struct loop *loop_first = current_loops->parray[first_loop];
/* If the loops for both variables are at a lower depth than
the first_loop's depth, then they can't possibly matter */
/* If the loop for either variable is at a lower depth than
the first_loop's depth, then we can't possibly have a
dependency at this level of the loop. */
if (loop_a->depth < loop_first->depth
&& loop_b->depth < loop_first->depth)
|| loop_b->depth < loop_first->depth)
return false;
if (loop_nb_a != loop_nb_b
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment