The compiler needs to be very conservative in determining if there is a dependency. In fact, the compiler cannot vectorize the code unless it can prove that there is no dependency. Unfortunately, there are many things that may lead to a dependency, but are difficult or impossible for the compiler to prove wrong. The possibility of two overlapping arrays that are given as function arguments are such an example.
If anything changes in your built process by switching from 32 to 64 bit, it might prevent the compiler from drawing its conclusion. This might not only be differences in source code, e.g. by ifdefs. Changes of the data or code size can also affect which parts of the code are inlined, unrolled, and so on.
If you are sure that there are no dependencies, you can take over the responsibility from the compiler and add
#pragma ivdep
to your code. The compiler should then vectorize the loop in both cases.
Kind regards
Thomas