< 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 >