OPT_BasicBlockEnumeration bs = ir.getBasicBlocks (loop); while (bs.hasMoreElements()) { seqLast = copyAndLinkBlock (ir, seqLast, bs.next());
for (int k = 0;  k < body.length;  ++k) { seqLast = copyAndLinkBlock (ir, seqLast, body[k]);
  static OPT_BasicBlock[] makeSomeCopies (int unrollFactor, OPT_IR ir,					  OPT_BitVector nloop,					  int blocks,					  OPT_BasicBlock header,					  OPT_BasicBlock exitBlock,					  OPT_BasicBlock seqStart)  {    // make some copies of the original loop    OPT_BasicBlock seqEnd = seqStart.nextBasicBlockInCodeOrder();    if (seqEnd != null) ir.cfg.breakCodeOrder(seqStart, seqEnd);    OPT_BasicBlock seqLast = seqStart;    OPT_BasicBlock firstHeader = null;    OPT_BasicBlock lastHeader = null;    OPT_BasicBlock lastExit = null;    OPT_BasicBlock handles[] = new OPT_BasicBlock[2];        OPT_BasicBlock bCopy = null;    OPT_BitVector loop = new OPT_BitVector (nloop);    loop.clear(header.getNumber());    loop.clear(exitBlock.getNumber());        for (int i = 0;  i < unrollFactor;  ++i) {      // copy header      seqLast = copyAndLinkBlock(ir, seqLast, header);      lastHeader = seqLast;            if (i == 0) {	firstHeader = seqLast;      } else {	// link copies by jumps	OPT_CFGTransformations.removeYieldPoint(seqLast);	lastExit.lastInstruction().insertBefore	  (Goto.create(GOTO, seqLast.makeJumpTarget()));	lastExit.recomputeNormalOut(ir);      }      // copy body      OPT_BasicBlockEnumeration bs = ir.getBasicBlocks (loop);      while (bs.hasMoreElements()) {	seqLast = copyAndLinkBlock (ir, seqLast, bs.next());      }      // copy exit block      if (exitBlock != header) {	seqLast = copyAndLinkBlock (ir, seqLast, exitBlock);	lastExit = seqLast;      } else {	lastExit = lastHeader;      }            // delete all branches in the copies of the exit block      deleteBranches (lastExit);            // redirect internal branches      OPT_BasicBlock cb = seqLast;      for (int j = 0; j < blocks; ++j) {	cb.recomputeNormalOut(ir);	OPT_BasicBlockEnumeration be = cb.getOut();	while (be.hasMoreElements()) {	  OPT_BasicBlock out = be.next();	  if (nloop.get(out.getNumber())) {	    cb.redirectOuts (out, (OPT_BasicBlock) out.scratchObject, ir);	  }	}	cb.recomputeNormalOut(ir);	cb = cb.prevBasicBlockInCodeOrder();      }    }    if (seqEnd != null) ir.cfg.linkInCodeOrder (seqLast, seqEnd);    handles[0] = firstHeader;    handles[1] = lastExit;    return handles;  }