Mercurial > hg > graal-compiler
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 |