for (Enumeration enum = ir.cfg.nodes(); enum.hasMoreElements();) { OPT_BasicBlock block = (OPT_BasicBlock)enum.nextElement();
for (Enumeration bbEnum = ir.cfg.nodes(); bbEnum.hasMoreElements();) { OPT_BasicBlock block = (OPT_BasicBlock)bbEnum.nextElement();
  OPT_DominatorTree(OPT_IR ir, boolean forward) {    this.ir = ir;    this.forward = forward;    // The query methods of dominator information, such as    // getDominanceFrontier, dominates, and domFrontierEnumerator    // all use ir.getBasicBlock(int).  This method relies on     // the basic block map being up to date.  Here we ensure this    // property, even though it is needed for computing the dominator    // tree.    ir.resetBasicBlockMap();    // allocate the dominator vertex map    dominatorInfoMap =       new OPT_DominatorTreeNode[ir.getMaxBasicBlockNumber() + 1];    // allocate the tree and root node    // Step 1: add all basic blocks to the tree as nodes    for (Enumeration enum = ir.cfg.nodes(); enum.hasMoreElements();) {      OPT_BasicBlock block = (OPT_BasicBlock)enum.nextElement();      // We treat the exit node as not being part of the CFG      if (!forward || !block.isExit()) {        addNode(block);      }    }