Product Version: Intel(R) Visual Fortran Compiler XE 15.0.0.070
Cause:
The vectorization report generated when using Visual Fortran Compiler's optimization options ( -O3 -Qopt-report:2 ) states that loop was not vectorized since loop control flow is too complex.
Example:
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,n) integer :: bar integer :: i integer :: j 200 CONTINUE i=0 100 CONTINUE a(i,j)= 0 i=i+1 if (i .lt. bar()) goto 100 j=j+1 goto 200 end subroutine foo
Report from: Loop nest, Vector & Auto-parallelization optimizations [loop, vec, par]
LOOP BEGIN
remark #15522: loop was not vectorized: loop control flow is too complex. Simplify control flow.
LOOP END
Resolution:
-goto statements prevent vectorization, rewriting the code to simplify flow control will get this loop vectorized.
See also:
Requirements for Vectorizable Loops
Vectorization and Optimization Reports