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 } |