--- a/hotspot/src/share/vm/opto/phaseX.cpp Fri Feb 22 10:12:00 2013 -0800
+++ b/hotspot/src/share/vm/opto/phaseX.cpp Mon Feb 25 14:13:04 2013 +0100
@@ -1197,6 +1197,18 @@
assert(!(i < imax), "sanity");
}
}
+ if (ReduceFieldZeroing && dead->is_Load() && i == MemNode::Memory &&
+ in->is_Proj() && in->in(0) != NULL && in->in(0)->is_Initialize()) {
+ // A Load that directly follows an InitializeNode is
+ // going away. The Stores that follow are candidates
+ // again to be captured by the InitializeNode.
+ for (DUIterator_Fast jmax, j = in->fast_outs(jmax); j < jmax; j++) {
+ Node *n = in->fast_out(j);
+ if (n->is_Store()) {
+ _worklist.push(n);
+ }
+ }
+ }
}
}
C->record_dead_node(dead->_idx);