Mercurial > hg > graal-compiler
changeset 12170:8947af8a9cec
8023976: assert(!CompilationPolicy::can_be_compiled(this, comp_level)) failed: sanity check
Reviewed-by: kvn, twisti
author | vlivanov |
---|---|
date | Thu, 29 Aug 2013 22:44:19 +0400 |
parents | 29aa8936f03c |
children | 40ed2dc92a79 |
files | src/share/vm/oops/method.cpp src/share/vm/oops/method.hpp |
diffstat | 2 files changed, 18 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/oops/method.cpp Wed Aug 28 11:22:43 2013 +0200 +++ b/src/share/vm/oops/method.cpp Thu Aug 29 22:44:19 2013 +0400 @@ -720,11 +720,22 @@ } } +bool Method::is_always_compilable() const { + // Generated adapters must be compiled + if (is_method_handle_intrinsic() && is_synthetic()) { + assert(!is_not_c1_compilable(), "sanity check"); + assert(!is_not_c2_compilable(), "sanity check"); + return true; + } + + return false; +} + bool Method::is_not_compilable(int comp_level) const { if (number_of_breakpoints() > 0) return true; - if (is_method_handle_intrinsic()) - return !is_synthetic(); // the generated adapters must be compiled + if (is_always_compilable()) + return false; if (comp_level == CompLevel_any) return is_not_c1_compilable() || is_not_c2_compilable(); if (is_c1_compile(comp_level)) @@ -736,6 +747,10 @@ // call this when compiler finds that this method is not compilable void Method::set_not_compilable(int comp_level, bool report, const char* reason) { + if (is_always_compilable()) { + // Don't mark a method which should be always compilable + return; + } print_made_not_compilable(comp_level, /*is_osr*/ false, report, reason); if (comp_level == CompLevel_all) { set_not_c1_compilable();
--- a/src/share/vm/oops/method.hpp Wed Aug 28 11:22:43 2013 +0200 +++ b/src/share/vm/oops/method.hpp Thu Aug 29 22:44:19 2013 +0400 @@ -796,6 +796,7 @@ void set_not_osr_compilable_quietly(int comp_level = CompLevel_all) { set_not_osr_compilable(comp_level, false); } + bool is_always_compilable() const; private: void print_made_not_compilable(int comp_level, bool is_osr, bool report, const char* reason);