8308954: [JVMCI] code installation increments decompile_count for call_site_target_value failures

Reviewed-by: never
This commit is contained in:
Doug Simon 2023-06-01 19:24:07 +00:00
parent 0ab09630c6
commit 2bb1972483
2 changed files with 18 additions and 5 deletions
src/hotspot/share/jvmci

@ -1966,7 +1966,12 @@ Method* JVMCIRuntime::get_method_by_index(const constantPoolHandle& cpool,
// ------------------------------------------------------------------
// Check for changes to the system dictionary during compilation
// class loads, evolution, breakpoints
JVMCI::CodeInstallResult JVMCIRuntime::validate_compile_task_dependencies(Dependencies* dependencies, JVMCICompileState* compile_state, char** failure_detail) {
JVMCI::CodeInstallResult JVMCIRuntime::validate_compile_task_dependencies(Dependencies* dependencies,
JVMCICompileState* compile_state,
char** failure_detail,
bool& failing_dep_is_call_site)
{
failing_dep_is_call_site = false;
// If JVMTI capabilities were enabled during compile, the compilation is invalidated.
if (compile_state != nullptr && compile_state->jvmti_state_changed()) {
*failure_detail = (char*) "Jvmti state change during compilation invalidated dependencies";
@ -1975,10 +1980,13 @@ JVMCI::CodeInstallResult JVMCIRuntime::validate_compile_task_dependencies(Depend
CompileTask* task = compile_state == nullptr ? nullptr : compile_state->task();
Dependencies::DepType result = dependencies->validate_dependencies(task, failure_detail);
if (result == Dependencies::end_marker) {
return JVMCI::ok;
}
if (result == Dependencies::call_site_target_value) {
failing_dep_is_call_site = true;
}
return JVMCI::dependencies_failed;
}
@ -2167,11 +2175,13 @@ JVMCI::CodeInstallResult JVMCIRuntime::register_method(JVMCIEnv* JVMCIENV,
}
// Check for {class loads, evolution, breakpoints} during compilation
result = validate_compile_task_dependencies(dependencies, JVMCIENV->compile_state(), &failure_detail);
JVMCICompileState* compile_state = JVMCIENV->compile_state();
bool failing_dep_is_call_site;
result = validate_compile_task_dependencies(dependencies, compile_state, &failure_detail, failing_dep_is_call_site);
if (result != JVMCI::ok) {
// While not a true deoptimization, it is a preemptive decompile.
MethodData* mdp = method()->method_data();
if (mdp != nullptr) {
if (mdp != nullptr && !failing_dep_is_call_site) {
mdp->inc_decompile_count();
#ifdef ASSERT
if (mdp->decompile_count() > (uint)PerMethodRecompilationCutoff) {

@ -428,7 +428,10 @@ class JVMCIRuntime: public CHeapObj<mtJVMCI> {
// Helper routine for determining the validity of a compilation
// with respect to concurrent class loading.
static JVMCI::CodeInstallResult validate_compile_task_dependencies(Dependencies* target, JVMCICompileState* task, char** failure_detail);
static JVMCI::CodeInstallResult validate_compile_task_dependencies(Dependencies* target,
JVMCICompileState* task,
char** failure_detail,
bool& failing_dep_is_call_site);
// Compiles `target` with the JVMCI compiler.
void compile_method(JVMCIEnv* JVMCIENV, JVMCICompiler* compiler, const methodHandle& target, int entry_bci);