< prev index next >

src/hotspot/share/opto/macroArrayCopy.cpp

Print this page




 534         // (At this point we can assume disjoint_bases, since types differ.)
 535         int ek_offset = in_bytes(ObjArrayKlass::element_klass_offset());
 536         Node* p1 = basic_plus_adr(dest_klass, ek_offset);
 537         Node* n1 = LoadKlassNode::make(_igvn, NULL, C->immutable_memory(), p1, TypeRawPtr::BOTTOM);
 538         Node* dest_elem_klass = transform_later(n1);
 539         Node* cv = generate_checkcast_arraycopy(&local_ctrl, &local_mem,
 540                                                 adr_type,
 541                                                 dest_elem_klass,
 542                                                 src, src_offset, dest, dest_offset,
 543                                                 ConvI2X(copy_length), dest_uninitialized);
 544         if (cv == NULL)  cv = intcon(-1);  // failure (no stub available)
 545         checked_control = local_ctrl;
 546         checked_i_o     = *io;
 547         checked_mem     = local_mem->memory_at(alias_idx);
 548         checked_value   = cv;
 549       }
 550     }
 551     // At this point we know we do not need type checks on oop stores.
 552 
 553     // Let's see if we need card marks:
 554     if (alloc != NULL && GraphKit::use_ReduceInitialCardMarks() && !UseLoadBarrier) {
 555       // If we do not need card marks, copy using the jint or jlong stub.
 556       copy_type = LP64_ONLY(UseCompressedOops ? T_INT : T_LONG) NOT_LP64(T_INT);
 557       assert(type2aelembytes(basic_elem_type) == type2aelembytes(copy_type),
 558              "sizes agree");
 559     }
 560   }
 561 
 562   if (!(*ctrl)->is_top()) {
 563     // Generate the fast path, if possible.
 564     Node* local_ctrl = *ctrl;
 565     MergeMemNode* local_mem = MergeMemNode::make(mem);
 566     transform_later(local_mem);
 567 
 568     generate_unchecked_arraycopy(&local_ctrl, &local_mem,
 569                                  adr_type, copy_type, disjoint_bases,
 570                                  src, src_offset, dest, dest_offset,
 571                                  ConvI2X(copy_length), dest_uninitialized);
 572 
 573     // Present the results of the fast call.
 574     result_region->init_req(fast_path, local_ctrl);




 534         // (At this point we can assume disjoint_bases, since types differ.)
 535         int ek_offset = in_bytes(ObjArrayKlass::element_klass_offset());
 536         Node* p1 = basic_plus_adr(dest_klass, ek_offset);
 537         Node* n1 = LoadKlassNode::make(_igvn, NULL, C->immutable_memory(), p1, TypeRawPtr::BOTTOM);
 538         Node* dest_elem_klass = transform_later(n1);
 539         Node* cv = generate_checkcast_arraycopy(&local_ctrl, &local_mem,
 540                                                 adr_type,
 541                                                 dest_elem_klass,
 542                                                 src, src_offset, dest, dest_offset,
 543                                                 ConvI2X(copy_length), dest_uninitialized);
 544         if (cv == NULL)  cv = intcon(-1);  // failure (no stub available)
 545         checked_control = local_ctrl;
 546         checked_i_o     = *io;
 547         checked_mem     = local_mem->memory_at(alias_idx);
 548         checked_value   = cv;
 549       }
 550     }
 551     // At this point we know we do not need type checks on oop stores.
 552 
 553     // Let's see if we need card marks:
 554     if (alloc != NULL && GraphKit::use_ReduceInitialCardMarks() && !UseZGC) {
 555       // If we do not need card marks, copy using the jint or jlong stub.
 556       copy_type = LP64_ONLY(UseCompressedOops ? T_INT : T_LONG) NOT_LP64(T_INT);
 557       assert(type2aelembytes(basic_elem_type) == type2aelembytes(copy_type),
 558              "sizes agree");
 559     }
 560   }
 561 
 562   if (!(*ctrl)->is_top()) {
 563     // Generate the fast path, if possible.
 564     Node* local_ctrl = *ctrl;
 565     MergeMemNode* local_mem = MergeMemNode::make(mem);
 566     transform_later(local_mem);
 567 
 568     generate_unchecked_arraycopy(&local_ctrl, &local_mem,
 569                                  adr_type, copy_type, disjoint_bases,
 570                                  src, src_offset, dest, dest_offset,
 571                                  ConvI2X(copy_length), dest_uninitialized);
 572 
 573     // Present the results of the fast call.
 574     result_region->init_req(fast_path, local_ctrl);


< prev index next >