src/share/vm/opto/macro.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 7081933 Cdiff src/share/vm/opto/macro.cpp

src/share/vm/opto/macro.cpp

Print this page

        

*** 1683,1695 **** OptoRuntime::new_instance_Java()); } void PhaseMacroExpand::expand_allocate_array(AllocateArrayNode *alloc) { Node* length = alloc->in(AllocateNode::ALength); expand_allocate_common(alloc, length, OptoRuntime::new_array_Type(), ! OptoRuntime::new_array_Java()); } //-----------------------mark_eliminated_locking_nodes----------------------- // During EA obj may point to several objects but after few ideal graph // transformations (CCP) it may point to only one non escaping object --- 1683,1707 ---- OptoRuntime::new_instance_Java()); } void PhaseMacroExpand::expand_allocate_array(AllocateArrayNode *alloc) { Node* length = alloc->in(AllocateNode::ALength); + InitializeNode* init = alloc->initialization(); + Node* klass_node = alloc->in(AllocateNode::KlassNode); + ciKlass* k = _igvn.type(klass_node)->is_klassptr()->klass(); + address slow_call_address; // Address of slow call + if (init != NULL && init->is_complete_with_arraycopy() && + k->is_type_array_klass()) { + // Don't zero type array during slow allocation in VM since + // it will be initialized later by arraycopy in compiled code. + slow_call_address = OptoRuntime::new_array_nozero_Java(); + } else { + slow_call_address = OptoRuntime::new_array_Java(); + } expand_allocate_common(alloc, length, OptoRuntime::new_array_Type(), ! slow_call_address); } //-----------------------mark_eliminated_locking_nodes----------------------- // During EA obj may point to several objects but after few ideal graph // transformations (CCP) it may point to only one non escaping object
src/share/vm/opto/macro.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File