hotspot/src/share/vm/opto/bytecodeInfo.cpp
changeset 10509 43d670e5701e
parent 10506 575ad9bccff5
child 10514 e229a19078cf
equal deleted inserted replaced
10508:233d2e7c462d 10509:43d670e5701e
   392   if( callee_method->should_exclude() )  return false;
   392   if( callee_method->should_exclude() )  return false;
   393 
   393 
   394   return true;
   394   return true;
   395 }
   395 }
   396 
   396 
       
   397 //------------------------------check_can_parse--------------------------------
       
   398 const char* InlineTree::check_can_parse(ciMethod* callee) {
       
   399   // Certain methods cannot be parsed at all:
       
   400   if ( callee->is_native())                     return "native method";
       
   401   if (!callee->can_be_compiled())               return "not compilable (disabled)";
       
   402   if (!callee->has_balanced_monitors())         return "not compilable (unbalanced monitors)";
       
   403   if ( callee->get_flow_analysis()->failing())  return "not compilable (flow analysis failed)";
       
   404   return NULL;
       
   405 }
       
   406 
   397 //------------------------------print_inlining---------------------------------
   407 //------------------------------print_inlining---------------------------------
   398 // Really, the failure_msg can be a success message also.
   408 // Really, the failure_msg can be a success message also.
   399 void InlineTree::print_inlining(ciMethod* callee_method, int caller_bci, const char* failure_msg) const {
   409 void InlineTree::print_inlining(ciMethod* callee_method, int caller_bci, const char* failure_msg) const {
   400   CompileTask::print_inlining(callee_method, inline_level(), caller_bci, failure_msg ? failure_msg : "inline");
   410   CompileTask::print_inlining(callee_method, inline_level(), caller_bci, failure_msg ? failure_msg : "inline");
   401   if (callee_method == NULL)  tty->print(" callee not monotonic or profiled");
   411   if (callee_method == NULL)  tty->print(" callee not monotonic or profiled");
   421 #endif
   431 #endif
   422   const char *failure_msg   = NULL;
   432   const char *failure_msg   = NULL;
   423   int         caller_bci    = jvms->bci();
   433   int         caller_bci    = jvms->bci();
   424   ciMethod   *caller_method = jvms->method();
   434   ciMethod   *caller_method = jvms->method();
   425 
   435 
   426   if( !pass_initial_checks(caller_method, caller_bci, callee_method)) {
   436   // Do some initial checks.
   427     if( PrintInlining ) {
   437   if (!pass_initial_checks(caller_method, caller_bci, callee_method)) {
       
   438     if (PrintInlining) {
   428       failure_msg = "failed_initial_checks";
   439       failure_msg = "failed_initial_checks";
   429       print_inlining( callee_method, caller_bci, failure_msg);
   440       print_inlining(callee_method, caller_bci, failure_msg);
   430     }
   441     }
       
   442     return NULL;
       
   443   }
       
   444 
       
   445   // Do some parse checks.
       
   446   failure_msg = check_can_parse(callee_method);
       
   447   if (failure_msg != NULL) {
       
   448     if (PrintInlining)  print_inlining(callee_method, caller_bci, failure_msg);
   431     return NULL;
   449     return NULL;
   432   }
   450   }
   433 
   451 
   434   // Check if inlining policy says no.
   452   // Check if inlining policy says no.
   435   WarmCallInfo wci = *(initial_wci);
   453   WarmCallInfo wci = *(initial_wci);
   469   if (!wci.is_cold()) {
   487   if (!wci.is_cold()) {
   470     // In -UseOldInlining, the failure_msg may also be a success message.
   488     // In -UseOldInlining, the failure_msg may also be a success message.
   471     if (failure_msg == NULL)  failure_msg = "inline (hot)";
   489     if (failure_msg == NULL)  failure_msg = "inline (hot)";
   472 
   490 
   473     // Inline!
   491     // Inline!
   474     if( PrintInlining ) print_inlining( callee_method, caller_bci, failure_msg);
   492     if (PrintInlining)  print_inlining(callee_method, caller_bci, failure_msg);
   475     if (UseOldInlining)
   493     if (UseOldInlining)
   476       build_inline_tree_for_callee(callee_method, jvms, caller_bci);
   494       build_inline_tree_for_callee(callee_method, jvms, caller_bci);
   477     if (InlineWarmCalls && !wci.is_hot())
   495     if (InlineWarmCalls && !wci.is_hot())
   478       return new (C) WarmCallInfo(wci);  // copy to heap
   496       return new (C) WarmCallInfo(wci);  // copy to heap
   479     return WarmCallInfo::always_hot();
   497     return WarmCallInfo::always_hot();
   480   }
   498   }
   481 
   499 
   482   // Do not inline
   500   // Do not inline
   483   if (failure_msg == NULL)  failure_msg = "too cold to inline";
   501   if (failure_msg == NULL)  failure_msg = "too cold to inline";
   484   if( PrintInlining ) print_inlining( callee_method, caller_bci, failure_msg);
   502   if (PrintInlining)  print_inlining(callee_method, caller_bci, failure_msg);
   485   return NULL;
   503   return NULL;
   486 }
   504 }
   487 
   505 
   488 //------------------------------compute_callee_frequency-----------------------
   506 //------------------------------compute_callee_frequency-----------------------
   489 float InlineTree::compute_callee_frequency( int caller_bci ) const {
   507 float InlineTree::compute_callee_frequency( int caller_bci ) const {