Good news, bad news
Charles Oliver Nutter
headius at headius.com
Mon May 23 14:19:43 PDT 2011
I'm working up a set of files that show JRuby compilation output, but
I noticed a couple things that might be interesting right now.
First off, fairly early in the assembly output for fib, I see this:
0x02876d1f: call 0x0282d0e0 ; OopMap{[96]=Oop [100]=Oop
[28]=Oop [40]=Oop [48]=Oop off=644}
;*invokespecial invokeExact
; -
java.lang.invoke.MethodHandle::invokeExact at 63
; -
java.lang.invoke.MethodHandle::invokeExact at 23
; -
bench.bench_fib_recursive::method__0$RUBY$fib_ruby at 51 (line 7)
; {optimized virtual_call}
For fib, the only invokedynamic is the recursive call to fib, so that
would indicate that fib_ruby is not inlining into itself at all here.
And I can't see it inlining into itself anywhere in the assembly
output.
Later in the same output:
0x0287703f: call 0x0282dba0 ; OopMap{ebp=Oop off=1444}
;*checkcast
; -
java.lang.invoke.MethodHandle::invokeExact at 40
; -
bench.bench_fib_recursive::method__0$RUBY$fib_ruby at 82 (line 7)
; {runtime_call}
0x02877044: call 0x0105a9d0 ;*checkcast
; -
java.lang.invoke.MethodHandle::invokeExact at 40
; -
bench.bench_fib_recursive::method__0$RUBY$fib_ruby at 82 (line 7)
; {runtime_call}
These appear repeatedly near the invokedynamic invocation above. If
I'm reading this right, neither the recursive call nor logic involved
in that particular handle is inlining. Am I right?
Here's the complete assembly dump (i386) for the fib_ruby method:
https://gist.github.com/987640
In other news, MaxInlineSize=150 with InlineSmallCode=3000 does not
appear to improve performance. I also tried bumping up
MaxRecursiveInlineLevel and MaxInlineLevel with no effect.
- Charlie
More information about the mlvm-dev
mailing list