state.getCompiledMethodId());
state.getCompiledMethod());
  protected OPT_InlineDecision shouldInlineInternal(VM_Method caller, 						    VM_Method callee, 						    OPT_CompilationState state, 						    int inlinedSizeEstimate) {    // Don't allow the static inline oracle to inline recursive calls.    // It isn't smart enough to do this effectively.    OPT_InlineSequence seq = state.getSequence();    if (seq.containsMethod(callee)) {      return OPT_InlineDecision.NO("recursive call");    }    OPT_Options opts = state.getOptions();    // more or less figure out the guard situation early -- impacts size estimate.    boolean needsGuard = state.getComputedTarget() == null && needsGuard(callee);    boolean preEx =       needsGuard && state.getIsExtant() && opts.PREEX_INLINE && isCurrentlyFinal(callee, true);        // See if inlining action passes simple size heuristics    int cost = inliningActionCost(inlinedSizeEstimate, needsGuard, preEx, opts);    OPT_InlineDecision sizeCheck = sizeHeuristics(caller, callee, state, cost);    if (sizeCheck != null) return sizeCheck;    // Ok, the size looks good, attempt to do it.    if (needsGuard) {      if (preEx) {	if (OPT_ClassLoadingDependencyManager.TRACE || 	    OPT_ClassLoadingDependencyManager.DEBUG) {	  VM_Class.OptCLDepManager.report("PREEX_INLINE: Inlined "					  + callee + " into " + caller + "\n");	}	VM_Class.OptCLDepManager.addNotOverriddenDependency(callee, 							    state.getCompiledMethodId());	return OPT_InlineDecision.YES(callee, "PREEX_INLINE passed size checks");      } else 	  if (opts.GUARDED_INLINE && isCurrentlyFinal(callee, !opts.guardWithClassTest())) {	return OPT_InlineDecision.guardedYES(callee, 					     chooseGuard(caller, callee, state, true), 					     "static guarded inline passsed size checks");      }      return OPT_InlineDecision.NO(callee, "non-final virtual method");    } else {      return OPT_InlineDecision.YES(callee, "Non-guarded passed size checks");    }  }