< prev index next >

src/hotspot/share/opto/matcher.cpp

Print this page

        

*** 1149,1176 **** // Split out case for SafePoint vs Call CallNode *call; const TypeTuple *domain; ciMethod* method = NULL; bool is_method_handle_invoke = false; // for special kill effects ! if( sfpt->is_Call() ) { call = sfpt->as_Call(); domain = call->tf()->domain(); cnt = domain->cnt(); // Match just the call, nothing else MachNode *m = match_tree(call); if (C->failing()) return NULL; ! if( m == NULL ) { Matcher::soft_match_failure(); return NULL; } // Copy data from the Ideal SafePoint to the machine version mcall = m->as_MachCall(); mcall->set_tf( call->tf()); mcall->set_entry_point(call->entry_point()); mcall->set_cnt( call->cnt()); ! if( mcall->is_MachCallJava() ) { MachCallJavaNode *mcall_java = mcall->as_MachCallJava(); const CallJavaNode *call_java = call->as_CallJava(); method = call_java->method(); mcall_java->_method = method; mcall_java->_bci = call_java->_bci; --- 1149,1176 ---- // Split out case for SafePoint vs Call CallNode *call; const TypeTuple *domain; ciMethod* method = NULL; bool is_method_handle_invoke = false; // for special kill effects ! if (sfpt->is_Call()) { call = sfpt->as_Call(); domain = call->tf()->domain(); cnt = domain->cnt(); // Match just the call, nothing else MachNode *m = match_tree(call); if (C->failing()) return NULL; ! if (m == NULL) { Matcher::soft_match_failure(); return NULL; } // Copy data from the Ideal SafePoint to the machine version mcall = m->as_MachCall(); mcall->set_tf( call->tf()); mcall->set_entry_point(call->entry_point()); mcall->set_cnt( call->cnt()); ! if (mcall->is_MachCallJava()) { MachCallJavaNode *mcall_java = mcall->as_MachCallJava(); const CallJavaNode *call_java = call->as_CallJava(); method = call_java->method(); mcall_java->_method = method; mcall_java->_bci = call_java->_bci;
*** 1179,1197 **** mcall_java->_method_handle_invoke = is_method_handle_invoke; mcall_java->_override_symbolic_info = call_java->override_symbolic_info(); if (is_method_handle_invoke) { C->set_has_method_handle_invokes(true); } ! if( mcall_java->is_MachCallStaticJava() ) mcall_java->as_MachCallStaticJava()->_name = call_java->as_CallStaticJava()->_name; ! if( mcall_java->is_MachCallDynamicJava() ) mcall_java->as_MachCallDynamicJava()->_vtable_index = call_java->as_CallDynamicJava()->_vtable_index; } ! else if( mcall->is_MachCallRuntime() ) { mcall->as_MachCallRuntime()->_name = call->as_CallRuntime()->_name; } msfpt = mcall; } // This is a non-call safepoint else { --- 1179,1203 ---- mcall_java->_method_handle_invoke = is_method_handle_invoke; mcall_java->_override_symbolic_info = call_java->override_symbolic_info(); if (is_method_handle_invoke) { C->set_has_method_handle_invokes(true); } ! if (mcall_java->is_MachCallStaticJava()) { mcall_java->as_MachCallStaticJava()->_name = call_java->as_CallStaticJava()->_name; ! } ! if (mcall_java->is_MachCallDynamicJava()) { mcall_java->as_MachCallDynamicJava()->_vtable_index = call_java->as_CallDynamicJava()->_vtable_index; } ! } ! else if (mcall->is_MachCallRuntime()) { mcall->as_MachCallRuntime()->_name = call->as_CallRuntime()->_name; + if (mcall->is_MachCallLeaf()) { + bool preserves_fp_registers = call->as_CallLeaf()->preserves_fp_registers(); + mcall->as_MachCallLeaf()->set_preserves_fp_registers(preserves_fp_registers); + } } msfpt = mcall; } // This is a non-call safepoint else {
< prev index next >