1.1 --- a/src/share/vm/opto/node.cpp Tue Nov 27 12:48:52 2012 -0800 1.2 +++ b/src/share/vm/opto/node.cpp Tue Nov 27 17:24:15 2012 -0800 1.3 @@ -57,7 +57,7 @@ 1.4 int new_debug_idx = old_debug_idx+1; 1.5 if (new_debug_idx > 0) { 1.6 // Arrange that the lowest five decimal digits of _debug_idx 1.7 - // will repeat thos of _idx. In case this is somehow pathological, 1.8 + // will repeat those of _idx. In case this is somehow pathological, 1.9 // we continue to assign negative numbers (!) consecutively. 1.10 const int mod = 100000; 1.11 int bump = (int)(_idx - new_debug_idx) % mod; 1.12 @@ -67,7 +67,7 @@ 1.13 } 1.14 Compile::set_debug_idx(new_debug_idx); 1.15 set_debug_idx( new_debug_idx ); 1.16 - assert(Compile::current()->unique() < (uint)MaxNodeLimit, "Node limit exceeded"); 1.17 + assert(Compile::current()->unique() < (UINT_MAX - 1), "Node limit exceeded UINT_MAX"); 1.18 if (BreakAtNode != 0 && (_debug_idx == BreakAtNode || (int)_idx == BreakAtNode)) { 1.19 tty->print_cr("BreakAtNode: _idx=%d _debug_idx=%d", _idx, _debug_idx); 1.20 BREAKPOINT; 1.21 @@ -802,7 +802,7 @@ 1.22 //-------------------------disconnect_inputs----------------------------------- 1.23 // NULL out all inputs to eliminate incoming Def-Use edges. 1.24 // Return the number of edges between 'n' and 'this' 1.25 -int Node::disconnect_inputs(Node *n) { 1.26 +int Node::disconnect_inputs(Node *n, Compile* C) { 1.27 int edges_to_n = 0; 1.28 1.29 uint cnt = req(); 1.30 @@ -824,6 +824,9 @@ 1.31 1.32 // Node::destruct requires all out edges be deleted first 1.33 // debug_only(destruct();) // no reuse benefit expected 1.34 + if (edges_to_n == 0) { 1.35 + C->record_dead_node(_idx); 1.36 + } 1.37 return edges_to_n; 1.38 } 1.39