This LOD is unusual in that is caused by a dependence carried by a scalar variable. Normally scalar dependences do not cause Read-After-Write hazards, as the scalar variables can typically held in registers. In this case, however, variable j is a parameter to a call to subroutine RESERVE at line 2968. In the absence of detailed inter-procedural information, this call acts as a use of j, thus preventing the elimination of the previous store to j at line 2962.
The table search loop at lines 2979 thru 2981 is actually compiled to execute entirely on the Control Unit! The compiler realises that the loop contains a loss of decoupling on each iteration and therefore does not attempt to generate decoupled code.
2959 C FOR EACH COLUMN ELEMENT LOOK UP ROW NXTI 2960 C 2961 130 if (locc .eq. 0) 2961 goto 170 2962 j = nodplc(jcolno+locc) 2963 C 2964 C CHECK FOR FILL-IN (I,J) 2965 C 2966 if (ipiv .le. 0) 2966 goto 135 2967 call sizmem(jcpt, isize1) 2968 call reserv(i, j) 2969 call sizmem(jcpt, isize2) 2970 if (isize1 .eq. isize2) 2970 goto 135 2971 call extmem(lvn, 1) 2972 nttbr = nttbr+1 2973 value(lvn+nstop+nttbr) = 0.0d0 2974 C 2975 C LOCATE ELEMENT (I,J) 2976 C2977 135 if (j .lt. i) 2977 goto 145 2978 locij = locc 2979 140 locij = nodplc(irpt+locij) 2980 if (nodplc(irowno+locij) .eq. i) 2980 goto 155 2981 goto 140 2982 145 locij = locr 2983 150 locij = nodplc(jcpt+locij) 2984 if (nodplc(jcolno+locij) .eq. j) 2984 goto 155 2985 goto 150 2986 155 value(lvn+locij) = value(lvn+locij)-value(lvn+locc)*value(lvn+locr) 2988 160 locc = nodplc(jcpt+locc) 2989 goto 130