< prev index next >

src/hotspot/share/opto/arraycopynode.cpp

Print this page

        

*** 583,592 **** --- 583,603 ---- if (count < 0 || count > ArrayCopyLoadStoreMaxElem) { return NULL; } + Node* src = in(ArrayCopyNode::Src); + Node* dest = in(ArrayCopyNode::Dest); + const Type* src_type = phase->type(src); + const Type* dest_type = phase->type(dest); + + if (src_type->isa_aryptr() && dest_type->isa_instptr()) { + // clone used for load of unknown value type can't be optimized at + // this point + return NULL; + } + Node* mem = try_clone_instance(phase, can_reshape, count); if (mem != NULL) { return (mem == NodeSentinel) ? NULL : mem; }
*** 620,631 **** } new_map->set_control(in(TypeFunc::Control)); new_map->set_memory(MergeMemNode::make(in(TypeFunc::Memory))); new_map->set_i_o(in(TypeFunc::I_O)); - Node* src = in(ArrayCopyNode::Src); - Node* dest = in(ArrayCopyNode::Dest); const TypeAryPtr* atp_src = get_address_type(phase, src); const TypeAryPtr* atp_dest = get_address_type(phase, dest); uint alias_idx_src = phase->C->get_alias_index(atp_src); uint alias_idx_dest = phase->C->get_alias_index(atp_dest); --- 631,640 ----
< prev index next >