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