Mercurial > hg > truffle
comparison src/share/vm/opto/escape.cpp @ 4777:e9a5e0a812c8
7125896: Eliminate nested locks
Summary: Nested locks elimination done before lock nodes expansion by looking for outer locks of the same object.
Reviewed-by: never, twisti
author | kvn |
---|---|
date | Sat, 07 Jan 2012 13:26:43 -0800 |
parents | 1dc233a8c7fe |
children | 73df3733f2eb |
comparison
equal
deleted
inserted
replaced
4776:5da7201222d5 | 4777:e9a5e0a812c8 |
---|---|
1840 int cnt = C->macro_count(); | 1840 int cnt = C->macro_count(); |
1841 for( int i=0; i < cnt; i++ ) { | 1841 for( int i=0; i < cnt; i++ ) { |
1842 Node *n = C->macro_node(i); | 1842 Node *n = C->macro_node(i); |
1843 if (n->is_AbstractLock()) { // Lock and Unlock nodes | 1843 if (n->is_AbstractLock()) { // Lock and Unlock nodes |
1844 AbstractLockNode* alock = n->as_AbstractLock(); | 1844 AbstractLockNode* alock = n->as_AbstractLock(); |
1845 if (!alock->is_eliminated() || alock->is_coarsened()) { | 1845 if (!alock->is_non_esc_obj()) { |
1846 PointsToNode::EscapeState es = escape_state(alock->obj_node()); | 1846 PointsToNode::EscapeState es = escape_state(alock->obj_node()); |
1847 assert(es != PointsToNode::UnknownEscape, "should know"); | 1847 assert(es != PointsToNode::UnknownEscape, "should know"); |
1848 if (es != PointsToNode::UnknownEscape && es != PointsToNode::GlobalEscape) { | 1848 if (es != PointsToNode::UnknownEscape && es != PointsToNode::GlobalEscape) { |
1849 if (!alock->is_eliminated()) { | 1849 assert(!alock->is_eliminated() || alock->is_coarsened(), "sanity"); |
1850 // Mark it eliminated to update any counters | 1850 // The lock could be marked eliminated by lock coarsening |
1851 alock->set_eliminated(); | 1851 // code during first IGVN before EA. Replace coarsened flag |
1852 } else { | 1852 // to eliminate all associated locks/unlocks. |
1853 // The lock could be marked eliminated by lock coarsening | 1853 alock->set_non_esc_obj(); |
1854 // code during first IGVN before EA. Clear coarsened flag | |
1855 // to eliminate all associated locks/unlocks and relock | |
1856 // during deoptimization. | |
1857 alock->clear_coarsened(); | |
1858 } | |
1859 } | 1854 } |
1860 } | 1855 } |
1861 } | 1856 } |
1862 } | 1857 } |
1863 } | 1858 } |