Mercurial > hg > truffle
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 } |