Skip to content

Commit 2bb1972

Browse files
author
Doug Simon
committed
8308954: [JVMCI] code installation increments decompile_count for call_site_target_value failures
Reviewed-by: never
1 parent 0ab0963 commit 2bb1972

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

src/hotspot/share/jvmci/jvmciRuntime.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1966,7 +1966,12 @@ Method* JVMCIRuntime::get_method_by_index(const constantPoolHandle& cpool,
19661966
// ------------------------------------------------------------------
19671967
// Check for changes to the system dictionary during compilation
19681968
// class loads, evolution, breakpoints
1969-
JVMCI::CodeInstallResult JVMCIRuntime::validate_compile_task_dependencies(Dependencies* dependencies, JVMCICompileState* compile_state, char** failure_detail) {
1969+
JVMCI::CodeInstallResult JVMCIRuntime::validate_compile_task_dependencies(Dependencies* dependencies,
1970+
JVMCICompileState* compile_state,
1971+
char** failure_detail,
1972+
bool& failing_dep_is_call_site)
1973+
{
1974+
failing_dep_is_call_site = false;
19701975
// If JVMTI capabilities were enabled during compile, the compilation is invalidated.
19711976
if (compile_state != nullptr && compile_state->jvmti_state_changed()) {
19721977
*failure_detail = (char*) "Jvmti state change during compilation invalidated dependencies";
@@ -1975,10 +1980,13 @@ JVMCI::CodeInstallResult JVMCIRuntime::validate_compile_task_dependencies(Depend
19751980

19761981
CompileTask* task = compile_state == nullptr ? nullptr : compile_state->task();
19771982
Dependencies::DepType result = dependencies->validate_dependencies(task, failure_detail);
1983+
19781984
if (result == Dependencies::end_marker) {
19791985
return JVMCI::ok;
19801986
}
1981-
1987+
if (result == Dependencies::call_site_target_value) {
1988+
failing_dep_is_call_site = true;
1989+
}
19821990
return JVMCI::dependencies_failed;
19831991
}
19841992

@@ -2167,11 +2175,13 @@ JVMCI::CodeInstallResult JVMCIRuntime::register_method(JVMCIEnv* JVMCIENV,
21672175
}
21682176

21692177
// Check for {class loads, evolution, breakpoints} during compilation
2170-
result = validate_compile_task_dependencies(dependencies, JVMCIENV->compile_state(), &failure_detail);
2178+
JVMCICompileState* compile_state = JVMCIENV->compile_state();
2179+
bool failing_dep_is_call_site;
2180+
result = validate_compile_task_dependencies(dependencies, compile_state, &failure_detail, failing_dep_is_call_site);
21712181
if (result != JVMCI::ok) {
21722182
// While not a true deoptimization, it is a preemptive decompile.
21732183
MethodData* mdp = method()->method_data();
2174-
if (mdp != nullptr) {
2184+
if (mdp != nullptr && !failing_dep_is_call_site) {
21752185
mdp->inc_decompile_count();
21762186
#ifdef ASSERT
21772187
if (mdp->decompile_count() > (uint)PerMethodRecompilationCutoff) {

src/hotspot/share/jvmci/jvmciRuntime.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,10 @@ class JVMCIRuntime: public CHeapObj<mtJVMCI> {
428428

429429
// Helper routine for determining the validity of a compilation
430430
// with respect to concurrent class loading.
431-
static JVMCI::CodeInstallResult validate_compile_task_dependencies(Dependencies* target, JVMCICompileState* task, char** failure_detail);
431+
static JVMCI::CodeInstallResult validate_compile_task_dependencies(Dependencies* target,
432+
JVMCICompileState* task,
433+
char** failure_detail,
434+
bool& failing_dep_is_call_site);
432435

433436
// Compiles `target` with the JVMCI compiler.
434437
void compile_method(JVMCIEnv* JVMCIENV, JVMCICompiler* compiler, const methodHandle& target, int entry_bci);

0 commit comments

Comments
 (0)