[autovect] [patch] vectorize in cases when number of iterations may be zero

Zdenek Dvorak rakdver@atrey.karlin.mff.cuni.cz
Thu Jun 15 18:09:00 GMT 2006


Hello,

> > have you tried this patch with some loop for that the number of
> > iterations is zero (because niter_desc.may_be_zero is true)?
> > I do not know how you handle this case in vectorizer, but just
> > ignoring the niter_desc.may_be_zero condition looks a bit suspicious.
> 
> We don't ignore niter_desc.may_be_zero when it can be proved to be true,
> we ignore it when it is an expression consisting from symbols.
> consider the following example:
> 
>       1 int a[1000];
>       2 int b[1000];
>       3
>       4 int
>       5 foo (int n, int m)
>       6 {
>       7   int i = 0;
>       8
>       9   if (n)
>      10     do {
>      11       a[i] = b[i];
>      12       i++;
>      13     } while (i < m);
>      14
>      15   return 1;
>      16 }
> 
> niter_desc.may_be_zero for this example will be < n != 0 >,
> thus both integer_nonzerop (niter_desc.may_be_zero) and
> integer_zerop (niter_desc.may_be_zero) will return false,
> and without this patch the return value of number_of_iterations_in_loop
> will be chrec_dont_know, hence loop will not be vectorized.

and what if n happed to be zero, will the produced code be correct then?

Zdenek



More information about the Gcc-patches mailing list