The SWP and NOSWP directives indicate preference for a loop to get software-pipelined or not. The SWP directive does not help data dependence, but overrides heuristics based on profile counts or lop-sided control flow.
The software pipelining optimization triggered by the SWP directive applies instruction scheduling to certain innermost loops, allowing instructions within a loop to be split into different stages, allowing increased instruction level parallelism. This can reduce the impact of long-latency operations, resulting in faster loop execution. Loops chosen for software pipelining are always innermost loops that do not contain procedure calls that are not inlined. Because the optimizer no longer considers fully unrolled loops as innermost loops, fully unrolling loops can allow an additional loop to become the innermost loop (see -unroll[n]]). You can request and view the optimization report to see whether software pipelining was applied (see Optimizer Report Generation).
do i = 1, m
if (a(i) .eq. 0) then
b(i) = a(i) + 1
b(i) = a(i)/c(i)
For more details on these directives, see "Directive Enhanced Compilation", section "General Directives", in the Intel® Fortran Language Reference.