On Oct 21, 2005, at 9:19 AM, Toon Moene wrote:

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:

The problem here is not really related to the vectorizer but the
tree aliasing code.  The loop looks like this at -O2 in the tree dumps:
  # z_49 = PHI <z_86(1), z_124(3)>;
  # i_1 = PHI <1(1), i_48(3)>;
<L8>:;
  D.982_41 = i_1 + -1;
  #   VUSE <z_49>;
  D.983_43 = (*b_20)[D.982_41];
  #   VUSE <z_49>;
  z.4_45 = z;
  D.985_46 = D.983_43 * z.4_45;
  #   z_124 = V_MAY_DEF <z_49>;
  (*a_36)[D.982_41] = D.985_46;
  i_48 = i_1 + 1;
  if (i_1 == D.972_25) goto <L4>; else goto <L13>;

Notice how the statement which does "A(I) =" has a V_MAY_DEF of z. If we recorded it correctly, A and B would aliasing nothing as they are arguments
passed in.

-- Pinski

Reply via email to