src/share/vm/opto/callGenerator.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File valhalla Sdiff src/share/vm/opto

src/share/vm/opto/callGenerator.cpp

Print this page




 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 {


src/share/vm/opto/callGenerator.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File