src/share/vm/ci/ciEnv.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/ci/ciEnv.cpp	Mon Jan 30 16:06:32 2017
--- new/src/share/vm/ci/ciEnv.cpp	Mon Jan 30 16:06:31 2017

*** 99,108 **** --- 99,109 ---- _oop_recorder = NULL; _debug_info = NULL; _dependencies = NULL; _failure_reason = NULL; + _inc_decompile_count_on_failure = true; _compilable = MethodCompilable; _break_at_compile = false; _compiler_data = NULL; #ifndef PRODUCT assert(!firstEnv, "not initialized properly");
*** 159,168 **** --- 160,170 ---- _oop_recorder = NULL; _debug_info = NULL; _dependencies = NULL; _failure_reason = NULL; + _inc_decompile_count_on_failure = true; _compilable = MethodCompilable_never; _break_at_compile = false; _compiler_data = NULL; #ifndef PRODUCT assert(firstEnv, "must be first");
*** 900,910 **** --- 902,917 ---- // modification counter hasn't changed (see below). for (Dependencies::DepStream deps(dependencies()); deps.next(); ) { if (deps.is_klass_type()) continue; // skip klass dependencies Klass* witness = deps.check_dependency(); if (witness != NULL) { + 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; } } // Klass dependencies must be checked when the system dictionary
*** 1015,1025 **** --- 1022,1032 ---- #endif if (failing()) { // While not a true deoptimization, it is a preemptive decompile. MethodData* mdo = method()->method_data(); ! if (mdo != NULL && _inc_decompile_count_on_failure) { mdo->inc_decompile_count(); } // All buffers in the CodeBuffer are allocated in the CodeCache. // If the code buffer is created on each compile attempt

src/share/vm/ci/ciEnv.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File