Diagnostic 15524: Loop Was Not Vectorized: Search Loop Cannot Be Vectorized Unless All Memory References Can Be Aligned Vector Load.

ID 732966
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 ( /O2  /Qopt-report:2 Qopt-report-phase:vec ) states that loop was not vectorized since all memory references cannot be an aligned vector load.

Example:

An example below will generate the following remark in optimization report:

integer function foo(a, n) 

       implicit none
       integer, intent(in) :: n
       real, intent(inout) :: a(n) 
       integer :: i 
       
       do i=1,n   
         if (a(2*i) .eq. 0) goto 100 
       end do
       
100    CONTINUE 
       foo = i
       
end function foo

ifort -c /O2 /Qopt-report:2 /Qopt-report-phase:vec /Qopt-report-file:stdout f15524.f90

Report from: Vector optimizations [vec]

 LOOP BEGIN at f15524.f90(8,8)

   remark #15524: loop was not vectorized: search loop cannot be vectorized unless all memory references can be aligned vector load. 

LOOP END

Resolution:

 In search loop vectorization if a “vector load” fits entirely within a cache line, and if such a vector load has one non-speculatively accessed  element, it is safe for the compiler to speculatively load all other elements (within the same cache line) in such a vector load. 
Rewriting the code and avoiding GOTO statements 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