When I see such contradictory messages about vectorization of a loop, typically it means that the compiler has created 2 versions with run-time selection, only one of which is optimized. The opt-report should indicate whether there is versioning. This is most annoying in the case of nested loops, where my only remedy is to check whether the optimized code is executed when running my actual case. In order to trace it (e.g. under VTune), it is preferable to compile without interprocedural analysis (-fno-inline-functions -no-ipo rather than -fast). I submitted an issue on premier.intel.com for a case where the 11.1 compiler vectorized without the multiple versioning problem, and the 12.x compilers can recover if the vectorizable code is written in CEAN (extended array notation). I've asked; it was not intentional that cases which optimized prior to introduction of CEAN now require the CEAN for satisfactory operation. -openmp disables many of the compiler's multi-level loop optimizations in the parallel region. You must write the loop nest optimizations yourself. As you have seen, if you do so, you may avoid the compiler doing undesirable things.