diff -r 0715d5166641 -r c046f8e9c52b hotspot/src/share/vm/opto/cfgnode.cpp --- a/hotspot/src/share/vm/opto/cfgnode.cpp Mon Jun 28 10:52:50 2010 -0700 +++ b/hotspot/src/share/vm/opto/cfgnode.cpp Mon Jun 28 14:54:39 2010 -0700 @@ -472,9 +472,7 @@ assert( n->req() == 2 && n->in(1) != NULL, "Only one data input expected" ); // Break dead loop data path. // Eagerly replace phis with top to avoid phis copies generation. - igvn->add_users_to_worklist(n); - igvn->hash_delete(n); // Yank from hash before hacking edges - igvn->subsume_node(n, top); + igvn->replace_node(n, top); if( max != outcnt() ) { progress = true; j = refresh_out_pos(j); @@ -518,18 +516,17 @@ igvn->hash_delete(n); // Remove from worklist before modifying edges if( n->is_Phi() ) { // Collapse all Phis // Eagerly replace phis to avoid copies generation. - igvn->add_users_to_worklist(n); - igvn->hash_delete(n); // Yank from hash before hacking edges + Node* in; if( cnt == 0 ) { assert( n->req() == 1, "No data inputs expected" ); - igvn->subsume_node(n, parent_ctrl); // replaced by top + in = parent_ctrl; // replaced by top } else { assert( n->req() == 2 && n->in(1) != NULL, "Only one data input expected" ); - Node* in1 = n->in(1); // replaced by unique input - if( n->as_Phi()->is_unsafe_data_reference(in1) ) - in1 = phase->C->top(); // replaced by top - igvn->subsume_node(n, in1); + in = n->in(1); // replaced by unique input + if( n->as_Phi()->is_unsafe_data_reference(in) ) + in = phase->C->top(); // replaced by top } + igvn->replace_node(n, in); } else if( n->is_Region() ) { // Update all incoming edges assert( !igvn->eqv(n, this), "Must be removed from DefUse edges"); @@ -2127,7 +2124,7 @@ // if it's not there, there's nothing to do. Node* fallthru = proj_out(0); if (fallthru != NULL) { - phase->is_IterGVN()->subsume_node(fallthru, in(0)); + phase->is_IterGVN()->replace_node(fallthru, in(0)); } return phase->C->top(); }