target.clearScratchFlag();
  private void processEdge(OPT_LSTNode n,                            OPT_BasicBlock source,                            OPT_BasicBlock target,                            float prob,                            float weight) {    if (target.getScratchFlag()) return; // ignore backedge    if (n.loop.get(target.getNumber())) {      OPT_LSTNode other = lst.getLoop(target);      if (other == n) {        target.augmentExecutionFrequency(prob * weight);      } else {        // header of nested loop; pass prob and weight through to targets of loop exits        // Algorithm: find the total loopExitWeight, then distribute prob and weight        //            in ratio to the exit weight for each exit.        //            Effectively we are treating the nested loop as an n-way branch to its loop exits.        float exitWeight = computeLoopExitWeight(other);        for (Iterator i = other.loopExits.iterator(); i.hasNext();) {          OPT_LSTNode.Edge exit = (OPT_LSTNode.Edge)i.next();          float myWeight = exit.source.getExecutionFrequency() * exit.probability;          float myFraction = myWeight/exitWeight;          processEdge(n, source, exit.target, prob * myFraction, weight);        }      }    } else {      n.addLoopExit(source, target, prob);    }  }