Diagnostic 15523: Loop Was Not Vectorized: Cannot Compute Loop Iteration Count Before Executing The Loop.

ID 732965
Updated 10/29/2014
Version Latest
Public

author-image

By

Product Version: Intel® Visual Fortran Compiler XE 15.0 or a later version 

Cause:

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.

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)
       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)

  LOOP BEGIN  
      remark #15523: loop was not vectorized: loop control variable I was found, but loop iteration count cannot be computed before executing the loop.
 
  LOOP END

Resolution:

 -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. 

See also:

Requirements for Vectorizable Loops

Vectorization Essentials

Vectorization and Optimization Reports

Back to the list of vectorization diagnostics for Intel® Fortran