releaseOptimizationPlan(freeOptimizationPlan);
  public static VM_CompiledMethod compile(VM_NormalMethod method) {    if (method.hasNoOptCompilePragma()) {      return baselineCompile(method);    } else {      VM_CompiledMethod cm = null;      OPT_OptimizingCompilerException escape =  new OPT_OptimizingCompilerException(false);      try {        VM_Callbacks.notifyMethodCompile(method, VM_CompiledMethod.OPT);        boolean include = match(method);        if (!include)          throw escape;        long start = System.currentTimeMillis();        OPT_CompilationPlan cp = new OPT_CompilationPlan(method, optimizationPlan, null, options);        cm = OPT_Compiler.compile(cp);        if (VM.BuildForAdaptiveSystem) {          long stop = System.currentTimeMillis();          long compileTime = stop - start;          cm.setCompilationTime((float)compileTime);        }        return cm;      } catch (OPT_OptimizingCompilerException e) {        if (e.isFatal) {          // An unexpected error when building the opt boot image should be fatal          e.printStackTrace();          System.exit(VM.EXIT_STATUS_OPT_COMPILER_FAILED);        } else {          boolean printMsg = true;          if (e instanceof OPT_MagicNotImplementedException)             printMsg = !((OPT_MagicNotImplementedException)e).isExpected;          if (e == escape)             printMsg = false;          if (printMsg) {            if (e.toString().indexOf("method excluded") >= 0) {              String msg = "VM_BootImageCompiler: " + method + " excluded from opt-compilation\n";               VM.sysWrite(msg);            } else {              String msg = "VM_BootImageCompiler: can't optimize \"" + method + "\" (error was: " + e + ")\n";               VM.sysWrite(msg);            }          }        }        return baselineCompile(method);      }    }  }