136 kit.C->print_inlining_update(this); 137 PhaseGVN& gvn = kit.gvn(); 138 bool is_static = method()->is_static(); 139 address target = is_static ? SharedRuntime::get_resolve_static_call_stub() 140 : SharedRuntime::get_resolve_opt_virtual_call_stub(); 141 142 if (kit.C->log() != NULL) { 143 kit.C->log()->elem("direct_call bci='%d'", jvms->bci()); 144 } 145 146 CallStaticJavaNode *call = new CallStaticJavaNode(kit.C, tf(), target, method(), kit.bci()); 147 if (is_inlined_mh_linker(jvms, method())) { 148 // To be able to issue a direct call and skip a call to MH.linkTo*/invokeBasic adapter, 149 // additional information about the method being invoked should be attached 150 // to the call site to make resolution logic work 151 // (see SharedRuntime::resolve_static_call_C). 152 call->set_override_symbolic_info(true); 153 } 154 _call_node = call; // Save the call node in case we need it later 155 if (!is_static) { 156 // Make an explicit receiver null_check as part of this call. 157 // Since we share a map with the caller, his JVMS gets adjusted. 158 kit.null_check_receiver_before_call(method()); 159 if (kit.stopped()) { 160 // And dump it back to the caller, decorated with any exceptions: 161 return kit.transfer_exceptions_into_jvms(); 162 } 163 // Mark the call node as virtual, sort of: 164 call->set_optimized_virtual(true); 165 if (method()->is_method_handle_intrinsic() || 166 method()->is_compiled_lambda_form()) { 167 call->set_method_handle_invoke(true); 168 } 169 } 170 kit.set_arguments_for_java_call(call); 171 kit.set_edges_for_java_call(call, false, _separate_io_proj); 172 Node* ret = kit.set_results_for_java_call(call, _separate_io_proj); 173 // Check if return value is a value type pointer 174 if (gvn.type(ret)->isa_valuetypeptr()) { 175 // Create ValueTypeNode from the oop and replace the return value 176 Node* vt = ValueTypeNode::make(gvn, kit.merged_memory(), ret); 177 kit.push_node(T_VALUETYPE, vt); 178 } else { | 136 kit.C->print_inlining_update(this); 137 PhaseGVN& gvn = kit.gvn(); 138 bool is_static = method()->is_static(); 139 address target = is_static ? SharedRuntime::get_resolve_static_call_stub() 140 : SharedRuntime::get_resolve_opt_virtual_call_stub(); 141 142 if (kit.C->log() != NULL) { 143 kit.C->log()->elem("direct_call bci='%d'", jvms->bci()); 144 } 145 146 CallStaticJavaNode *call = new CallStaticJavaNode(kit.C, tf(), target, method(), kit.bci()); 147 if (is_inlined_mh_linker(jvms, method())) { 148 // To be able to issue a direct call and skip a call to MH.linkTo*/invokeBasic adapter, 149 // additional information about the method being invoked should be attached 150 // to the call site to make resolution logic work 151 // (see SharedRuntime::resolve_static_call_C). 152 call->set_override_symbolic_info(true); 153 } 154 _call_node = call; // Save the call node in case we need it later 155 if (!is_static) { 156 if (kit.argument(0)->is_ValueType()) { 157 ValueTypeNode* vt = kit.argument(0)->as_ValueType(); 158 vt->store_to_memory(&kit); 159 } else { 160 // Make an explicit receiver null_check as part of this call. 161 // Since we share a map with the caller, his JVMS gets adjusted. 162 kit.null_check_receiver_before_call(method()); 163 } 164 if (kit.stopped()) { 165 // And dump it back to the caller, decorated with any exceptions: 166 return kit.transfer_exceptions_into_jvms(); 167 } 168 // Mark the call node as virtual, sort of: 169 call->set_optimized_virtual(true); 170 if (method()->is_method_handle_intrinsic() || 171 method()->is_compiled_lambda_form()) { 172 call->set_method_handle_invoke(true); 173 } 174 } 175 kit.set_arguments_for_java_call(call); 176 kit.set_edges_for_java_call(call, false, _separate_io_proj); 177 Node* ret = kit.set_results_for_java_call(call, _separate_io_proj); 178 // Check if return value is a value type pointer 179 if (gvn.type(ret)->isa_valuetypeptr()) { 180 // Create ValueTypeNode from the oop and replace the return value 181 Node* vt = ValueTypeNode::make(gvn, kit.merged_memory(), ret); 182 kit.push_node(T_VALUETYPE, vt); 183 } else { |