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 {
|