HP Fortran Programmer's Guide (B3908-90031; September 2011)

Compiling and linking
Compiling with the f90 command
Chapter 228
C$DIR IVDEP
Rules and behavior:
The IVDEP directive is an assertion to the compilers optimizer about the order of
memory references inside a DO loop.
The IVDEP directive tells the compiler to begin dependence analysis by assuming all
dependences occur in the same forward direction as their appearance in the normal
scalar execution order. This contrasts with normal compiler behavior, which is for the
dependence analysis to make no initial assumptions about the direction of a dependence.
The IVDEP directive must precede the DO statement for each DO loop it affects. No
source code lines, other than the following.
The IVDEP directive is applied to a DO loop in which the user knows that dependences
are in lexical order. For example, if two memory references in the loop touch the same
memory location and one of them modifies the memory location, then the first reference
to touch the location has to be the one that appears earlier lexically in the program
source code. This assumes that the right-hand side of an assignment statement is earlier
than the left-hand side.
The IVDEP directive informs the compiler that the program would behave correctly if
the statements were executed in certain orders other than the sequential execution order,
such as executing the first statement or block to completion of all iterations, then the
next statement or block for all iterations, and so forth. The optimizer can use this
information, along with whatever else it can prove about the dependences, to choose
other execution orders.
EXAMPLE:
In the following example, the IVDEP directive provides more information about the
dependences within the loop, which may enable loop transformations to occur:
C$DIR IVDEP
DO I+1, N
A(INDARR(I)) = A(INDARR(I)) + B(I)
END DO
In this case, the scalar execution order follows:
1. Retrieve INDARR(I);
2. Use the result from Step 1 to retrieve A(INDARR(I));
3. Retrieve B(I);
4. Add the results from Steps 2 and 3 ;