< prev index next >

src/hotspot/share/opto/macro.cpp

Print this page
*** 390,12 ***
        }
        if (val == mem) {
          values.at_put(j, mem);
        } else if (val->is_Store()) {
          Node* n = val->in(MemNode::ValueIn);
-         BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
-         n = bs->step_over_gc_barrier(n);
          if (is_subword_type(ft)) {
            n = Compile::narrow_value(ft, n, phi_type, &_igvn, true);
          }
          values.at_put(j, n);
        } else if(val->is_Proj() && val->in(0) == alloc) {
--- 390,10 ---

*** 509,14 ***
    if (mem != nullptr) {
      if (mem == start_mem || mem == alloc_mem) {
        // hit a sentinel, return appropriate 0 value
        return _igvn.zerocon(ft);
      } else if (mem->is_Store()) {
!       Node* n = mem->in(MemNode::ValueIn);
-       BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
-       n = bs->step_over_gc_barrier(n);
-       return n;
      } else if (mem->is_Phi()) {
        // attempt to produce a Phi reflecting the values on the input paths of the Phi
        Node_Stack value_phis(8);
        Node* phi = value_from_mem_phi(mem, ft, ftype, adr_t, alloc, &value_phis, ValueSearchLimit);
        if (phi != nullptr) {
--- 507,11 ---
    if (mem != nullptr) {
      if (mem == start_mem || mem == alloc_mem) {
        // hit a sentinel, return appropriate 0 value
        return _igvn.zerocon(ft);
      } else if (mem->is_Store()) {
!       return mem->in(MemNode::ValueIn);
      } else if (mem->is_Phi()) {
        // attempt to produce a Phi reflecting the values on the input paths of the Phi
        Node_Stack value_phis(8);
        Node* phi = value_from_mem_phi(mem, ft, ftype, adr_t, alloc, &value_phis, ValueSearchLimit);
        if (phi != nullptr) {

*** 593,11 ***
            break;
          }
          for (DUIterator_Fast kmax, k = use->fast_outs(kmax);
                                     k < kmax && can_eliminate; k++) {
            Node* n = use->fast_out(k);
!           if (!n->is_Store() && n->Opcode() != Op_CastP2X && !bs->is_gc_pre_barrier_node(n) && !reduce_merge_precheck) {
              DEBUG_ONLY(disq_node = n;)
              if (n->is_Load() || n->is_LoadStore()) {
                NOT_PRODUCT(fail_eliminate = "Field load";)
              } else {
                NOT_PRODUCT(fail_eliminate = "Not store field reference";)
--- 588,11 ---
            break;
          }
          for (DUIterator_Fast kmax, k = use->fast_outs(kmax);
                                     k < kmax && can_eliminate; k++) {
            Node* n = use->fast_out(k);
!           if (!n->is_Store() && n->Opcode() != Op_CastP2X && !reduce_merge_precheck) {
              DEBUG_ONLY(disq_node = n;)
              if (n->is_Load() || n->is_LoadStore()) {
                NOT_PRODUCT(fail_eliminate = "Field load";)
              } else {
                NOT_PRODUCT(fail_eliminate = "Not store field reference";)
< prev index next >