VM.assert(begin >= lastBeginSeen);
VM._assert(begin >= lastBeginSeen);
    void perform(OPT_IR ir) {      this.ir = ir;      OPT_ControlFlowGraph cfg = ir.cfg;      OPT_PhysicalRegisterSet phys = ir.regpool.getPhysicalRegisterSet();      LinearScanState state = new LinearScanState();      ir.MIRInfo.linearScanState = state;      state.intervals = new ArrayList();      // create topological list and a reverse topological list      // the results are on listOfBlocks and reverseTopFirst lists      createTopAndReverseList(cfg);      // give dfn values to each instruction      assignDepthFirstNumbers(cfg);      // initialize registers       initializeRegisters();      int lastBeginSeen = -1;            // visit each basic block in the listOfBlocks list      for (OPT_BasicBlock bb = listOfBlocks; bb !=null;            bb=(OPT_BasicBlock)bb.nextSorted) {        // visit each live interval for this basic block        for (OPT_LiveIntervalElement live = bb.getFirstLiveIntervalElement();             live != null;              live = live.getNext()) {          // check that we process live intervals in order of increasing          // begin.          if (VM.VerifyAssertions) {            int begin = getDfnBegin(live,bb);            VM.assert(begin >= lastBeginSeen);            lastBeginSeen = begin;          }                    // skip registers which are not allocated.          if (live.getRegister().isPhysical() &&              !phys.isAllocatable(live.getRegister())) continue;          CompoundInterval resultingInterval = processLiveInterval(live, bb);          if (!bb.getInfrequent() && resultingInterval != null) {            resultingInterval.setFrequent();          }        }       }      // debug support      if (verboseDebug) {        VM.sysWrite("**** start of interval dump "+ir.method+" ****\n");        VM.sysWrite(ir.MIRInfo.linearScanState.intervals.toString());        VM.sysWrite("**** end   of interval dump ****\n");      }    }