< prev index next >

src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp

Print this page
*** 270,11 ***
    Node* const src = ac->in(ArrayCopyNode::Src);
    const TypeAryPtr* ary_ptr = src->get_ptr_type()->isa_aryptr();
  
    if (ac->is_clone_array() && ary_ptr != NULL) {
      BasicType bt = ary_ptr->elem()->array_element_basic_type();
!     if (is_reference_type(bt)) {
        // Clone object array
        bt = T_OBJECT;
      } else {
        // Clone primitive array
        bt = T_LONG;
--- 270,11 ---
    Node* const src = ac->in(ArrayCopyNode::Src);
    const TypeAryPtr* ary_ptr = src->get_ptr_type()->isa_aryptr();
  
    if (ac->is_clone_array() && ary_ptr != NULL) {
      BasicType bt = ary_ptr->elem()->array_element_basic_type();
!     if (is_reference_type(bt) && (!ary_ptr->is_flat())) {
        // Clone object array
        bt = T_OBJECT;
      } else {
        // Clone primitive array
        bt = T_LONG;

*** 296,11 ***
        assert(src_offset == dest_offset, "should be equal");
        jlong offset = src_offset->get_long();
        if (offset != arrayOopDesc::base_offset_in_bytes(T_OBJECT)) {
          assert(!UseCompressedClassPointers, "should only happen without compressed class pointers");
          assert((arrayOopDesc::base_offset_in_bytes(T_OBJECT) - offset) == BytesPerLong, "unexpected offset");
!         length = phase->transform_later(new SubLNode(length, phase->longcon(1))); // Size is in longs
          src_offset = phase->longcon(arrayOopDesc::base_offset_in_bytes(T_OBJECT));
          dest_offset = src_offset;
        }
      }
      Node* payload_src = phase->basic_plus_adr(src, src_offset);
--- 296,11 ---
        assert(src_offset == dest_offset, "should be equal");
        jlong offset = src_offset->get_long();
        if (offset != arrayOopDesc::base_offset_in_bytes(T_OBJECT)) {
          assert(!UseCompressedClassPointers, "should only happen without compressed class pointers");
          assert((arrayOopDesc::base_offset_in_bytes(T_OBJECT) - offset) == BytesPerLong, "unexpected offset");
!         length = phase->transform_later(new SubXNode(length, phase->longcon(1))); // Size is in longs
          src_offset = phase->longcon(arrayOopDesc::base_offset_in_bytes(T_OBJECT));
          dest_offset = src_offset;
        }
      }
      Node* payload_src = phase->basic_plus_adr(src, src_offset);

*** 341,11 ***
                                             src,
                                             dst,
                                             full_size,
                                             phase->top());
    phase->transform_later(call);
!   phase->igvn().replace_node(ac, call);
  }
  
  #undef XTOP
  
  // == Dominating barrier elision ==
--- 341,11 ---
                                             src,
                                             dst,
                                             full_size,
                                             phase->top());
    phase->transform_later(call);
!   phase->replace_node(ac, call);
  }
  
  #undef XTOP
  
  // == Dominating barrier elision ==
< prev index next >