< prev index next >

src/hotspot/share/opto/macroArrayCopy.cpp

Print this page




1013                                                         Node* src,  Node* src_offset,
1014                                                         Node* dest, Node* dest_offset,
1015                                                         Node* copy_length, bool dest_uninitialized) {
1016   assert(!dest_uninitialized, "Invariant");
1017 
1018   const TypeFunc* call_type = OptoRuntime::slow_arraycopy_Type();
1019   CallNode* call = new CallStaticJavaNode(call_type, OptoRuntime::slow_arraycopy_Java(),
1020                                           "slow_arraycopy",
1021                                           ac->jvms()->bci(), TypePtr::BOTTOM);
1022 
1023   call->init_req(TypeFunc::Control, *ctrl);
1024   call->init_req(TypeFunc::I_O    , *io);
1025   call->init_req(TypeFunc::Memory , mem);
1026   call->init_req(TypeFunc::ReturnAdr, top());
1027   call->init_req(TypeFunc::FramePtr, top());
1028   call->init_req(TypeFunc::Parms+0, src);
1029   call->init_req(TypeFunc::Parms+1, src_offset);
1030   call->init_req(TypeFunc::Parms+2, dest);
1031   call->init_req(TypeFunc::Parms+3, dest_offset);
1032   call->init_req(TypeFunc::Parms+4, copy_length);
1033   copy_call_debug_info(ac, call);
1034 
1035   call->set_cnt(PROB_UNLIKELY_MAG(4));  // Same effect as RC_UNCOMMON.
1036   _igvn.replace_node(ac, call);
1037   transform_later(call);
1038 
1039   extract_call_projections(call);
1040   *ctrl = _fallthroughcatchproj->clone();
1041   transform_later(*ctrl);
1042 
1043   Node* m = _memproj_fallthrough->clone();
1044   transform_later(m);
1045 
1046   uint alias_idx = C->get_alias_index(adr_type);
1047   MergeMemNode* out_mem;
1048   if (alias_idx != Compile::AliasIdxBot) {
1049     out_mem = MergeMemNode::make(mem);
1050     out_mem->set_memory_at(alias_idx, m);
1051   } else {
1052     out_mem = MergeMemNode::make(m);
1053   }




1013                                                         Node* src,  Node* src_offset,
1014                                                         Node* dest, Node* dest_offset,
1015                                                         Node* copy_length, bool dest_uninitialized) {
1016   assert(!dest_uninitialized, "Invariant");
1017 
1018   const TypeFunc* call_type = OptoRuntime::slow_arraycopy_Type();
1019   CallNode* call = new CallStaticJavaNode(call_type, OptoRuntime::slow_arraycopy_Java(),
1020                                           "slow_arraycopy",
1021                                           ac->jvms()->bci(), TypePtr::BOTTOM);
1022 
1023   call->init_req(TypeFunc::Control, *ctrl);
1024   call->init_req(TypeFunc::I_O    , *io);
1025   call->init_req(TypeFunc::Memory , mem);
1026   call->init_req(TypeFunc::ReturnAdr, top());
1027   call->init_req(TypeFunc::FramePtr, top());
1028   call->init_req(TypeFunc::Parms+0, src);
1029   call->init_req(TypeFunc::Parms+1, src_offset);
1030   call->init_req(TypeFunc::Parms+2, dest);
1031   call->init_req(TypeFunc::Parms+3, dest_offset);
1032   call->init_req(TypeFunc::Parms+4, copy_length);
1033   call->copy_call_debug_info(&_igvn, ac);
1034 
1035   call->set_cnt(PROB_UNLIKELY_MAG(4));  // Same effect as RC_UNCOMMON.
1036   _igvn.replace_node(ac, call);
1037   transform_later(call);
1038 
1039   extract_call_projections(call);
1040   *ctrl = _fallthroughcatchproj->clone();
1041   transform_later(*ctrl);
1042 
1043   Node* m = _memproj_fallthrough->clone();
1044   transform_later(m);
1045 
1046   uint alias_idx = C->get_alias_index(adr_type);
1047   MergeMemNode* out_mem;
1048   if (alias_idx != Compile::AliasIdxBot) {
1049     out_mem = MergeMemNode::make(mem);
1050     out_mem->set_memory_at(alias_idx, m);
1051   } else {
1052     out_mem = MergeMemNode::make(m);
1053   }


< prev index next >