loop_over_header_in_edges:
  private void processHeader() throws NonRegularLoopException {    // The blocks (copy of) that branch to this block    OPT_BasicBlockEnumeration head_inEdges = header.getIn();    // Loop over blocks that branch to this one    loop_over_header_in_edges:     while(head_inEdges.hasMoreElements()){      OPT_BasicBlock curEdgeBB = head_inEdges.next();      // Is this block in the loop?      if(isInLoop(curEdgeBB)){        // Yes - must be the exit block        if (exit != null){          // we already have an exit block so loop structure is too          // complex for us to understand          throw new NonRegularLoopException("Multiple back edges to the header block making exit block undistinguishable.");        }        exit = curEdgeBB;        processExit();      }      else {        // No - this is an out of loop block going into the header        if (predecessor != null){          // we already have a predecessor to the header block, more          // than 1 is beyond this optimisation at the moment          throw new NonRegularLoopException("Multiple out of loop edges into the header making predecessor block undistinguishable.");        }        predecessor = curEdgeBB;      }    } // end of loop_over_header_in_edges    // If the header isn't the exit block, check it doesn't branch outside of the loop    if(header != exit) {      checkOutEdgesAreInLoop(header);    }  }