This is an old thread and we are still running into similar issues: Code is not being vectorized on 64-bit target due to scev not being able to optimally analyze overflow condition. While the original test case shown here seems to work now, it does not work if the start value is not a constant and the loop index variable is of unsigned type: Ex void loop2( double const * __restrict__ x_in, double * __restrict__ x_out, double const * __restrict__ c, unsigned int N, unsigned int start) { for(unsigned int i=start; i!=N; ++i) x_out[i] = c[i]*x_in[i]; } Here is our unit test: int foo(int* A, int* B, unsigned start, unsigned B) { int s; for (unsigned k = start; k