On Fri, May 10, 2013 at 7:16 PM, Per Bothner <p...@bothner.com> wrote:

> Fail hard is probably the wrong thing to do - except when debugging.
> I think what you want is the default to not fail if it can't pop
> the stack frame, but that there be a VM option to throw an Error
> or even do a VM abort in those case.  You'd run the test suite
> in this mode.
>
> That assumes that there is well-specified a minimal set of
> circumstances in which the inlining is done correctly,
> so a compiler or programmer can count on that, and that this
> set is sufficient for low-overhead tail-call elimination.
>

Making such guarantees would have to be explicit in the JVM spec, and then
we're sorta back to requiring a hard tail call guarantee (a hard inlining
guarantee to ensure tail calling happens is just a horse of a different
color).

There is actually a way to force inlining with the newer invokedynamic
impl: a @ForceInline (I forget the actual name) annotation that the
LambdaForm stuff uses internally. Now, if that were exposed as a standard
JVM feature, we could make such a hard guarantee...and then we're back to
having to tag calls or callees with annotations, which was something you
wanted to avoid (why, exactly?).


> I'll be happy when I can run Kawa with --full-tailcalls
> as the default with at most a minor performance degradation.
> If we don't get there, I'll be satisfied if at least it is
> faster (and simpler!) than the current trampoline-based
> implementation.


There's still a tail call patch in the MLVM repo, rotting on the vine. :-)

- Charlie
_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to