1168 if( m == NULL ) { Matcher::soft_match_failure(); return NULL; }
1169
1170 // Copy data from the Ideal SafePoint to the machine version
1171 mcall = m->as_MachCall();
1172
1173 mcall->set_tf( call->tf());
1174 mcall->set_entry_point(call->entry_point());
1175 mcall->set_cnt( call->cnt());
1176
1177 if( mcall->is_MachCallJava() ) {
1178 MachCallJavaNode *mcall_java = mcall->as_MachCallJava();
1179 const CallJavaNode *call_java = call->as_CallJava();
1180 assert(call_java->validate_symbolic_info(), "inconsistent info");
1181 method = call_java->method();
1182 mcall_java->_method = method;
1183 mcall_java->_bci = call_java->_bci;
1184 mcall_java->_optimized_virtual = call_java->is_optimized_virtual();
1185 is_method_handle_invoke = call_java->is_method_handle_invoke();
1186 mcall_java->_method_handle_invoke = is_method_handle_invoke;
1187 mcall_java->_override_symbolic_info = call_java->override_symbolic_info();
1188 if (is_method_handle_invoke) {
1189 C->set_has_method_handle_invokes(true);
1190 }
1191 if( mcall_java->is_MachCallStaticJava() )
1192 mcall_java->as_MachCallStaticJava()->_name =
1193 call_java->as_CallStaticJava()->_name;
1194 if( mcall_java->is_MachCallDynamicJava() )
1195 mcall_java->as_MachCallDynamicJava()->_vtable_index =
1196 call_java->as_CallDynamicJava()->_vtable_index;
1197 }
1198 else if( mcall->is_MachCallRuntime() ) {
1199 mcall->as_MachCallRuntime()->_name = call->as_CallRuntime()->_name;
1200 }
1201 msfpt = mcall;
1202 }
1203 // This is a non-call safepoint
1204 else {
1205 call = NULL;
1206 domain = NULL;
1207 MachNode *mn = match_tree(sfpt);
1208 if (C->failing()) return NULL;
1209 msfpt = mn->as_MachSafePoint();
1210 cnt = TypeFunc::Parms;
1211 }
1212
1213 // Advertise the correct memory effects (for anti-dependence computation).
1214 msfpt->set_adr_type(sfpt->adr_type());
1215
1216 // Allocate a private array of RegMasks. These RegMasks are not shared.
1217 msfpt->_in_rms = NEW_RESOURCE_ARRAY( RegMask, cnt );
1218 // Empty them all.
1219 for (uint i = 0; i < cnt; i++) ::new (&(msfpt->_in_rms[i])) RegMask();
1220
1221 // Do all the pre-defined non-Empty register masks
1222 msfpt->_in_rms[TypeFunc::ReturnAdr] = _return_addr_mask;
1223 msfpt->_in_rms[TypeFunc::FramePtr ] = c_frame_ptr_mask;
1224
1225 // Place first outgoing argument can possibly be put.
1226 OptoReg::Name begin_out_arg_area = OptoReg::add(_new_SP, C->out_preserve_stack_slots());
1227 assert( is_even(begin_out_arg_area), "" );
1228 // Compute max outgoing register number per call site.
1229 OptoReg::Name out_arg_limit_per_call = begin_out_arg_area;
1230 // Calls to C may hammer extra stack slots above and beyond any arguments.
1231 // These are usually backing store for register arguments for varargs.
|
1168 if( m == NULL ) { Matcher::soft_match_failure(); return NULL; }
1169
1170 // Copy data from the Ideal SafePoint to the machine version
1171 mcall = m->as_MachCall();
1172
1173 mcall->set_tf( call->tf());
1174 mcall->set_entry_point(call->entry_point());
1175 mcall->set_cnt( call->cnt());
1176
1177 if( mcall->is_MachCallJava() ) {
1178 MachCallJavaNode *mcall_java = mcall->as_MachCallJava();
1179 const CallJavaNode *call_java = call->as_CallJava();
1180 assert(call_java->validate_symbolic_info(), "inconsistent info");
1181 method = call_java->method();
1182 mcall_java->_method = method;
1183 mcall_java->_bci = call_java->_bci;
1184 mcall_java->_optimized_virtual = call_java->is_optimized_virtual();
1185 is_method_handle_invoke = call_java->is_method_handle_invoke();
1186 mcall_java->_method_handle_invoke = is_method_handle_invoke;
1187 mcall_java->_override_symbolic_info = call_java->override_symbolic_info();
1188 mcall_java->_arg_escape = call_java->arg_escape();
1189 if (is_method_handle_invoke) {
1190 C->set_has_method_handle_invokes(true);
1191 }
1192 if( mcall_java->is_MachCallStaticJava() )
1193 mcall_java->as_MachCallStaticJava()->_name =
1194 call_java->as_CallStaticJava()->_name;
1195 if( mcall_java->is_MachCallDynamicJava() )
1196 mcall_java->as_MachCallDynamicJava()->_vtable_index =
1197 call_java->as_CallDynamicJava()->_vtable_index;
1198 }
1199 else if( mcall->is_MachCallRuntime() ) {
1200 mcall->as_MachCallRuntime()->_name = call->as_CallRuntime()->_name;
1201 }
1202 msfpt = mcall;
1203 }
1204 // This is a non-call safepoint
1205 else {
1206 call = NULL;
1207 domain = NULL;
1208 MachNode *mn = match_tree(sfpt);
1209 if (C->failing()) return NULL;
1210 msfpt = mn->as_MachSafePoint();
1211 cnt = TypeFunc::Parms;
1212 }
1213 msfpt->_not_global_escape_in_scope = sfpt->not_global_escape_in_scope();
1214
1215 // Advertise the correct memory effects (for anti-dependence computation).
1216 msfpt->set_adr_type(sfpt->adr_type());
1217
1218 // Allocate a private array of RegMasks. These RegMasks are not shared.
1219 msfpt->_in_rms = NEW_RESOURCE_ARRAY( RegMask, cnt );
1220 // Empty them all.
1221 for (uint i = 0; i < cnt; i++) ::new (&(msfpt->_in_rms[i])) RegMask();
1222
1223 // Do all the pre-defined non-Empty register masks
1224 msfpt->_in_rms[TypeFunc::ReturnAdr] = _return_addr_mask;
1225 msfpt->_in_rms[TypeFunc::FramePtr ] = c_frame_ptr_mask;
1226
1227 // Place first outgoing argument can possibly be put.
1228 OptoReg::Name begin_out_arg_area = OptoReg::add(_new_SP, C->out_preserve_stack_slots());
1229 assert( is_even(begin_out_arg_area), "" );
1230 // Compute max outgoing register number per call site.
1231 OptoReg::Name out_arg_limit_per_call = begin_out_arg_area;
1232 // Calls to C may hammer extra stack slots above and beyond any arguments.
1233 // These are usually backing store for register arguments for varargs.
|