Product Version: Intel(R) Visual Fortran Compiler XE 15.0 or a later version
The vectorization report generated when using Visual Fortran Compiler's optimization options ( /O3 /Qopt-report:2 /Qopt-report-phase:vec ) states that loop was not vectorized since loop iteration count cannot be computed before the loop is executed.
An example below will generate the following remark in optimization report:
subroutine foo(a, n) implicit none integer, intent(in) :: n double precision, intent(inout) :: a(n) integer :: bar integer :: i i=0 100 CONTINUE a(i)=0 i=i+1 if (i .lt. bar()) goto 100 end subroutine foo
ifort -c /O3 /Qopt-report:2 /Qopt-report-phase:vec /Qopt-report-file:stdout f15523.f90
Begin optimization report for: FOO
Report from: Vector optimizations [vec]
LOOP BEGIN at f15523.f90(9,8)
remark #15523: loop was not vectorized: loop control variable I was found, but loop iteration count cannot be computed before executing the loop.
-goto statements prevent vectorization. Rewriting the code using 'do - end do'' loops where iteration count is computed before execution of the loop will get this loop vectorized.