--- old/src/share/vm/opto/loopnode.cpp 2015-10-14 13:54:20.248743660 +0200 +++ new/src/share/vm/opto/loopnode.cpp 2015-10-14 13:54:20.155745909 +0200 @@ -3089,7 +3089,7 @@ ++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?" ); @@ -3274,7 +3274,7 @@ } } 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); } @@ -3495,6 +3495,8 @@ case Op_StrEquals: case Op_StrIndexOf: case Op_AryEq: + case Op_ShenandoahReadBarrier: + case Op_ShenandoahWriteBarrier: pinned = false; } if( pinned ) {