635 #endif |
635 #endif |
636 |
636 |
637 if (failing()) return; |
637 if (failing()) return; |
638 NOT_PRODUCT( verify_graph_edges(); ) |
638 NOT_PRODUCT( verify_graph_edges(); ) |
639 |
639 |
640 // Perform escape analysis |
|
641 if (_do_escape_analysis && ConnectionGraph::has_candidates(this)) { |
|
642 TracePhase t2("escapeAnalysis", &_t_escapeAnalysis, true); |
|
643 // Add ConP#NULL and ConN#NULL nodes before ConnectionGraph construction. |
|
644 PhaseGVN* igvn = initial_gvn(); |
|
645 Node* oop_null = igvn->zerocon(T_OBJECT); |
|
646 Node* noop_null = igvn->zerocon(T_NARROWOOP); |
|
647 |
|
648 _congraph = new(comp_arena()) ConnectionGraph(this); |
|
649 bool has_non_escaping_obj = _congraph->compute_escape(); |
|
650 |
|
651 #ifndef PRODUCT |
|
652 if (PrintEscapeAnalysis) { |
|
653 _congraph->dump(); |
|
654 } |
|
655 #endif |
|
656 // Cleanup. |
|
657 if (oop_null->outcnt() == 0) |
|
658 igvn->hash_delete(oop_null); |
|
659 if (noop_null->outcnt() == 0) |
|
660 igvn->hash_delete(noop_null); |
|
661 |
|
662 if (!has_non_escaping_obj) { |
|
663 _congraph = NULL; |
|
664 } |
|
665 |
|
666 if (failing()) return; |
|
667 } |
|
668 // Now optimize |
640 // Now optimize |
669 Optimize(); |
641 Optimize(); |
670 if (failing()) return; |
642 if (failing()) return; |
671 NOT_PRODUCT( verify_graph_edges(); ) |
643 NOT_PRODUCT( verify_graph_edges(); ) |
672 |
644 |
1598 } |
1570 } |
1599 |
1571 |
1600 print_method("Iter GVN 1", 2); |
1572 print_method("Iter GVN 1", 2); |
1601 |
1573 |
1602 if (failing()) return; |
1574 if (failing()) return; |
|
1575 |
|
1576 // Perform escape analysis |
|
1577 if (_do_escape_analysis && ConnectionGraph::has_candidates(this)) { |
|
1578 TracePhase t2("escapeAnalysis", &_t_escapeAnalysis, true); |
|
1579 ConnectionGraph::do_analysis(this, &igvn); |
|
1580 |
|
1581 if (failing()) return; |
|
1582 |
|
1583 igvn.optimize(); |
|
1584 print_method("Iter GVN 3", 2); |
|
1585 |
|
1586 if (failing()) return; |
|
1587 |
|
1588 } |
1603 |
1589 |
1604 // Loop transforms on the ideal graph. Range Check Elimination, |
1590 // Loop transforms on the ideal graph. Range Check Elimination, |
1605 // peeling, unrolling, etc. |
1591 // peeling, unrolling, etc. |
1606 |
1592 |
1607 // Set loop opts counter |
1593 // Set loop opts counter |