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 }
|