if (OPT_IR.PARANOID) VM.assert(this == last_instr_BB1.getBasicBlock());
if (OPT_IR.PARANOID) VM._assert(this == last_instr_BB1.getBasicBlock());
  public final OPT_BasicBlock splitNodeAt(OPT_Instruction last_instr_BB1, 					  OPT_IR ir) {    if (OPT_IR.PARANOID) VM.assert(this == last_instr_BB1.getBasicBlock());    OPT_BasicBlock BB1 = this;    OPT_BasicBlock BB2 = new OPT_BasicBlock(last_instr_BB1.bcIndex, 					    last_instr_BB1.position, 					    ir.cfg);    OPT_BasicBlock BB3 = (OPT_BasicBlock)BB1.next;    // move last_instr_BB1 ... BB1.end.prev into BB2    if (last_instr_BB1 == BB1.end || last_instr_BB1.getNext() == BB1.end) {      // there are no such instructions; nothing to do    } else {      OPT_Instruction first_instr_BB2 = last_instr_BB1.getNext();      OPT_Instruction last_instr_BB2 = BB1.end.getPrev();      last_instr_BB1.linkWithNext(BB1.end);      BB2.start.linkWithNext(first_instr_BB2);      last_instr_BB2.linkWithNext(BB2.end);    }    // Update code ordering (see header comment above)    if (BB3 == null) {      ir.cfg.addLastInCodeOrder(BB2);      if (OPT_IR.PARANOID) VM.assert(BB1.next == BB2 && BB2.prev == BB1);      ir.cfg.breakCodeOrder(BB1, BB2);    } else {      ir.cfg.breakCodeOrder(BB1, BB3);      ir.cfg.linkInCodeOrder(BB2, BB3);    }          // Update control flow graph to transfer BB1's out edges to BB2.    // But it's not as simple as that.  Any edge that is present to represent    // potential exception behavior (out.isExceptionHandlerBasicBlock == true)    // needs to be both left in BB1's out set and transfered to BB2's out set    // Note this may be overly conservative, but will be correct.    for (OPT_BasicBlockEnumeration e = getOut(); e.hasMoreElements();) {	OPT_BasicBlock out = e.next();	BB2.insertOut(out);    }        // Initialize the rest of BB2's exception related state to match BB1    BB2.exceptionHandlers = BB1.exceptionHandlers;    BB2.setCanThrowExceptions(BB1.canThrowExceptions());    BB2.setMayThrowUncaughtException(BB1.mayThrowUncaughtException());    BB2.setUnsafeToSchedule(BB1.isUnsafeToSchedule());    BB2.setExecutionFrequency(BB1.getExecutionFrequency());    BB1.deleteNormalOut();        return BB2;  }