Mercurial > hg > truffle
comparison src/share/vm/opto/bytecodeInfo.cpp @ 7991:60bba1398c51
8005439: no message about inline method if it specifed by CompileCommand
Reviewed-by: kvn, vlivanov
Contributed-by: Igor Ignatyev <igor.ignatyev@oracle.com>
author | vlivanov |
---|---|
date | Fri, 01 Feb 2013 03:02:01 -0800 |
parents | d092d1b31229 |
children | 133bf557ef77 |
comparison
equal
deleted
inserted
replaced
7990:fcc9e7681d63 | 7991:60bba1398c51 |
---|---|
418 if ( callee->get_flow_analysis()->failing()) return "not compilable (flow analysis failed)"; | 418 if ( callee->get_flow_analysis()->failing()) return "not compilable (flow analysis failed)"; |
419 return NULL; | 419 return NULL; |
420 } | 420 } |
421 | 421 |
422 //------------------------------print_inlining--------------------------------- | 422 //------------------------------print_inlining--------------------------------- |
423 // Really, the failure_msg can be a success message also. | 423 void InlineTree::print_inlining(ciMethod* callee_method, int caller_bci, |
424 void InlineTree::print_inlining(ciMethod* callee_method, int caller_bci, const char* failure_msg) const { | 424 const char* msg, bool success) const { |
425 C->print_inlining(callee_method, inline_level(), caller_bci, failure_msg ? failure_msg : "inline"); | 425 assert(msg != NULL, "just checking"); |
426 if (callee_method == NULL) tty->print(" callee not monotonic or profiled"); | 426 if (C->log() != NULL) { |
427 if (Verbose && callee_method) { | 427 if (success) { |
428 const InlineTree *top = this; | 428 C->log()->inline_success(msg); |
429 while( top->caller_tree() != NULL ) { top = top->caller_tree(); } | 429 } else { |
430 //tty->print(" bcs: %d+%d invoked: %d", top->count_inline_bcs(), callee_method->code_size(), callee_method->interpreter_invocation_count()); | 430 C->log()->inline_fail(msg); |
431 } | |
432 } | |
433 if (PrintInlining) { | |
434 C->print_inlining(callee_method, inline_level(), caller_bci, msg); | |
435 if (callee_method == NULL) tty->print(" callee not monotonic or profiled"); | |
436 if (Verbose && callee_method) { | |
437 const InlineTree *top = this; | |
438 while( top->caller_tree() != NULL ) { top = top->caller_tree(); } | |
439 //tty->print(" bcs: %d+%d invoked: %d", top->count_inline_bcs(), callee_method->code_size(), callee_method->interpreter_invocation_count()); | |
440 } | |
431 } | 441 } |
432 } | 442 } |
433 | 443 |
434 //------------------------------ok_to_inline----------------------------------- | 444 //------------------------------ok_to_inline----------------------------------- |
435 WarmCallInfo* InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms, ciCallProfile& profile, WarmCallInfo* initial_wci, bool& should_delay) { | 445 WarmCallInfo* InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms, ciCallProfile& profile, WarmCallInfo* initial_wci, bool& should_delay) { |
449 int caller_bci = jvms->bci(); | 459 int caller_bci = jvms->bci(); |
450 ciMethod *caller_method = jvms->method(); | 460 ciMethod *caller_method = jvms->method(); |
451 | 461 |
452 // Do some initial checks. | 462 // Do some initial checks. |
453 if (!pass_initial_checks(caller_method, caller_bci, callee_method)) { | 463 if (!pass_initial_checks(caller_method, caller_bci, callee_method)) { |
454 if (PrintInlining) print_inlining(callee_method, caller_bci, "failed initial checks"); | 464 print_inlining(callee_method, caller_bci, "failed initial checks", |
465 false /* !success */); | |
455 return NULL; | 466 return NULL; |
456 } | 467 } |
457 | 468 |
458 // Do some parse checks. | 469 // Do some parse checks. |
459 failure_msg = check_can_parse(callee_method); | 470 failure_msg = check_can_parse(callee_method); |
460 if (failure_msg != NULL) { | 471 if (failure_msg != NULL) { |
461 if (PrintInlining) print_inlining(callee_method, caller_bci, failure_msg); | 472 print_inlining(callee_method, caller_bci, failure_msg, |
473 false /* !success */); | |
462 return NULL; | 474 return NULL; |
463 } | 475 } |
464 | 476 |
465 // Check if inlining policy says no. | 477 // Check if inlining policy says no. |
466 WarmCallInfo wci = *(initial_wci); | 478 WarmCallInfo wci = *(initial_wci); |
467 failure_msg = try_to_inline(callee_method, caller_method, caller_bci, profile, &wci, should_delay); | 479 failure_msg = try_to_inline(callee_method, caller_method, caller_bci, profile, |
468 if (failure_msg != NULL && C->log() != NULL) { | 480 &wci, should_delay); |
469 C->log()->inline_fail(failure_msg); | |
470 } | |
471 | 481 |
472 #ifndef PRODUCT | 482 #ifndef PRODUCT |
473 if (UseOldInlining && InlineWarmCalls | 483 if (UseOldInlining && InlineWarmCalls |
474 && (PrintOpto || PrintOptoInlining || PrintInlining)) { | 484 && (PrintOpto || PrintOptoInlining || PrintInlining)) { |
475 bool cold = wci.is_cold(); | 485 bool cold = wci.is_cold(); |
485 if (UseOldInlining) { | 495 if (UseOldInlining) { |
486 if (failure_msg == NULL) | 496 if (failure_msg == NULL) |
487 wci = *(WarmCallInfo::always_hot()); | 497 wci = *(WarmCallInfo::always_hot()); |
488 else | 498 else |
489 wci = *(WarmCallInfo::always_cold()); | 499 wci = *(WarmCallInfo::always_cold()); |
490 } | 500 } |
491 if (!InlineWarmCalls) { | 501 if (!InlineWarmCalls) { |
492 if (!wci.is_cold() && !wci.is_hot()) { | 502 if (!wci.is_cold() && !wci.is_hot()) { |
493 // Do not inline the warm calls. | 503 // Do not inline the warm calls. |
494 wci = *(WarmCallInfo::always_cold()); | 504 wci = *(WarmCallInfo::always_cold()); |
495 } | 505 } |
496 } | 506 } |
497 | 507 |
498 if (!wci.is_cold()) { | 508 if (!wci.is_cold()) { |
499 // In -UseOldInlining, the failure_msg may also be a success message. | |
500 if (failure_msg == NULL) failure_msg = "inline (hot)"; | |
501 | |
502 // Inline! | 509 // Inline! |
503 if (PrintInlining) print_inlining(callee_method, caller_bci, failure_msg); | 510 print_inlining(callee_method, caller_bci, |
511 failure_msg ? failure_msg : "inline (hot)", | |
512 true /* success */); | |
504 if (UseOldInlining) | 513 if (UseOldInlining) |
505 build_inline_tree_for_callee(callee_method, jvms, caller_bci); | 514 build_inline_tree_for_callee(callee_method, jvms, caller_bci); |
506 if (InlineWarmCalls && !wci.is_hot()) | 515 if (InlineWarmCalls && !wci.is_hot()) |
507 return new (C) WarmCallInfo(wci); // copy to heap | 516 return new (C) WarmCallInfo(wci); // copy to heap |
508 return WarmCallInfo::always_hot(); | 517 return WarmCallInfo::always_hot(); |
509 } | 518 } |
510 | 519 |
511 // Do not inline | 520 // Do not inline |
512 if (failure_msg == NULL) failure_msg = "too cold to inline"; | 521 print_inlining(callee_method, caller_bci, |
513 if (PrintInlining) print_inlining(callee_method, caller_bci, failure_msg); | 522 failure_msg ? failure_msg : "too cold to inline", |
523 false /* !success */ ); | |
514 return NULL; | 524 return NULL; |
515 } | 525 } |
516 | 526 |
517 //------------------------------compute_callee_frequency----------------------- | 527 //------------------------------compute_callee_frequency----------------------- |
518 float InlineTree::compute_callee_frequency( int caller_bci ) const { | 528 float InlineTree::compute_callee_frequency( int caller_bci ) const { |