Product Version: Intel(R) Visual Fortran Compiler XE 15.0.0.070
Cause:
The vectorization report generated using Visual Fortran Compiler's optimization and vectorization report options (-Qvec-report2 -O2) includes non-vectorized loop instance when using the following compiler option (Win OS): -assume:dummy_aliases
Example:
An example below will generate the following remark in optimization report:
subroutine foo(a, b, n) implicit none real, intent(inout) :: a(n) real, intent(in) :: b(n) integer, intent(in) :: n integer :: i do i=1,n a(i) = b(i)+1 end do end subroutine foo
Report from: Vector & Auto-parallelization optimizations [vec, par]
LOOP BEGIN at f15304.f90(8,3)
<Multiversioned v2>
remark #15304: loop was not vectorized: non-vectorizable loop instance from multiversioning
LOOP END
Resolution:
Using compiler option -assume:nodummy_aliases ( in Linux OS and OS X: -assume nodummy_aliases) will improve performance and get this loop to vectorize, however care should be taken to ensure that programs compiled with -assume:nodummy _aliasesoutput correct results.
See also:
Requirements for Vectorizable Loops
Vectorization and Optimization Reports