On May 23, 2011, at 5:13 PM, Charles Oliver Nutter wrote:

> On Mon, May 23, 2011 at 6:17 PM, Rémi Forax <fo...@univ-mlv.fr> wrote:
>> On 05/24/2011 12:44 AM, Tom Rodriguez wrote:
>>> I haven't been following 292 that closely but it used to be a piece of code 
>>> that did precisely that.
>>> 
>>> +        private Object invoke_L0() throws Throwable {
>>> +            if ((boolean) test.invokeExact())
>>> +                return target.invokeExact();
>>> +            return fallback.invokeExact();
>>> +        }
>>> 
>>> It looks like it was reworked at some point to use selectAlternative but 
>>> the optimizer was never updated to deal with it properly.  It's not 
>>> particularly hard, we just need to generate code like we would for a 
>>> bimorphic call site.  The current code expects to either get a constant or 
>>> something else and doesn't inline if it's something else.  In this case we 
>>> have a Phi of two constants which we just need to split.
> 
> I'll give it a shot. I'll put together a benchmark that produces
> "effectively monomorphic" calls at the invokedynamic call site, but
> which uses an intermediate hand-written piece of Java code (that ends
> up polymorphic) in place of GWT.
> 
> Obviously GWT should not fail this badly in final release, but if this
> works it could mean many, many other patterns will too. And it will
> definitively answer the question about whether such a case inlines in
> current logic.

You can also just wait for a fix.  I've started writing the logic for it and 
just need to duplicate the guard.  We should be able to have this fixed for 
JDK7.

tom

> 
>> The main problem of writing your own variant is that you will have to
>> write 256 * (number_of_primitive_type + 1) variants.
>> The main idea of GWT (and all other method handle combiners) is that
>> they provide a way to get such polymorphic variant
>> without coding all combinations.
>> 
>> The benefit is also that these combiners are known by the VM that can
>> provide
>> dedicated path that are more efficient,
>> by ex, the arguments of GWT is pushed only once and used by the test
>> *and* the target (or fallback)
>> or better guarantee about how trees of combiners are inlined.
> 
> I am not currently specializing any call paths for primitives, but
> that will come soon. For experiment's sake, I only need to provide one
> such GWT replacement to test fib (no block passed, single IRubyObject
> argument) and one more for the dispatch bench (no block, no args).
> We'll see how it looks.
> 
> - Charlie
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev@openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

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

Reply via email to