< prev index next >
src/share/vm/opto/loopnode.cpp
Print this page
@@ -3087,11 +3087,11 @@
while (i < cnt) {
Node *in = n->in(i);
++i;
if (in == NULL) continue;
if (in->pinned() && !in->is_CFG())
- set_ctrl(in, in->in(0));
+ set_ctrl(in, in->Opcode() == Op_ShenandoahWBMemProj ? in->in(0)->in(0) : in->in(0));
int is_visited = visited.test_set( in->_idx );
if (!has_node(in)) { // No controlling input yet?
assert( !in->is_CFG(), "CFG Node with no controlling input?" );
assert( !is_visited, "visit only once" );
nstack.push(n, i); // Save parent node and next input's index.
@@ -3272,11 +3272,11 @@
Node* s1 = s->fast_out(i);
worklist.push(s1);
}
} else {
Node *sctrl = has_ctrl(s) ? get_ctrl(s) : s->in(0);
- assert(sctrl != NULL || s->outcnt() == 0, "must have control");
+ assert(sctrl != NULL || s->outcnt() == 0 || s->is_ShenandoahBarrier(), "must have control");
if (sctrl != NULL && !sctrl->is_top() && is_dominator(early, sctrl)) {
LCA = dom_lca_for_get_late_ctrl(LCA, sctrl, n);
}
}
}
@@ -3493,10 +3493,12 @@
case Op_LoadL_unaligned:
case Op_StrComp: // Does a bunch of load-like effects
case Op_StrEquals:
case Op_StrIndexOf:
case Op_AryEq:
+ case Op_ShenandoahReadBarrier:
+ case Op_ShenandoahWriteBarrier:
pinned = false;
}
if( pinned ) {
IdealLoopTree *chosen_loop = get_loop(n->is_CFG() ? n : get_ctrl(n));
if( !chosen_loop->_child ) // Inner loop?
< prev index next >