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
This commit is contained in:
parent
78e54994ff
commit
8b41b1b24f
gcc
@ -1,3 +1,10 @@
|
||||
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
|
||||
|
26
gcc/testsuite/gcc.dg/tree-ssa/20041110-1.c
Normal file
26
gcc/testsuite/gcc.dg/tree-ssa/20041110-1.c
Normal file
@ -0,0 +1,26 @@
|
||||
/* { 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
|
||||
|
Loading…
x
Reference in New Issue
Block a user