Dependency checker fails to build distance vector for the following example:
int foo (char *a, unsigned n) { int i; a[0] = 0; for (i = 16; i < n; i++) a[i] = a[i-16]; } Compiled with gcc -O2 -ftree-vectorize -maltivec -fdump-tree-vect-details -S t.c >From the vectorizer dump: ... (overlap_iterations_b = not known ) ) (dependence classified: scev_not_known) ) ) ... However, it succeeds to calculate distance vector if number of iterations is known constant: int foo (char *a, unsigned n) { int i; a[0] = 0; for (i = 16; i < 128; i++) { a[i] = a[i-16]; } } >From dump of vectorizer: .... ) (build_classic_dist_vector dist_vector = ( 16 ) ) ) ) .... -- Victor -- Summary: missed optimization with dependency checker Product: gcc Version: 4.3.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: minor Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: victork at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33707