Hi Remi and Chris,<div><br></div><div>Yes, it&#39;s doable. I&#39;ll just take the same approach for clazz1.isAssignableFrom(clazz2).</div><div>I&#39;m fine with doing it in this change. But it might take some time as I have some other things that I have to do right now.</div>
<div><br></div><div>Meanwhile I&#39;d like to wait for Chris and see how much this patch improves the new JSR 292 implementation performance. If it&#39;s not good enough, I&#39;ll try again with more complicated solutions.</div>
<div><br></div><div>Regards,</div><div>Kris<br><br><div class="gmail_quote">On Thu, May 31, 2012 at 3:43 AM, Christian Thalinger <span dir="ltr">&lt;<a href="mailto:christian.thalinger@oracle.com" target="_blank">christian.thalinger@oracle.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><br>
On May 30, 2012, at 11:49 AM, Rémi Forax wrote:<br>
<br>
&gt; Hi Krystal,<br>
&gt; is it also possible to try to trap Class.isAssignableFrom(Class),<br>
&gt; if one of Class is constant ?<br>
<br>
</div>If Kris has time, why not.  The Class.isInstance is important now because we will heavily use it in the new JSR 292 implementation.  For JRuby&#39;s red-black tree it used 67% of the run time (yeah, JNI is expensive).<br>

<br>
-- Chris<br>
<div class="HOEnZb"><div class="h5"><br>
&gt;<br>
&gt; Rémi<br>
&gt;<br>
&gt; On 05/30/2012 05:31 PM, Krystal Mok wrote:<br>
&gt;&gt; Hi all,<br>
&gt;&gt;<br>
&gt;&gt; Could I have a couple of review for this change, please?<br>
&gt;&gt; <a href="https://gist.github.com/2830194#file_c1_is_instance.patch" target="_blank">https://gist.github.com/2830194#file_c1_is_instance.patch</a><br>
&gt;&gt;<br>
&gt;&gt; This patch implements Class.isInstance() intrinsic in C1.<br>
&gt;&gt; As a first cut, the current implementation is pretty straightforward:<br>
&gt;&gt; 1. During HIR construction, Class.isInstance() is inlined as an Intrinsic node<br>
&gt;&gt;   in GraphBuilder::try_inline_intrinsics();<br>
&gt;&gt; 2. Try to canonicalize the Intrinsic node into an InstanceOf node when<br>
&gt;&gt;   appending the node to the HIR graph;<br>
&gt;&gt; 3. Generate a leaf call to a runtime helper (Runtime1::is_instance_of) during<br>
&gt;&gt;   LIR generation for the remaining Intrinsic nodes for Class.isInstance().<br>
&gt;&gt;   This keeps the change platform-independent.<br>
&gt;&gt;<br>
&gt;&gt; There are several opportunities for more optimizations. e.g.<br>
&gt;&gt; 1. Turn more Intrinsic nodes into InstanceOf nodes during HIR optimizations and<br>
&gt;&gt;   during LIR generation;<br>
&gt;&gt; 2. Check the clazz.isInstance(null) case in a couple of places *after* clazz is<br>
&gt;&gt;   null-checked or guaranteed to be non-null; turn that into a constant false.<br>
&gt;&gt; 3. Follow the lir_store_check example for better platform-dependent performance<br>
&gt;&gt;<br>
&gt;&gt; These shall be addressed in some future change, if necessary.<br>
&gt;&gt;<br>
&gt;&gt; Regards,<br>
&gt;&gt; Kris<br>
&gt;<br>
<br>
</div></div></blockquote></div><br></div>