comparison src/share/vm/opto/escape.cpp @ 4115:1bd45abaa507

6890673: Eliminate allocations immediately after EA Summary: Try to eliminate allocations and related locks immediately after escape analysis. Reviewed-by: never
author kvn
date Wed, 16 Nov 2011 09:13:57 -0800
parents 8c57262447d3
children cc81b9c09bbb
comparison
equal deleted inserted replaced
4114:6729bbc1fcd6 4115:1bd45abaa507
1770 int cnt = C->macro_count(); 1770 int cnt = C->macro_count();
1771 for( int i=0; i < cnt; i++ ) { 1771 for( int i=0; i < cnt; i++ ) {
1772 Node *n = C->macro_node(i); 1772 Node *n = C->macro_node(i);
1773 if (n->is_AbstractLock()) { // Lock and Unlock nodes 1773 if (n->is_AbstractLock()) { // Lock and Unlock nodes
1774 AbstractLockNode* alock = n->as_AbstractLock(); 1774 AbstractLockNode* alock = n->as_AbstractLock();
1775 if (!alock->is_eliminated()) { 1775 if (!alock->is_eliminated() || alock->is_coarsened()) {
1776 PointsToNode::EscapeState es = escape_state(alock->obj_node()); 1776 PointsToNode::EscapeState es = escape_state(alock->obj_node());
1777 assert(es != PointsToNode::UnknownEscape, "should know"); 1777 assert(es != PointsToNode::UnknownEscape, "should know");
1778 if (es != PointsToNode::UnknownEscape && es != PointsToNode::GlobalEscape) { 1778 if (es != PointsToNode::UnknownEscape && es != PointsToNode::GlobalEscape) {
1779 // Mark it eliminated 1779 if (!alock->is_eliminated()) {
1780 alock->set_eliminated(); 1780 // Mark it eliminated to update any counters
1781 alock->set_eliminated();
1782 } else {
1783 // The lock could be marked eliminated by lock coarsening
1784 // code during first IGVN before EA. Clear coarsened flag
1785 // to eliminate all associated locks/unlocks and relock
1786 // during deoptimization.
1787 alock->clear_coarsened();
1788 }
1781 } 1789 }
1782 } 1790 }
1783 } 1791 }
1784 } 1792 }
1785 } 1793 }