if (VM.VerifyAssertions) VM.assert(newOrdering[0] == ir.cfg.firstInCodeOrder());
if (VM.VerifyAssertions) VM._assert(newOrdering[0] == ir.cfg.firstInCodeOrder());
  private void implementNewOrdering (OPT_IR ir, OPT_BasicBlock[] newOrdering){    // Check that first basic block is unchanged in newOrdering    // (To relax this restriction, we'll need to add a goto at the top,    //  which seems like it would never be a win.)    if (VM.VerifyAssertions) VM.assert(newOrdering[0] == ir.cfg.firstInCodeOrder());    // Add/remove unconditional goto's as needed.    for (int i = 0; i<newOrdering.length; i++) {      OPT_Instruction lastInstr = newOrdering[i].lastRealInstruction();      // Append a GOTO if needed to maintain old fallthrough semantics.      OPT_BasicBlock fallthroughBlock = newOrdering[i].getFallThroughBlock();      if (fallthroughBlock != null) {	if (i == newOrdering.length - 1 || fallthroughBlock != newOrdering[i+1]) {	  // Add unconditional goto to preserve old fallthrough semantics	  newOrdering[i].appendInstruction(fallthroughBlock.makeGOTO());	}      }      // Remove last instruction if it is a redundant GOTO that      // can be implemented by a fallthrough edge in the new ordering.      // (Only possible if newOrdering[i] is not the last basic block.)      if (i<newOrdering.length-1 && lastInstr != null && lastInstr.operator() == GOTO) {        OPT_BranchOperand op = Goto.getTarget(lastInstr);        if (op.target.getBasicBlock() == newOrdering[i+1]) {          // unconditional goto is redundant in new ordering           lastInstr.remove();        }      }    }