GraphEdgeEnumeration e = BBenum[bb.getNumber()];
OPT_SpaceEffGraphNode.GraphEdgeEnumeration e = BBenum[bb.getNumber()];
  private void findBackEdges(OPT_BasicBlock bb, int numBlocks) {    OPT_Stack stack = new OPT_Stack();    GraphEdgeEnumeration[] BBenum = new GraphEdgeEnumeration[numBlocks];    // push node on to the emulated activation stack    stack.push(bb);  recurse:    while (!stack.empty()) {      bb = (OPT_BasicBlock) stack.peek();      // check if we were already processing this node, if so we would have      // saved the state of the enumeration in the loop below      GraphEdgeEnumeration e = BBenum[bb.getNumber()];      if (e == null) {	if (DEBUG) { System.out.println(" Initial processing of " + bb);  }	bb.setDfsVisited();	e = bb.outEdges();      } else {	if (DEBUG) { System.out.println(" Resuming processing of " + bb); }      }      while (e.hasMoreElements()) {	OPT_SpaceEffGraphEdge outEdge = e.next();	OPT_BasicBlock outbb = (OPT_BasicBlock)outEdge.toNode();	if (OPT_LTDominatorInfo.isDominatedBy(bb, outbb)) {   // backedge	  outbb.setLoopHeader();	  outEdge.setBackEdge();	  if (DEBUG) {	    System.out.println("backedge from " + bb.scratch + " ( " + bb			       + " ) " + outbb.scratch + " ( " 			       + outbb + " ) ");	  }	} else if (!outbb.dfsVisited()) {	  // irreducible loop test	  if (outbb.scratch < bb.scratch)	    throw new OPT_OptimizingCompilerException("irreducible loop found!");	  // simulate a recursive call	  // but first save the enumeration state for resumption later	  BBenum[bb.getNumber()] = e;	  stack.push(outbb);	  continue recurse;	}      } // enum      // "Pop" from the emulated activiation stack      if (DEBUG) { System.out.println(" Popping");   }      stack.pop();    } // while !empty  }