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 C
2977 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