583 NOT_PRODUCT( verify_graph_edges(); ) |
583 NOT_PRODUCT( verify_graph_edges(); ) |
584 |
584 |
585 // Perform escape analysis |
585 // Perform escape analysis |
586 if (_do_escape_analysis && ConnectionGraph::has_candidates(this)) { |
586 if (_do_escape_analysis && ConnectionGraph::has_candidates(this)) { |
587 TracePhase t2("escapeAnalysis", &_t_escapeAnalysis, true); |
587 TracePhase t2("escapeAnalysis", &_t_escapeAnalysis, true); |
|
588 // Add ConP#NULL and ConN#NULL nodes before ConnectionGraph construction. |
|
589 PhaseGVN* igvn = initial_gvn(); |
|
590 Node* oop_null = igvn->zerocon(T_OBJECT); |
|
591 Node* noop_null = igvn->zerocon(T_NARROWOOP); |
588 |
592 |
589 _congraph = new(comp_arena()) ConnectionGraph(this); |
593 _congraph = new(comp_arena()) ConnectionGraph(this); |
590 bool has_non_escaping_obj = _congraph->compute_escape(); |
594 bool has_non_escaping_obj = _congraph->compute_escape(); |
591 |
595 |
592 #ifndef PRODUCT |
596 #ifndef PRODUCT |
593 if (PrintEscapeAnalysis) { |
597 if (PrintEscapeAnalysis) { |
594 _congraph->dump(); |
598 _congraph->dump(); |
595 } |
599 } |
596 #endif |
600 #endif |
|
601 // Cleanup. |
|
602 if (oop_null->outcnt() == 0) |
|
603 igvn->hash_delete(oop_null); |
|
604 if (noop_null->outcnt() == 0) |
|
605 igvn->hash_delete(noop_null); |
|
606 |
597 if (!has_non_escaping_obj) { |
607 if (!has_non_escaping_obj) { |
598 _congraph = NULL; |
608 _congraph = NULL; |
599 } |
609 } |
600 |
610 |
601 if (failing()) return; |
611 if (failing()) return; |