Following patch allows us to emit extra run-time pointer checks and gives us extra opportunity to vectorize if one pointer is an invariant in a loop and another one can be deduced to an affine expression. With this change applied we could now vectorize following example:

struct Arrays {

double X[128]; double Y[128]; double Z[128]; double D;

} s1;

int n;

...

for ( int k=0 ; k<n ; k++ ) s1.X[k] = s1.D+ s1.Y[k] * s1.Z[k];

...