<p dir="ltr">Yeah, changing Object.hashCode seems better.  I&#39;m no expert, but I don&#39;t see anything in libraryCall.cpp that makes use of inline cache (most intrinsics are for statically known things though), so curious how this can be fixed without turning things upside down in there.  If we were to redirect to S.iHM I wonder if we&#39;d get the desired effect for free.</p>

<p dir="ltr">Sent from my phone</p>
<div class="gmail_quote">On May 13, 2013 4:53 PM, &quot;Aleksey Shipilev&quot; &lt;<a href="mailto:aleksey.shipilev@oracle.com">aleksey.shipilev@oracle.com</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 05/14/2013 12:42 AM, Vitaly Davidovich wrote:<br>
&gt; I think the point is that intrinsic only helps when you&#39;re calling<br>
&gt; Object.hashCode.  For classes with override, it&#39;s a loss.  I think what<br>
&gt; you want here is an inline cache with Object.hashCode in there but also<br>
&gt; whatever other frequent receiver(s) you have.  With Andy&#39;s suggestion,<br>
&gt; you&#39;d get an inline cache with one possible target being<br>
&gt; System.identityHashcode but also perhaps an inline of Integer (in this<br>
&gt; scenario).<br>
<br>
Yes, I can see that.<br>
<br>
Assume we change the Object.hashCode to call System.identityHashCode()<br>
on Java side, and let the runtime to optimize the S.iHM into the<br>
intrinsic to evade the native call. This will fix the immediate problem,<br>
but the VM changes would be more pervasive: you need to disable the<br>
intrinsic for Object.hashCode, you need to make sure it had inlined<br>
S.iHM, etc.<br>
<br>
If we are talking about fixing the JDK, then it&#39;s way better to fix the<br>
Object.hashCode intrinsic itself. It really seems a glitch in that C2<br>
intrinsic code. I&#39;ll go ahead and submit the CR for this.<br>
<br>
Thanks, that was an interesting issue to untangle.<br>
<br>
-Aleksey.<br>
</blockquote></div>