HP Fortran Programmer's Guide (September 2007)

Compiling and linking
Compiling with the f90 command
Chapter 226
C$DIR IVDEP
Rules and behavior:
The IVDEP directive is an assertion to the compiler’s 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);