< prev index next >
src/share/vm/opto/phaseX.cpp
Print this page
@@ -1480,10 +1480,21 @@
#endif
_worklist.remove(temp); // this can be necessary
temp->destruct(); // reuse the _idx of this little guy
}
+void PhaseIterGVN::replace_in_uses(Node* n, Node* m) {
+ for (DUIterator_Fast imax, i = n->fast_outs(imax); i < imax; i++) {
+ Node* u = n->fast_out(i);
+ if (u != n) {
+ rehash_node_delayed(u);
+ int nb = u->replace_edge(n, m);
+ --i, imax -= nb;
+ }
+ }
+}
+
//------------------------------add_users_to_worklist--------------------------
void PhaseIterGVN::add_users_to_worklist0( Node *n ) {
for (DUIterator_Fast imax, i = n->fast_outs(imax); i < imax; i++) {
_worklist.push(n->fast_out(i)); // Push on worklist
}
@@ -1625,10 +1636,18 @@
}
if (use_op == Op_Initialize) {
Node* imem = use->as_Initialize()->proj_out(TypeFunc::Memory);
if (imem != NULL) add_users_to_worklist0(imem);
}
+ if (use_op == Op_CastP2X) {
+ for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) {
+ Node* u = use->fast_out(i2);
+ if (u->Opcode() == Op_AndX) {
+ _worklist.push(u);
+ }
+ }
+ }
}
}
/**
* Remove the speculative part of all types that we know of
@@ -1758,10 +1777,18 @@
PhiNode* phi = countedloop_phi_from_cmp((CmpINode*)m, n);
if (phi != NULL) {
worklist.push(phi);
}
}
+ if (m_op == Op_CastP2X) {
+ for (DUIterator_Fast i2max, i2 = m->fast_outs(i2max); i2 < i2max; i2++) {
+ Node* u = m->fast_out(i2);
+ if (u->Opcode() == Op_AndX) {
+ worklist.push(u);
+ }
+ }
+ }
}
}
}
}
< prev index next >