Graphically, the `INDEPENDENT` directive can be visualized as eliminating
edges from a precedence graph representing the program.
Figure shows some of the dependences that may normally be
present in a `DO` and a `FORALL`. (Most of the transitive dependences are not
shown.)
An arrow from a left-hand side node (for example, ``lhsa(1)'') to a
right-hand side node (``rhsb(1)'') means that the right-hand side
computation might use values assigned in the left-hand side node; thus
the right-hand side must be computed after the left-hand side completes
its store. Similarly, an arrow from a right-hand side node to a
left-hand side node means that the left-hand side may overwrite a value
needed by the right-hand side computation, again forcing an ordering.
Edges from the ``BEGIN'' and to the ``END'' nodes represent control
dependences. The `INDEPENDENT` directive asserts that the only
dependences that a compiler need enforce are those in
Figure . That is, the programmer who uses `INDEPENDENT`
is certifying that if the compiler enforces only these edges, then the
resulting program will be equivalent to the one in which all the edges
are present. Note that the set of asserted dependences is identical
for `INDEPENDENT` `DO` and `FORALL` constructs.

Thu Dec 8 16:17:11 CST 1994