Projects, which use JSR292

Christian Thalinger christian.thalinger at oracle.com
Mon Feb 21 07:33:29 PST 2011


On Feb 21, 2011, at 3:19 PM, Charles Oliver Nutter wrote:
> On Mon, Feb 21, 2011 at 8:07 AM, Christian Thalinger
> <christian.thalinger at oracle.com> wrote:
>> Alright, I know what's going wrong.  The recursive inlining logic does not recognize when recursive inlining happens like:
>> 
>> fib_ruby -> invokeExact -> fib_ruby -> ...
>> 
>> I try to add some additional logic there.
> 
> I think that makes sense. I am confused why it would be considered
> recursive at all if it's not treating it as a direct recursive
> invocation. I'd love to know how Hotspot weights various types of
> invocations...
> 
> Fixing recursive invocation may help, but it seems like somehow the
> inlining decisions affect more than just recursive calls based on my
> experiment with an intermediate call.
> 
> Here's LogCompilation -i results for the intermediate version...
> 
> https://gist.github.com/837104
> 
> So perhaps there's a priority or size-weighting issue as well? Perhaps
> indy calls are being given *too much* preference over a bunch of other
> stuff that's actually more important?

Why do you think that?

What's happening in the inlining tree above is that HotSpot's check for caller == callee does not hold since there are a couple of other frames in between (like generated method handle adapters).

With a fix in place it looks like:

http://pastebin.com/JryngMUZ

It's not completely correct since the inlining depth is wrongly calculated and so we don't inline fib_ruby up to MaxRecursiveInlineLevel, but at least we don't inline it:

  @ 20   bench.bench_fib_recursive::method__0$RUBY$fib_ruby  recursively inlining too deep

-- Christian


More information about the mlvm-dev mailing list