Mercurial > hg > truffle
diff 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 |
line wrap: on
line diff
--- a/src/share/vm/opto/escape.cpp Fri Jun 03 22:31:43 2011 -0700 +++ b/src/share/vm/opto/escape.cpp Sat Jun 04 10:36:22 2011 -0700 @@ -1747,6 +1747,25 @@ _collecting = false; assert(C->unique() == nodes_size(), "there should be no new ideal nodes during ConnectionGraph build"); + if (EliminateLocks) { + // Mark locks before changing ideal graph. + int cnt = C->macro_count(); + for( int i=0; i < cnt; i++ ) { + Node *n = C->macro_node(i); + if (n->is_AbstractLock()) { // Lock and Unlock nodes + AbstractLockNode* alock = n->as_AbstractLock(); + if (!alock->is_eliminated()) { + PointsToNode::EscapeState es = escape_state(alock->obj_node()); + assert(es != PointsToNode::UnknownEscape, "should know"); + if (es != PointsToNode::UnknownEscape && es != PointsToNode::GlobalEscape) { + // Mark it eliminated + alock->set_eliminated(); + } + } + } + } + } + #ifndef PRODUCT if (PrintEscapeAnalysis) { dump(); // Dump ConnectionGraph