The C*$* assert permutation
assertion provides KAP
with sufficient information to allow KAP to generate optimized code
for certain types of indirect addressing (INTEGER arrays used in
subscripts). This assertion requires /optimize=4
or
higher. The following example shows when it is unsafe to optimize a
DO loop:
DO 100 I = 1,N A(IP (I)) = A(IP (I)) + B(I) 100 CONTINUE
KAP cannot safely generate optimized code because it cannot tell
if the different values in the index array IP
overlap.
If all values in I
are distinct, the optimized code
is correct; if some of the values are the same, the optimized code
may be unsafe. You can tell KAP that the values in the index array
IP
are all distinct with the following assertion:
C*$*ASSERT PERMUTATION( IP ) DO 100 I=1,N A(IP (I)) = A(IP (I)) + B(I) 100 CONTINUE
With the addition of this assertion, KAP knows that it can safely
generate optimized code for this loop. If at run time the values of
IP
are not distinct, the optimized code may generate
incorrect results.