Virtual dispatch bug in 292 impl
Charles Oliver Nutter
headius at headius.com
Mon Jan 7 16:42:42 PST 2013
A quick test of the fix Christian gave me seems to indicate that
things are working. Yay!
Will try running our comprehensive "all" suite this evening.
- Charlie
On Thu, Jan 3, 2013 at 2:24 PM, Charles Oliver Nutter
<headius at headius.com> wrote:
> Sorry I lost track of this thread going into the holidays...I talked
> to Christian a moment ago but I reply here for the record...
>
> Christian Thalinger <christian.thalinger at oracle.com> wrote:
>>> I filed:
>>>
>>> https://jbs.oracle.com/bugs/browse/JDK-8005418
>>>
>>> But it seems to be C2, not C1:
>
> Does look that way in your output. I'll leave it in your hands. I will
> say I am almost positive that when I ran with tier=1 it failed, and
> -tiered worked ok, but I don't have the output in front of me.
>
>> What's the name of the [] implementation of ENV? Is it StringOnlyRubyHash.op_aref?
>
> Yes, that's the one. The handle points at the superclass impl,
> RubyHash.op_aref, and that's the one that gets hit instead of the
> override.
>
>> Could this be the compile that goes wrong?
>>
>> 12903 956 java.lang.invoke.LambdaForm$MH/847376::convert (52 bytes)
>> @ 15 java.lang.invoke.LambdaForm$BMH/23638730::reinvoke (26 bytes) inline (hot)
>> @ 12 java.lang.invoke.BoundMethodHandle$Species_LL::reinvokerTarget (8 bytes) inline (hot)
>> @ 22 java.lang.invoke.LambdaForm$DMH/20340225::invokeStatic_LL_L (15 bytes) inline (hot)
>> @ 1 java.lang.invoke.DirectMethodHandle::internalMemberName (8 bytes) inline (hot)
>> @ 11 sun.invoke.util.ValueConversions::castReference (6 bytes) inline (hot)
>> @ 2 java.lang.Class::cast (27 bytes) inline (hot)
>> @ 6 java.lang.Class::isInstance (0 bytes) (intrinsic)
>> @ 33 java.lang.Class::cast (27 bytes) inline (hot)
>> @ 6 java.lang.Class::isInstance (0 bytes) (intrinsic)
>> @ 43 java.lang.Class::cast (27 bytes) inline (hot)
>> @ 6 java.lang.Class::isInstance (0 bytes) (intrinsic)
>> @ 48 java.lang.invoke.LambdaForm$DMH/32367447::invokeVirtual_LLL_L (18 bytes) inline (hot)
>> @ 1 java.lang.invoke.DirectMethodHandle::internalMemberName (8 bytes) inline (hot)
>> @ 14 org.jruby.RubyHash::op_aref (23 bytes) inline (hot)
>
> This looks like what I saw while debugging, yes. Not sure if this
> exact output is right because there's not much context, but I did see
> the call that *should* have been going to StringOnlyRubyHash.op_aref
> going to RubyHash.op_aref.
>
> There aren't many such cases in JRuby...most overrides are accompanied
> by an override in the Ruby class structures, so the child class has
> its own handle pointing at the override. That's probably why we don't
> see it in more places.
>
> I have not retested with any of the recent work on partial inlining,
> etc. Since it looks like you're able to reproduce it ok, I'll leave it
> in your hands. Let me know what else I can do.
>
> - Charlie
More information about the hotspot-compiler-dev
mailing list