1.1 --- a/src/share/vm/opto/addnode.cpp Mon Dec 17 11:00:22 2012 -0800 1.2 +++ b/src/share/vm/opto/addnode.cpp Tue Dec 18 14:55:25 2012 +0100 1.3 @@ -189,6 +189,11 @@ 1.4 set_req(1, addx); 1.5 set_req(2, a22); 1.6 progress = this; 1.7 + PhaseIterGVN *igvn = phase->is_IterGVN(); 1.8 + if (add2->outcnt() == 0 && igvn) { 1.9 + // add disconnected. 1.10 + igvn->_worklist.push(add2); 1.11 + } 1.12 } 1.13 } 1.14 1.15 @@ -624,6 +629,11 @@ 1.16 if( t22->singleton() && (t22 != Type::TOP) ) { // Right input is an add of a constant? 1.17 set_req(Address, phase->transform(new (phase->C) AddPNode(in(Base),in(Address),add->in(1)))); 1.18 set_req(Offset, add->in(2)); 1.19 + PhaseIterGVN *igvn = phase->is_IterGVN(); 1.20 + if (add->outcnt() == 0 && igvn) { 1.21 + // add disconnected. 1.22 + igvn->_worklist.push((Node*)add); 1.23 + } 1.24 return this; // Made progress 1.25 } 1.26 }