Mercurial > hg > graal-jvmci-8
diff src/share/vm/runtime/advancedThresholdPolicy.cpp @ 23379:24505bf61633
allow JVMCI compiler to change the compilation policy for a method (JDK-8152311)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 09 May 2016 16:08:16 +0200 |
parents | 9d78d44d3aac |
children | 3ef45d0a6d77 |
line wrap: on
line diff
--- a/src/share/vm/runtime/advancedThresholdPolicy.cpp Mon May 09 11:31:54 2016 +0200 +++ b/src/share/vm/runtime/advancedThresholdPolicy.cpp Mon May 09 16:08:16 2016 +0200 @@ -25,6 +25,9 @@ #include "precompiled.hpp" #include "runtime/advancedThresholdPolicy.hpp" #include "runtime/simpleThresholdPolicy.inline.hpp" +#ifdef COMPILERJVMCI +#include "jvmci/jvmciRuntime.hpp" +#endif #ifdef TIERED // Print an event. @@ -433,7 +436,7 @@ } // Determine if a method should be compiled with a normal entry point at a different level. -CompLevel AdvancedThresholdPolicy::call_event(Method* method, CompLevel cur_level) { +CompLevel AdvancedThresholdPolicy::call_event(Method* method, CompLevel cur_level, JavaThread * thread) { CompLevel osr_level = MIN2((CompLevel) method->highest_osr_comp_level(), common(&AdvancedThresholdPolicy::loop_predicate, method, cur_level, true)); CompLevel next_level = common(&AdvancedThresholdPolicy::call_predicate, method, cur_level); @@ -450,11 +453,12 @@ } else { next_level = MAX2(osr_level, next_level); } + COMPILERJVMCI_PRESENT(next_level = JVMCIRuntime::adjust_comp_level(method, false, next_level, thread);) return next_level; } // Determine if we should do an OSR compilation of a given method. -CompLevel AdvancedThresholdPolicy::loop_event(Method* method, CompLevel cur_level) { +CompLevel AdvancedThresholdPolicy::loop_event(Method* method, CompLevel cur_level, JavaThread * thread) { CompLevel next_level = common(&AdvancedThresholdPolicy::loop_predicate, method, cur_level, true); if (cur_level == CompLevel_none) { // If there is a live OSR method that means that we deopted to the interpreter @@ -464,6 +468,7 @@ return osr_level; } } + COMPILERJVMCI_PRESENT(next_level = JVMCIRuntime::adjust_comp_level(method, true, next_level, thread);) return next_level; } @@ -481,7 +486,7 @@ create_mdo(mh, thread); } if (is_compilation_enabled() && !CompileBroker::compilation_is_in_queue(mh)) { - CompLevel next_level = call_event(mh(), level); + CompLevel next_level = call_event(mh(), level, thread); if (next_level != level) { compile(mh, InvocationEntryBci, next_level, thread); } @@ -501,7 +506,7 @@ } if (is_compilation_enabled()) { - CompLevel next_osr_level = loop_event(imh(), level); + CompLevel next_osr_level = loop_event(imh(), level, thread); CompLevel max_osr_level = (CompLevel)imh->highest_osr_comp_level(); // At the very least compile the OSR version if (!CompileBroker::compilation_is_in_queue(imh) && (next_osr_level != level)) { @@ -514,7 +519,7 @@ if (mh() != imh()) { // If there is an enclosing method guarantee(nm != NULL, "Should have nmethod here"); cur_level = comp_level(mh()); - next_level = call_event(mh(), cur_level); + next_level = call_event(mh(), cur_level, thread); if (max_osr_level == CompLevel_full_optimization) { // The inlinee OSRed to full opt, we need to modify the enclosing method to avoid deopts @@ -549,7 +554,7 @@ } } else { cur_level = comp_level(imh()); - next_level = call_event(imh(), cur_level); + next_level = call_event(imh(), cur_level, thread); if (!CompileBroker::compilation_is_in_queue(imh) && (next_level != cur_level)) { compile(imh, InvocationEntryBci, next_level, thread); }