--- old/src/share/vm/ci/ciEnv.cpp 2017-01-30 16:06:32.000000000 +0300 +++ new/src/share/vm/ci/ciEnv.cpp 2017-01-30 16:06:31.000000000 +0300 @@ -101,6 +101,7 @@ _debug_info = NULL; _dependencies = NULL; _failure_reason = NULL; + _inc_decompile_count_on_failure = true; _compilable = MethodCompilable; _break_at_compile = false; _compiler_data = NULL; @@ -161,6 +162,7 @@ _debug_info = NULL; _dependencies = NULL; _failure_reason = NULL; + _inc_decompile_count_on_failure = true; _compilable = MethodCompilable_never; _break_at_compile = false; _compiler_data = NULL; @@ -902,7 +904,12 @@ if (deps.is_klass_type()) continue; // skip klass dependencies Klass* witness = deps.check_dependency(); if (witness != NULL) { - record_failure("invalid non-klass dependency"); + if (deps.type() == Dependencies::call_site_target_value) { + _inc_decompile_count_on_failure = false; + record_failure("call site target change"); + } else { + record_failure("invalid non-klass dependency"); + } return; } } @@ -1017,7 +1024,7 @@ if (failing()) { // While not a true deoptimization, it is a preemptive decompile. MethodData* mdo = method()->method_data(); - if (mdo != NULL) { + if (mdo != NULL && _inc_decompile_count_on_failure) { mdo->inc_decompile_count(); }