Product Version: Intel® Fortran Compiler 15.0 and a later version
Cause:
When the loop contains an assignment to a derived data type which is not directly vectorizable. The vectorization report generated using Intel® Fortran Compiler's optimization and vectorization report options includes non-vectorized loop instance:
Windows* OS: /O2 /Qopt-report:2 /Qopt-report-phase:vec
Linux OS or OS X: -O2 -qopt-report2 -qopt-report-phase=vec
Example:
An example below will generate the following remark in optimization report:
module my_mod
integer, parameter :: N=1000
type :: my_type
integer :: c1
real(8) :: c2
end type my_type
type(my_type), dimension(N) :: my_inst
end module my_mod
subroutine f15310(init_data)
use my_mod
implicit none
integer :: i
type(my_type), intent(in) :: init_data
do i=1,N
my_inst(i) = init_data
enddo
end subroutine f15310
ifort -c /O2 /Qopt-report:2 /Qopt-report-phase:vec /Qopt-report-file:stdout f15310.f90
Begin optimization report for: F15310
Report from: Vector optimizations [vec].
LOOP BEGIN at f15310.f90(16,4)
remark #15310: loop was not vectorized: operation cannot be vectorized
LOOP END
Resolution:
The loop may be vectorized if an assignment operator is defined for the derived type.
See also:
Requirements for Vectorizable Loops
Vectorization and Optimization Reports