On Feb 18, 2011, at 1:28 PM, Charles Oliver Nutter wrote: > On Fri, Feb 18, 2011 at 6:17 AM, Christian Thalinger > <christian.thalin...@oracle.com> wrote: >> Is there a switch to turn direct ruby-to-ruby calls on and off? I'd like to >> compare inlining trees and maybe code output. > > Just pushed a couple for you in a4a0802: > > jruby.compile.invokedynamic.rubyDirect=true|false (Ruby targets > directly bind; defaults to true) > jruby.compile.invokedynamic.nativeDirect=true|false (Native (Java) > targets directly bind; defaults to true) > > Not to put any pressure on, but I had hoped to see this > directly-binding Ruby calls would *improve* perf :) With this in > place, the only thing dynopt does that my indy logic doesn't do is > dispatch literal fixnums directly through as long values (rather than > as RubyFixnum objects...and yes, this is only in place for literals). > Ideally, I'd expect optimized invokedynamic to perform as well as > dynopt in this situation.
What I can tell so far is that setting rubyDirect=true inlines a whole lot more stuff than without. I looks like it wants to inline all recursive calls of fib_ruby into a single method, which doesn't work very well, hitting two limits: NodeCountInliningCutoff and DesiredMethodLimit. I tried to bump these limits but that is a dead end for the compiler since at one point it skips the compile because it gets too many nodes: 43 COMPILE SKIPPED: out of nodes parsing method (not retryable) I don't know why it wants to inline all these recursive calls. Is that something JRuby tries to do? -- Christian _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev