Mercurial > hg > truffle
changeset 3334:b21ecca7ccc4
6552561: MaxRecursiveInlineLevel flag doesn't operate correctly
Reviewed-by: kvn, never
author | twisti |
---|---|
date | Mon, 02 May 2011 00:55:09 -0700 |
parents | ae93231c7a1f |
children | 49d67a090fe2 |
files | src/share/vm/opto/bytecodeInfo.cpp |
diffstat | 1 files changed, 7 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/opto/bytecodeInfo.cpp Thu Apr 28 16:40:23 2011 -0700 +++ b/src/share/vm/opto/bytecodeInfo.cpp Mon May 02 00:55:09 2011 -0700 @@ -310,13 +310,14 @@ return "inlining too deep"; } - // We need to detect recursive inlining of method handle targets: if - // the current method is a method handle adapter and one of the - // callers is the same method as the callee, we bail out if - // MaxRecursiveInlineLevel is hit. - if (method()->is_method_handle_adapter()) { + // detect direct and indirect recursive inlining + { + // count the current method and the callee + int inline_level = (method() == callee_method) ? 1 : 0; + if (inline_level > MaxRecursiveInlineLevel) + return "recursively inlining too deep"; + // count callers of current method and callee JVMState* jvms = caller_jvms(); - int inline_level = 0; while (jvms != NULL && jvms->has_method()) { if (jvms->method() == callee_method) { inline_level++; @@ -327,10 +328,6 @@ } } - if (method() == callee_method && inline_depth() > MaxRecursiveInlineLevel) { - return "recursively inlining too deep"; - } - int size = callee_method->code_size(); if (UseOldInlining && ClipInlining