1 /* |
1 /* |
2 * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
168 } |
168 } |
169 |
169 |
170 void NonTieredCompPolicy::trace_osr_completion(nmethod* osr_nm) { |
170 void NonTieredCompPolicy::trace_osr_completion(nmethod* osr_nm) { |
171 if (TraceOnStackReplacement) { |
171 if (TraceOnStackReplacement) { |
172 if (osr_nm == NULL) tty->print_cr("compilation failed"); |
172 if (osr_nm == NULL) tty->print_cr("compilation failed"); |
173 else tty->print_cr("nmethod " INTPTR_FORMAT, osr_nm); |
173 else tty->print_cr("nmethod " INTPTR_FORMAT, p2i(osr_nm)); |
174 } |
174 } |
175 } |
175 } |
176 #endif // !PRODUCT |
176 #endif // !PRODUCT |
177 |
177 |
178 void NonTieredCompPolicy::initialize() { |
178 void NonTieredCompPolicy::initialize() { |
415 } |
415 } |
416 return NULL; |
416 return NULL; |
417 } |
417 } |
418 |
418 |
419 #ifndef PRODUCT |
419 #ifndef PRODUCT |
|
420 PRAGMA_FORMAT_NONLITERAL_IGNORED_EXTERNAL |
420 void NonTieredCompPolicy::trace_frequency_counter_overflow(methodHandle m, int branch_bci, int bci) { |
421 void NonTieredCompPolicy::trace_frequency_counter_overflow(methodHandle m, int branch_bci, int bci) { |
421 if (TraceInvocationCounterOverflow) { |
422 if (TraceInvocationCounterOverflow) { |
422 MethodCounters* mcs = m->method_counters(); |
423 MethodCounters* mcs = m->method_counters(); |
423 assert(mcs != NULL, "MethodCounters cannot be NULL for profiling"); |
424 assert(mcs != NULL, "MethodCounters cannot be NULL for profiling"); |
424 InvocationCounter* ic = mcs->invocation_counter(); |
425 InvocationCounter* ic = mcs->invocation_counter(); |
426 ResourceMark rm; |
427 ResourceMark rm; |
427 const char* msg = |
428 const char* msg = |
428 bci == InvocationEntryBci |
429 bci == InvocationEntryBci |
429 ? "comp-policy cntr ovfl @ %d in entry of " |
430 ? "comp-policy cntr ovfl @ %d in entry of " |
430 : "comp-policy cntr ovfl @ %d in loop of "; |
431 : "comp-policy cntr ovfl @ %d in loop of "; |
|
432 PRAGMA_DIAG_PUSH |
|
433 PRAGMA_FORMAT_NONLITERAL_IGNORED_INTERNAL |
431 tty->print(msg, bci); |
434 tty->print(msg, bci); |
|
435 PRAGMA_DIAG_POP |
432 m->print_value(); |
436 m->print_value(); |
433 tty->cr(); |
437 tty->cr(); |
434 ic->print(); |
438 ic->print(); |
435 bc->print(); |
439 bc->print(); |
436 if (ProfileInterpreter) { |
440 if (ProfileInterpreter) { |
501 assert(fr.interpreter_frame_method() == m(), "bad method"); |
505 assert(fr.interpreter_frame_method() == m(), "bad method"); |
502 |
506 |
503 if (TraceCompilationPolicy) { |
507 if (TraceCompilationPolicy) { |
504 tty->print("method invocation trigger: "); |
508 tty->print("method invocation trigger: "); |
505 m->print_short_name(tty); |
509 m->print_short_name(tty); |
506 tty->print(" ( interpreted " INTPTR_FORMAT ", size=%d ) ", (address)m(), m->code_size()); |
510 tty->print(" ( interpreted " INTPTR_FORMAT ", size=%d ) ", p2i((address)m()), m->code_size()); |
507 } |
511 } |
508 RegisterMap reg_map(thread, false); |
512 RegisterMap reg_map(thread, false); |
509 javaVFrame* triggerVF = thread->last_java_vframe(®_map); |
513 javaVFrame* triggerVF = thread->last_java_vframe(®_map); |
510 // triggerVF is the frame that triggered its counter |
514 // triggerVF is the frame that triggered its counter |
511 RFrame* first = new InterpretedRFrame(triggerVF->fr(), thread, m); |
515 RFrame* first = new InterpretedRFrame(triggerVF->fr(), thread, m); |
512 |
516 |
513 if (first->top_method()->code() != NULL) { |
517 if (first->top_method()->code() != NULL) { |
514 // called obsolete method/nmethod -- no need to recompile |
518 // called obsolete method/nmethod -- no need to recompile |
515 if (TraceCompilationPolicy) tty->print_cr(" --> " INTPTR_FORMAT, first->top_method()->code()); |
519 if (TraceCompilationPolicy) tty->print_cr(" --> " INTPTR_FORMAT, p2i(first->top_method()->code())); |
516 } else { |
520 } else { |
517 if (TimeCompilationPolicy) accumulated_time()->start(); |
521 if (TimeCompilationPolicy) accumulated_time()->start(); |
518 GrowableArray<RFrame*>* stack = new GrowableArray<RFrame*>(50); |
522 GrowableArray<RFrame*>* stack = new GrowableArray<RFrame*>(50); |
519 stack->push(first); |
523 stack->push(first); |
520 RFrame* top = findTopInlinableFrame(stack); |
524 RFrame* top = findTopInlinableFrame(stack); |
638 } |
642 } |
639 |
643 |
640 if (TraceCompilationPolicy && Verbose) { |
644 if (TraceCompilationPolicy && Verbose) { |
641 tty->print("\n\t check caller: "); |
645 tty->print("\n\t check caller: "); |
642 next_m->print_short_name(tty); |
646 next_m->print_short_name(tty); |
643 tty->print(" ( interpreted " INTPTR_FORMAT ", size=%d ) ", (address)next_m(), next_m->code_size()); |
647 tty->print(" ( interpreted " INTPTR_FORMAT ", size=%d ) ", p2i((address)next_m()), next_m->code_size()); |
644 } |
648 } |
645 |
649 |
646 current = next; |
650 current = next; |
647 } |
651 } |
648 |
652 |