hg: mlvm/mlvm/hotspot: indy.compiler.inline: Added generated bytecode adapters.

Christian Thalinger Christian.Thalinger at Sun.COM
Fri Aug 21 07:39:52 PDT 2009


Hi!

This commit adds generated bytecode adapters for MethodHandles.  With
these adapters it's possible to inline the whole path of a
MethodHandleChain, plus the ultimate target, into the caller.

But keep in mind: THIS IS WORK IN PROGRESS and is not enabled by default!

A lot of stuff already works, like a number of JRuby benchmarks, but
there are also various crashes (that I actually know about).

To get your whole call path inlined you may need to tweak the inlining
thresholds a little.  To inline the call path of a simple GuardWithTest
testcase I need to use:

-XX:InlineSmallCode=1500 -XX:MaxInlineSize=50 -XX:MaxInlineLevel=15

To find out what thresholds are best for you, build a debug JVM and use:

-XX:+PrintCompilation -XX:+PrintInlining

If you see something like:

  @ 4   sun.dyn.ToGeneric$A1::invoke_I  already compiled into a medium
method

you need to increase InlineSmallCode, and for:

  @ 16   java.lang.Integer::intValue  inlining too deep

you, obviously, have to increase MaxInlineLevel (note: this switch is
only available in debug builds).

The need for this tweaking will go away in the future, but for now, if
you want to get the whole call path inlined (which may not have the best
performance), you have to use some switches.

Of course I want feedback about crashes!  Preferably with small
testcases... :-)

-- Christian


More information about the mlvm-dev mailing list