if (r.getType() != newR.getType()) {
if ((r.getType() != newR.getType()) || (r.isNatural() && newR.isNatural())) {
    private CompoundInterval spillMinUnitCost(CompoundInterval newInterval) {      if (verboseDebug) {        System.out.println(" interval caused a spill: " + newInterval);      }      OPT_RegisterRestrictions restrict = ir.stackManager.getRestrictions();      OPT_Register r = newInterval.getRegister();      double minCost = spillCost.getCost(r);      if (verboseDebug) {        System.out.println(" spill cost: " + r + " " + minCost);      }      CompoundInterval result = newInterval;      if (restrict.mustNotSpill(result.getRegister())) {        if (verboseDebug) {          System.out.println(" must not spill: " + result.getRegister());        }        result = null;        minCost = Integer.MAX_VALUE;      }      for (Iterator e = iterator(); e.hasNext(); ) {        MappedBasicInterval b = (MappedBasicInterval)e.next();        CompoundInterval i = b.container;        OPT_Register newR = i.getRegister();        if (verboseDebug) {          if (i.isSpilled())  {            System.out.println(" not candidate, already spilled: " + newR);          }          if (r.getType() != newR.getType()) {            System.out.println(" not candidate, type mismatch : " +                               r.getType() + " " + newR + " " +                               newR.getType());          }          if (restrict.mustNotSpill(newR)) {            System.out.println(" not candidate, must not spill: " + newR);          }        }        if (!newR.isPhysical() && !i.isSpilled() &&             r.getType()== newR.getType() &&            !restrict.mustNotSpill(newR)) {          // Found a potential spill interval. Check if the assignment          // works if we spill this interval.            if (checkAssignmentIfSpilled(newInterval,i)) {            double iCost = spillCost.getCost(newR);            if (verboseDebug) System.out.println(" potential candidate " +                                                 i + " cost " + iCost);            if (iCost < minCost) {              if (verboseDebug) System.out.println(" best candidate so far" + i);              minCost = iCost;              result = i;            }          } else {            if (verboseDebug) {              System.out.println(" not a candidate, insufficient range: "                                 + i);            }          }        }      }      if (VM.VerifyAssertions) {        VM._assert (result != null);      }      return result;    }