src/share/vm/opto/compile.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/opto/compile.cpp

src/share/vm/opto/compile.cpp

Print this page
rev 6447 : 8026796: Make replace_in_map() on parent maps generic
Summary: propagate node replacements along control flow edges to callers
Reviewed-by:

*** 390,399 **** --- 390,404 ---- // Disconnect all useless nodes by disconnecting those at the boundary. void Compile::remove_useless_nodes(Unique_Node_List &useful) { uint next = 0; while (next < useful.size()) { Node *n = useful.at(next++); + if (n->is_SafePoint()) { + // We're done with a parsing phase. Replaced nodes are not valid + // beyond that point. + n->as_SafePoint()->delete_replaced_nodes(); + } // Use raw traversal of out edges since this code removes out edges int max = n->outcnt(); for (int j = 0; j < max; ++j) { Node* child = n->raw_out(j); if (! useful.member(child)) {
*** 670,680 **** _inlining_progress(false), _inlining_incrementally(false), _print_inlining_list(NULL), _print_inlining_stream(NULL), _print_inlining_idx(0), - _preserve_jvm_state(0), _interpreter_frame_size(0) { C = this; CompileWrapper cw(this); #ifndef PRODUCT --- 675,684 ----
*** 780,790 **** if (cg == NULL) { record_method_not_compilable_all_tiers("cannot parse method"); return; } JVMState* jvms = build_start_state(start(), tf()); ! if ((jvms = cg->generate(jvms, NULL)) == NULL) { record_method_not_compilable("method parse failed"); return; } GraphKit kit(jvms); --- 784,794 ---- if (cg == NULL) { record_method_not_compilable_all_tiers("cannot parse method"); return; } JVMState* jvms = build_start_state(start(), tf()); ! if ((jvms = cg->generate(jvms)) == NULL) { record_method_not_compilable("method parse failed"); return; } GraphKit kit(jvms);
*** 976,986 **** _inlining_progress(false), _inlining_incrementally(false), _print_inlining_list(NULL), _print_inlining_stream(NULL), _print_inlining_idx(0), - _preserve_jvm_state(0), _allowed_reasons(0), _interpreter_frame_size(0) { C = this; #ifndef PRODUCT --- 980,989 ----
*** 1910,1919 **** --- 1913,1924 ---- assert( igvn._worklist.size() == 0, "should be done with igvn" ); for_igvn()->clear(); gvn->replace_with(&igvn); + _late_inlines_pos = _late_inlines.length(); + while (_boxing_late_inlines.length() > 0) { CallGenerator* cg = _boxing_late_inlines.pop(); cg->do_late_inline(); if (failing()) return; }
*** 1973,1984 **** while(inlining_progress() && _late_inlines.length() > 0) { if (live_nodes() > (uint)LiveNodeCountInliningCutoff) { if (low_live_nodes < (uint)LiveNodeCountInliningCutoff * 8 / 10) { // PhaseIdealLoop is expensive so we only try it once we are ! // out of loop and we only try it again if the previous helped ! // got the number of nodes down significantly PhaseIdealLoop ideal_loop( igvn, false, true ); if (failing()) return; low_live_nodes = live_nodes(); _major_progress = true; } --- 1978,1989 ---- while(inlining_progress() && _late_inlines.length() > 0) { if (live_nodes() > (uint)LiveNodeCountInliningCutoff) { if (low_live_nodes < (uint)LiveNodeCountInliningCutoff * 8 / 10) { // PhaseIdealLoop is expensive so we only try it once we are ! // out of live nodes and we only try it again if the previous ! // helped got the number of nodes down significantly PhaseIdealLoop ideal_loop( igvn, false, true ); if (failing()) return; low_live_nodes = live_nodes(); _major_progress = true; }
*** 2068,2077 **** --- 2073,2086 ---- if (eliminate_boxing()) { NOT_PRODUCT( TracePhase t2("incrementalInline", &_t_incrInline, TimeCompiler); ) // Inline valueOf() methods now. inline_boxing_calls(igvn); + if (AlwaysIncrementalInline) { + inline_incrementally(igvn); + } + print_method(PHASE_INCREMENTAL_BOXING_INLINE, 2); if (failing()) return; }
src/share/vm/opto/compile.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File