Mercurial > hg > truffle
comparison src/share/vm/opto/escape.cpp @ 3754:642c68c75db9
7050280: assert(u->as_Unlock()->is_eliminated()) failed: sanity
Summary: Mark all associated (same box and obj) lock and unlock nodes for elimination if some of them marked already.
Reviewed-by: iveresov, never
author | kvn |
---|---|
date | Sat, 04 Jun 2011 10:36:22 -0700 |
parents | 66b0e2371912 |
children | e69a66a1457b |
comparison
equal
deleted
inserted
replaced
3753:cba7b5c2d53f | 3754:642c68c75db9 |
---|---|
1745 } | 1745 } |
1746 | 1746 |
1747 _collecting = false; | 1747 _collecting = false; |
1748 assert(C->unique() == nodes_size(), "there should be no new ideal nodes during ConnectionGraph build"); | 1748 assert(C->unique() == nodes_size(), "there should be no new ideal nodes during ConnectionGraph build"); |
1749 | 1749 |
1750 if (EliminateLocks) { | |
1751 // Mark locks before changing ideal graph. | |
1752 int cnt = C->macro_count(); | |
1753 for( int i=0; i < cnt; i++ ) { | |
1754 Node *n = C->macro_node(i); | |
1755 if (n->is_AbstractLock()) { // Lock and Unlock nodes | |
1756 AbstractLockNode* alock = n->as_AbstractLock(); | |
1757 if (!alock->is_eliminated()) { | |
1758 PointsToNode::EscapeState es = escape_state(alock->obj_node()); | |
1759 assert(es != PointsToNode::UnknownEscape, "should know"); | |
1760 if (es != PointsToNode::UnknownEscape && es != PointsToNode::GlobalEscape) { | |
1761 // Mark it eliminated | |
1762 alock->set_eliminated(); | |
1763 } | |
1764 } | |
1765 } | |
1766 } | |
1767 } | |
1768 | |
1750 #ifndef PRODUCT | 1769 #ifndef PRODUCT |
1751 if (PrintEscapeAnalysis) { | 1770 if (PrintEscapeAnalysis) { |
1752 dump(); // Dump ConnectionGraph | 1771 dump(); // Dump ConnectionGraph |
1753 } | 1772 } |
1754 #endif | 1773 #endif |