< prev index next >

src/share/vm/opto/parse1.cpp

Print this page
rev 10293 : 8150720: Cleanup code around PrintOptoStatistics
Reviewed-by: kvn, shade, vlivanov

*** 43,96 **** // Static array so we can figure out which bytecodes stop us from compiling // the most. Some of the non-static variables are needed in bytecodeInfo.cpp // and eventually should be encapsulated in a proper class (gri 8/18/98). int nodes_created = 0; int methods_parsed = 0; int methods_seen = 0; int blocks_parsed = 0; int blocks_seen = 0; int explicit_null_checks_inserted = 0; int explicit_null_checks_elided = 0; ! int all_null_checks_found = 0, implicit_null_checks = 0; ! int implicit_null_throws = 0; ! ! int reclaim_idx = 0; ! int reclaim_in = 0; ! int reclaim_node = 0; - #ifndef PRODUCT bool Parse::BytecodeParseHistogram::_initialized = false; uint Parse::BytecodeParseHistogram::_bytecodes_parsed [Bytecodes::number_of_codes]; uint Parse::BytecodeParseHistogram::_nodes_constructed[Bytecodes::number_of_codes]; uint Parse::BytecodeParseHistogram::_nodes_transformed[Bytecodes::number_of_codes]; uint Parse::BytecodeParseHistogram::_new_values [Bytecodes::number_of_codes]; - #endif //------------------------------print_statistics------------------------------- - #ifndef PRODUCT void Parse::print_statistics() { tty->print_cr("--- Compiler Statistics ---"); tty->print("Methods seen: %d Methods parsed: %d", methods_seen, methods_parsed); tty->print(" Nodes created: %d", nodes_created); tty->cr(); ! if (methods_seen != methods_parsed) tty->print_cr("Reasons for parse failures (NOT cumulative):"); tty->print_cr("Blocks parsed: %d Blocks seen: %d", blocks_parsed, blocks_seen); ! if( explicit_null_checks_inserted ) ! tty->print_cr("%d original NULL checks - %d elided (%2d%%); optimizer leaves %d,", explicit_null_checks_inserted, explicit_null_checks_elided, (100*explicit_null_checks_elided)/explicit_null_checks_inserted, all_null_checks_found); ! if( all_null_checks_found ) tty->print_cr("%d made implicit (%2d%%)", implicit_null_checks, (100*implicit_null_checks)/all_null_checks_found); ! if( implicit_null_throws ) tty->print_cr("%d implicit null exceptions at runtime", ! implicit_null_throws); ! if( PrintParseStatistics && BytecodeParseHistogram::initialized() ) { BytecodeParseHistogram::print(); } } #endif --- 43,97 ---- // Static array so we can figure out which bytecodes stop us from compiling // the most. Some of the non-static variables are needed in bytecodeInfo.cpp // and eventually should be encapsulated in a proper class (gri 8/18/98). + #ifndef PRODUCT int nodes_created = 0; int methods_parsed = 0; int methods_seen = 0; int blocks_parsed = 0; int blocks_seen = 0; int explicit_null_checks_inserted = 0; int explicit_null_checks_elided = 0; ! int all_null_checks_found = 0; ! int implicit_null_checks = 0; bool Parse::BytecodeParseHistogram::_initialized = false; uint Parse::BytecodeParseHistogram::_bytecodes_parsed [Bytecodes::number_of_codes]; uint Parse::BytecodeParseHistogram::_nodes_constructed[Bytecodes::number_of_codes]; uint Parse::BytecodeParseHistogram::_nodes_transformed[Bytecodes::number_of_codes]; uint Parse::BytecodeParseHistogram::_new_values [Bytecodes::number_of_codes]; //------------------------------print_statistics------------------------------- void Parse::print_statistics() { tty->print_cr("--- Compiler Statistics ---"); tty->print("Methods seen: %d Methods parsed: %d", methods_seen, methods_parsed); tty->print(" Nodes created: %d", nodes_created); tty->cr(); ! if (methods_seen != methods_parsed) { tty->print_cr("Reasons for parse failures (NOT cumulative):"); + } tty->print_cr("Blocks parsed: %d Blocks seen: %d", blocks_parsed, blocks_seen); ! if (explicit_null_checks_inserted) { ! tty->print_cr("%d original NULL checks - %d elided (%2d%%); optimizer leaves %d,", ! explicit_null_checks_inserted, explicit_null_checks_elided, ! (100*explicit_null_checks_elided)/explicit_null_checks_inserted, ! all_null_checks_found); ! } ! if (all_null_checks_found) { tty->print_cr("%d made implicit (%2d%%)", implicit_null_checks, (100*implicit_null_checks)/all_null_checks_found); ! } ! if (SharedRuntime::_implicit_null_throws) { tty->print_cr("%d implicit null exceptions at runtime", ! SharedRuntime::_implicit_null_throws); ! } ! if (PrintParseStatistics && BytecodeParseHistogram::initialized()) { BytecodeParseHistogram::print(); } } #endif
*** 493,503 **** // cause deoptimization. if (C->env()->jvmti_can_hotswap_or_post_breakpoint()) { C->dependencies()->assert_evol_method(method()); } ! methods_seen++; // Do some special top-level things. if (depth() == 1 && C->is_osr_compilation()) { _entry_bci = C->entry_bci(); _flow = method()->get_osr_flow_analysis(osr_bci()); --- 494,504 ---- // cause deoptimization. if (C->env()->jvmti_can_hotswap_or_post_breakpoint()) { C->dependencies()->assert_evol_method(method()); } ! NOT_PRODUCT(methods_seen++); // Do some special top-level things. if (depth() == 1 && C->is_osr_compilation()) { _entry_bci = C->entry_bci(); _flow = method()->get_osr_flow_analysis(osr_bci());
*** 528,539 **** } else { assert(!this->is_osr_parse(), "no recursive OSR"); } #endif - methods_parsed++; #ifndef PRODUCT // add method size here to guarantee that inlined methods are added too if (CITime) _total_bytes_compiled += method()->code_size(); show_parse_info(); --- 529,540 ---- } else { assert(!this->is_osr_parse(), "no recursive OSR"); } #endif #ifndef PRODUCT + methods_parsed++; // add method size here to guarantee that inlined methods are added too if (CITime) _total_bytes_compiled += method()->code_size(); show_parse_info();
*** 650,660 **** if (stopped()) { // Block is dead. continue; } ! blocks_parsed++; progress = true; if (block->is_loop_head() || block->is_handler() || has_irreducible && !block->is_ready()) { // Not all preds have been parsed. We must build phis everywhere. // (Note that dead locals do not get phis built, ever.) --- 651,661 ---- if (stopped()) { // Block is dead. continue; } ! NOT_PRODUCT(blocks_parsed++); progress = true; if (block->is_loop_head() || block->is_handler() || has_irreducible && !block->is_ready()) { // Not all preds have been parsed. We must build phis everywhere. // (Note that dead locals do not get phis built, ever.)
*** 710,722 **** if (!has_irreducible || !progress) { break; } } blocks_seen += block_count(); - #ifndef PRODUCT // Make sure there are no half-processed blocks remaining. // Every remaining unprocessed block is dead and may be ignored now. for (int rpo = 0; rpo < block_count(); rpo++) { Block* block = rpo_at(rpo); if (!block->is_parsed()) { --- 711,723 ---- if (!has_irreducible || !progress) { break; } } + #ifndef PRODUCT blocks_seen += block_count(); // Make sure there are no half-processed blocks remaining. // Every remaining unprocessed block is dead and may be ignored now. for (int rpo = 0; rpo < block_count(); rpo++) { Block* block = rpo_at(rpo); if (!block->is_parsed()) {
*** 1444,1454 **** tty->cr(); } assert(block()->is_merged(), "must be merged before being parsed"); block()->mark_parsed(); - ++_blocks_parsed; // Set iterator to start of block. iter().reset_to_bci(block()->start()); CompileLog* log = C->log(); --- 1445,1454 ----
*** 1594,1606 **** if (stopped()) { if (TraceOptoParse) tty->print_cr(", but path is dead and doesn't count"); return; } - // Record that a new block has been merged. - ++_blocks_merged; - // Make a region if we know there are multiple or unpredictable inputs. // (Also, if this is a plain fall-through, we might see another region, // which must not be allowed into this block's map.) if (pnum > PhiNode::Input // Known multiple inputs. || target->is_handler() // These have unpredictable inputs. --- 1594,1603 ----
< prev index next >