diff -r 3c768dca60f5 -r fd87432a895b hotspot/src/share/vm/opto/cfgnode.cpp --- a/hotspot/src/share/vm/opto/cfgnode.cpp Sat Jan 07 13:26:43 2012 -0800 +++ b/hotspot/src/share/vm/opto/cfgnode.cpp Tue Jan 10 18:05:38 2012 -0800 @@ -1597,7 +1597,7 @@ bool is_loop = (r->is_Loop() && r->req() == 3); // Then, check if there is a data loop when phi references itself directly // or through other data nodes. - if (is_loop && !phase->eqv_uncast(uin, in(LoopNode::EntryControl)) || + if (is_loop && !uin->eqv_uncast(in(LoopNode::EntryControl)) || !is_loop && is_unsafe_data_reference(uin)) { // Break this data loop to avoid creation of a dead loop. if (can_reshape) {