8148994: Replacing MH::invokeBasic with a direct call breaks LF customization
Reviewed-by: jrose, redestad
--- a/hotspot/src/share/vm/opto/callGenerator.cpp Mon Feb 15 20:26:02 2016 +0300
+++ b/hotspot/src/share/vm/opto/callGenerator.cpp Mon Feb 15 20:26:50 2016 +0300
@@ -825,10 +825,12 @@
input_not_const = false;
const TypeOopPtr* oop_ptr = receiver->bottom_type()->is_oopptr();
ciMethod* target = oop_ptr->const_oop()->as_method_handle()->get_vmtarget();
- guarantee(!target->is_method_handle_intrinsic(), "should not happen"); // XXX remove
const int vtable_index = Method::invalid_vtable_index;
- CallGenerator* cg = C->call_generator(target, vtable_index, false, jvms, true, PROB_ALWAYS, NULL, true, true);
- assert(cg == NULL || !cg->is_late_inline() || cg->is_mh_late_inline(), "no late inline here");
+ CallGenerator* cg = C->call_generator(target, vtable_index,
+ false /* call_does_dispatch */,
+ jvms,
+ true /* allow_inline */,
+ PROB_ALWAYS);
return cg;
} else {
const char* msg = "receiver not constant";
@@ -899,13 +901,15 @@
target = C->optimize_virtual_call(caller, jvms->bci(), klass, klass,
target, receiver_type, is_virtual,
call_does_dispatch, vtable_index, // out-parameters
- /*check_access=*/false);
+ false /* check_access */);
// We lack profiling at this call but type speculation may
// provide us with a type
speculative_receiver_type = (receiver_type != NULL) ? receiver_type->speculative_type() : NULL;
}
- CallGenerator* cg = C->call_generator(target, vtable_index, call_does_dispatch, jvms, /*allow_inline=*/true, PROB_ALWAYS, speculative_receiver_type, true, true);
- assert(cg == NULL || !cg->is_late_inline() || cg->is_mh_late_inline(), "no late inline here");
+ CallGenerator* cg = C->call_generator(target, vtable_index, call_does_dispatch, jvms,
+ true /* allow_inline */,
+ PROB_ALWAYS,
+ speculative_receiver_type);
return cg;
} else {
const char* msg = "member_name not constant";