< prev index next >

src/hotspot/share/opto/matcher.cpp

Print this page
rev 56101 : 8227745: Enable Escape Analysis for better performance when debugging
Reviewed-by: ???


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.


< prev index next >