7057120: Tiered: Allow C1 to inline methods with loops

Recompile the enclosing methods without inlining of the method that has OSRed to level 4 or recompile the enclosing method at level 4.

Reviewed-by: kvn, never
This commit is contained in:
Igor Veresov 2011-07-01 10:37:37 -07:00
parent 528a9bb452
commit 47caaa4c06
11 changed files with 128 additions and 50 deletions

View file

@ -33,6 +33,7 @@
#include "compiler/compileBroker.hpp"
#include "interpreter/bytecode.hpp"
#include "runtime/sharedRuntime.hpp"
#include "runtime/compilationPolicy.hpp"
#include "utilities/bitMap.inline.hpp"
class BlockListBuilder VALUE_OBJ_CLASS_SPEC {
@ -3395,8 +3396,8 @@ void GraphBuilder::fill_sync_handler(Value lock, BlockBegin* sync_handler, bool
bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known) {
assert(!callee->is_native(), "callee must not be native");
if (count_backedges() && callee->has_loops()) {
INLINE_BAILOUT("too complex for tiered");
if (CompilationPolicy::policy()->should_not_inline(compilation()->env(), callee)) {
INLINE_BAILOUT("inlining prohibited by policy");
}
// first perform tests of things it's not possible to inline
if (callee->has_exception_handlers() &&