comparison src/share/vm/runtime/compilationPolicy.cpp @ 6800:9191895df19d

7200001: failed C1 OSR compile doesn't get recompiled with C2 Reviewed-by: kvn
author twisti
date Mon, 24 Sep 2012 17:59:24 -0700
parents da91efe96a93
children 18fb7da42534
comparison
equal deleted inserted replaced
6799:c92f43386117 6800:9191895df19d
392 #endif // !PRODUCT 392 #endif // !PRODUCT
393 393
394 // SimpleCompPolicy - compile current method 394 // SimpleCompPolicy - compile current method
395 395
396 void SimpleCompPolicy::method_invocation_event(methodHandle m, JavaThread* thread) { 396 void SimpleCompPolicy::method_invocation_event(methodHandle m, JavaThread* thread) {
397 int hot_count = m->invocation_count(); 397 const int comp_level = CompLevel_highest_tier;
398 const int hot_count = m->invocation_count();
398 reset_counter_for_invocation_event(m); 399 reset_counter_for_invocation_event(m);
399 const char* comment = "count"; 400 const char* comment = "count";
400 401
401 if (is_compilation_enabled() && can_be_compiled(m)) { 402 if (is_compilation_enabled() && can_be_compiled(m)) {
402 nmethod* nm = m->code(); 403 nmethod* nm = m->code();
403 if (nm == NULL ) { 404 if (nm == NULL ) {
404 const char* comment = "count"; 405 CompileBroker::compile_method(m, InvocationEntryBci, comp_level, m, hot_count, comment, thread);
405 CompileBroker::compile_method(m, InvocationEntryBci, CompLevel_highest_tier,
406 m, hot_count, comment, thread);
407 } 406 }
408 } 407 }
409 } 408 }
410 409
411 void SimpleCompPolicy::method_back_branch_event(methodHandle m, int bci, JavaThread* thread) { 410 void SimpleCompPolicy::method_back_branch_event(methodHandle m, int bci, JavaThread* thread) {
412 int hot_count = m->backedge_count(); 411 const int comp_level = CompLevel_highest_tier;
412 const int hot_count = m->backedge_count();
413 const char* comment = "backedge_count"; 413 const char* comment = "backedge_count";
414 414
415 if (is_compilation_enabled() && !m->is_not_osr_compilable() && can_be_compiled(m)) { 415 if (is_compilation_enabled() && !m->is_not_osr_compilable(comp_level) && can_be_compiled(m)) {
416 CompileBroker::compile_method(m, bci, CompLevel_highest_tier, 416 CompileBroker::compile_method(m, bci, comp_level, m, hot_count, comment, thread);
417 m, hot_count, comment, thread); 417 NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(bci, comp_level, true));)
418 NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(bci, CompLevel_highest_tier, true));)
419 } 418 }
420 } 419 }
421 // StackWalkCompPolicy - walk up stack to find a suitable method to compile 420 // StackWalkCompPolicy - walk up stack to find a suitable method to compile
422 421
423 #ifdef COMPILER2 422 #ifdef COMPILER2
424 const char* StackWalkCompPolicy::_msg = NULL; 423 const char* StackWalkCompPolicy::_msg = NULL;
425 424
426 425
427 // Consider m for compilation 426 // Consider m for compilation
428 void StackWalkCompPolicy::method_invocation_event(methodHandle m, JavaThread* thread) { 427 void StackWalkCompPolicy::method_invocation_event(methodHandle m, JavaThread* thread) {
429 int hot_count = m->invocation_count(); 428 const int comp_level = CompLevel_highest_tier;
429 const int hot_count = m->invocation_count();
430 reset_counter_for_invocation_event(m); 430 reset_counter_for_invocation_event(m);
431 const char* comment = "count"; 431 const char* comment = "count";
432 432
433 if (is_compilation_enabled() && m->code() == NULL && can_be_compiled(m)) { 433 if (is_compilation_enabled() && m->code() == NULL && can_be_compiled(m)) {
434 ResourceMark rm(thread); 434 ResourceMark rm(thread);
455 stack->push(first); 455 stack->push(first);
456 RFrame* top = findTopInlinableFrame(stack); 456 RFrame* top = findTopInlinableFrame(stack);
457 if (TimeCompilationPolicy) accumulated_time()->stop(); 457 if (TimeCompilationPolicy) accumulated_time()->stop();
458 assert(top != NULL, "findTopInlinableFrame returned null"); 458 assert(top != NULL, "findTopInlinableFrame returned null");
459 if (TraceCompilationPolicy) top->print(); 459 if (TraceCompilationPolicy) top->print();
460 CompileBroker::compile_method(top->top_method(), InvocationEntryBci, CompLevel_highest_tier, 460 CompileBroker::compile_method(top->top_method(), InvocationEntryBci, comp_level,
461 m, hot_count, comment, thread); 461 m, hot_count, comment, thread);
462 } 462 }
463 } 463 }
464 } 464 }
465 465
466 void StackWalkCompPolicy::method_back_branch_event(methodHandle m, int bci, JavaThread* thread) { 466 void StackWalkCompPolicy::method_back_branch_event(methodHandle m, int bci, JavaThread* thread) {
467 int hot_count = m->backedge_count(); 467 const int comp_level = CompLevel_highest_tier;
468 const int hot_count = m->backedge_count();
468 const char* comment = "backedge_count"; 469 const char* comment = "backedge_count";
469 470
470 if (is_compilation_enabled() && !m->is_not_osr_compilable() && can_be_compiled(m)) { 471 if (is_compilation_enabled() && !m->is_not_osr_compilable(comp_level) && can_be_compiled(m)) {
471 CompileBroker::compile_method(m, bci, CompLevel_highest_tier, m, hot_count, comment, thread); 472 CompileBroker::compile_method(m, bci, comp_level, m, hot_count, comment, thread);
472 473 NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(bci, comp_level, true));)
473 NOT_PRODUCT(trace_osr_completion(m->lookup_osr_nmethod_for(bci, CompLevel_highest_tier, true));)
474 } 474 }
475 } 475 }
476 476
477 RFrame* StackWalkCompPolicy::findTopInlinableFrame(GrowableArray<RFrame*>* stack) { 477 RFrame* StackWalkCompPolicy::findTopInlinableFrame(GrowableArray<RFrame*>* stack) {
478 // go up the stack until finding a frame that (probably) won't be inlined 478 // go up the stack until finding a frame that (probably) won't be inlined