VM.assert(ifGuard != null);
VM._assert(ifGuard != null);
  private void insertPiIfNodes(OPT_IR ir) {    for (OPT_InstructionEnumeration e = ir.forwardInstrEnumerator();         e.hasMoreElements(); /* nothing */    ) {      OPT_Instruction instr = e.next      /*Element*/      ();      // TODO: what other compareops generate useful assertions?      if (IfCmp.conforms(instr) || InlineGuard.conforms(instr)) {        OPT_BasicBlock thisbb = instr.getBasicBlock();        // only handle the "normal" case        if (thisbb.getNumberOfNormalOut() != 2)          continue;        // insert new basic blocks on each edge out of thisbb        OPT_BasicBlockEnumeration outBB = thisbb.getNormalOut();        OPT_BasicBlock out1 = outBB.next();        OPT_BasicBlock new1 = OPT_IRTools.makeBlockOnEdge(thisbb, out1, ir);        OPT_BasicBlock out2 = outBB.next();        OPT_BasicBlock new2 = OPT_IRTools.makeBlockOnEdge(thisbb, out2, ir);	// For these types of IfCmp's, the Pi Node is not actually	// needed yet.  For now the only functionality needed is the	// blocks made on the outgoing edges.	if (InlineGuard.conforms(instr)) continue;        OPT_RegisterOperand ifGuard = (OPT_RegisterOperand)            IfCmp.getGuardResult(instr);        if (VM.VerifyAssertions)          VM.assert(ifGuard != null);        // get compared variables        OPT_Operand a = IfCmp.getVal1(instr);        OPT_Operand b = IfCmp.getVal2(instr);        // determine which block is "taken" on the branch        OPT_BasicBlock takenBlock =             IfCmp.getTarget(instr).target.getBasicBlock();        boolean new1IsTaken = false;        if (takenBlock == new1) {          new1IsTaken = true;        }        // insert the PI-node instructions for a and b        if (a.isRegister() && !a.asRegister().register.isPhysical() &&             a.asRegister().register.isInteger()) {          // insert pi-nodes only for variables, not constants          OPT_Instruction s = GuardedUnary.create(              PI, (OPT_RegisterOperand)a.copy(),               a.copy(), null);          OPT_RegisterOperand sGuard = (OPT_RegisterOperand)ifGuard.copy();          if (new1IsTaken)            sGuard.setTaken();           else             sGuard.setNotTaken();          GuardedUnary.setGuard(s, sGuard);          new1.prependInstruction(s);          s = s.copyWithoutLinks();          sGuard = (OPT_RegisterOperand)ifGuard.copy();          if (new1IsTaken)            sGuard.setNotTaken();           else             sGuard.setTaken();          GuardedUnary.setGuard(s, sGuard);          new2.prependInstruction(s);        }        if (b.isRegister() && !b.asRegister().register.isPhysical() &&             b.asRegister().register.isInteger()) {          OPT_Instruction s = GuardedUnary.create(              PI, (OPT_RegisterOperand)b.copy(),               b.copy(), null);          OPT_RegisterOperand sGuard = (OPT_RegisterOperand)ifGuard.copy();          if (new1IsTaken)            sGuard.setTaken();           else             sGuard.setNotTaken();          GuardedUnary.setGuard(s, sGuard);          new1.prependInstruction(s);          s = s.copyWithoutLinks();          sGuard = (OPT_RegisterOperand)ifGuard.copy();          if (new1IsTaken)            sGuard.setNotTaken();           else             sGuard.setTaken();          GuardedUnary.setGuard(s, sGuard);          new2.prependInstruction(s);        }      }    }  }