RFR: Backport reshaped write barrier expansion to JDK11

Roland Westrelin rwestrel at redhat.com
Thu Dec 13 10:10:47 UTC 2018


> http://cr.openjdk.java.net/~rkennke/shjdk11-wb-expansion/webrev.00/

Code you remove from ifnode.cpp is now done in
ShenandoahBarrierSetC2::ideal_node():

  } else if (can_reshape &&
             n->Opcode() == Op_If &&
             ShenandoahWriteBarrierNode::is_heap_stable_test(n) &&
             n->in(0) != NULL) {
    Node* dom = n->in(0);
    Node* prev_dom = n;
    int op = n->Opcode();
    int dist = 16;
    // Search up the dominator tree for another heap stable test
    while (dom->Opcode() != op    ||  // Not same opcode?
           !ShenandoahWriteBarrierNode::is_heap_stable_test(dom) ||  // Not same input 1?
           prev_dom->in(0) != dom) {  // One path of test does not dominate?
      if (dist < 0) return NULL;

      dist--;
      prev_dom = dom;
      dom = IfNode::up_one_dom(dom);
      if (!dom) return NULL;
    }

    // Check that we did not follow a loop back to ourselves
    if (n == dom) {
      return NULL;
    }

    return n->as_If()->dominated_by(prev_dom, phase->is_IterGVN());
  }

The rest looks ok AFAICT.

Roland.


More information about the shenandoah-dev mailing list