The next phase of the compiler transforms parallel constructs: array
assignments, statements/constructs, and
statements/constructs
into one internal representation which is similar to a
statement.
However, the internal representation only allows calls to pure functions
(functions without side effects). If there is a call to a transformational
intrinsic in the original construct, the transformation phase removes it during
conversion to the internal representation to prevent joining of all
processors within the parallel construct.
In Fortran 90D/HPF, we choose the forall statement as our intermediate language construct. Array assignment statements and where statements can be translated into equivalent forall statements with no loss of information. After transformation, subsequent phases of the compiler, such as optimization, process parallel constructs using only the internal representation. The Fortran 90D/HPF compiler generates the same intermediate and final code regardless of which constructs the programmer chooses.
Figure gives the algorithm for transforming the
array assignment statement and where statement into equivalent
forall statements.