[EMAIL PROTECTED] wrote on 21/10/2005 03:19:57 PM:

> L.S.,
>
> This code:
>
>       SUBROUTINE S(A, B, N)
>       DIMENSION A(N), B(N)
>       READ*,Z,B
>       DO I = 1, N
>          A(I) = Z * B(I)
>       ENDDO
>       PRINT*,A
>       END
>
> when compiled thusly:
>
> $ gfortran -g -S -O3 -ftree-vectorize -ftree-vectorizer-verbose=2 -
> msse2 vect2.f
>
> draws the following "not vectorized" message:
>
> vect2.f:4: note: not vectorized: unhandled data-ref
> vect2.f:4: note: vectorized 0 loops in function.
>
> Hmmm, how about broadcasting Z to a vector register and using that in a
> vectorized version of this loop :-) ?
>

this is not a problem, the vectorizer knows how to handle
constants/invariants. The problem is that the access to Z in the loop
translates to a load, which accesses the same location in memory in each
iteration of the loop. The way to handle that is to effectively take the
invariant load out of the loop, if aliasing doesn't stop us (as Pinski
pointed out).

dorit

> Kind regards,
>
> --
> Toon Moene - e-mail: [EMAIL PROTECTED] - phone: +31 346 214290
> Saturnushof 14, 3738 XG  Maartensdijk, The Netherlands
> A maintainer of GNU Fortran 95: http://gcc.gnu.org/fortran/

Reply via email to