Hi all,<div><br></div><div><a href="https://gist.github.com/2481025" target="_blank">https://gist.github.com/2481025</a>
</div><div><br></div><div>Could I get some reviews for this patch, please? Any comments and suggestions are welcomed.</div><div>I&#39;m still pretty new to C2, and I&#39;m taking this as an exercise to get more familiar with the implementation details.</div>


<div><br></div><div>The idea is to optimize this code pattern:</div><div><br></div><div>  <font face="&#39;courier new&#39;, monospace">x.getClass() == A.class</font></div><div><br></div><div>into</div><div><br></div><div>

  <font face="&#39;courier new&#39;, monospace">x._klass == klassof(A)</font></div><div><br></div><div>which shortens the original pattern by 1 load.</div><div><br></div><div>A scenario where this might be useful is the following code pattern:</div>

<div><br></div><div><font face="&#39;courier new&#39;, monospace">  if (x.getClass() == A.class) {</font></div><div><font face="&#39;courier new&#39;, monospace">    A a = (A) x; // checkcast</font></div><div><font face="&#39;courier new&#39;, monospace">    a.m();       // ... use a ...</font></div>

<div><font face="&#39;courier new&#39;, monospace">  }</font></div><div><br></div><div>Before this change, there would be redundant exact type check in the generated code, as mentioned in an earlier thread [1].</div><div>

After this change, the redundant check gets optimized away, because the new pattern is the same as the one used in the fast path of instanceof/Class.isInstance()/checkcast.</div><div><br></div><div>It&#39;s probably rare to see this pattern in normal Java code, where normal virtual dispatch should be favored instead. But it might be a common pattern in dynamic language runtime implementations.
</div><div>I&#39;ll leave it to Remi to explain the original motivation for optimizing this code pattern :-)</div><div><br></div><div>Tested with CTW -XX:+VerifyIterativeGVN, and SPECjvm2008.</div><div>The composite result in SPECjvm2008 seems to have dropped a little bit, I&#39;m not sure if that&#39;s caused by this change or by some variance on my test machine.</div>

<div><br></div><div><div>Regards,</div><div>Kris</div></div><div><br></div><div>[1]: <a href="http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2012-April/007568.html">http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2012-April/007568.html</a></div>
<div><br></div><div>SPECjvm2008 results:</div><div><br></div><div>JDK8-b35/HS24-b07 without change:</div><div><div><font face="&#39;courier new&#39;, monospace">================================</font></div>

<div><font face="&#39;courier new&#39;, monospace">compiler                      668.38                                  </font></div><div><font face="&#39;courier new&#39;, monospace">compress                      339.67                                  </font></div>


<div><font face="&#39;courier new&#39;, monospace">crypto                        342.78                                  </font></div><div><font face="&#39;courier new&#39;, monospace">derby                         679                                     </font></div>


<div><font face="&#39;courier new&#39;, monospace">mpegaudio                     214.92                                  </font></div><div><font face="&#39;courier new&#39;, monospace">scimark.large                 63.42                                   </font></div>


<div><font face="&#39;courier new&#39;, monospace">scimark.small                 388.48                                  </font></div><div><font face="&#39;courier new&#39;, monospace">serial                        262.37                                  </font></div>


<div><font face="&#39;courier new&#39;, monospace">startup                       26.89                                   </font></div><div><font face="&#39;courier new&#39;, monospace">sunflow                       129.93                                  </font></div>


<div><font face="&#39;courier new&#39;, monospace">xml                           785.47                                  </font></div><div><font face="&#39;courier new&#39;, monospace">Composite result: 246.2 SPECjvm2008 Base ops/m</font></div>


<div><font face="&#39;courier new&#39;, monospace">================================</font></div></div><div><br></div><div>JDK8-b35/HS24-b07 with change:</div><div><div><font face="&#39;courier new&#39;, monospace">================================</font></div>


<div><font face="&#39;courier new&#39;, monospace">compiler                      629.35                                  </font></div><div><font face="&#39;courier new&#39;, monospace">compress                      337.61                                  </font></div>


<div><font face="&#39;courier new&#39;, monospace">crypto                        342.02                                  </font></div><div><font face="&#39;courier new&#39;, monospace">derby                         689.93                                  </font></div>


<div><font face="&#39;courier new&#39;, monospace">mpegaudio                     216.66                                  </font></div><div><font face="&#39;courier new&#39;, monospace">scimark.large                 60.33                                   </font></div>


<div><font face="&#39;courier new&#39;, monospace">scimark.small                 387.42                                  </font></div><div><font face="&#39;courier new&#39;, monospace">serial                        233.34                                  </font></div>


<div><font face="&#39;courier new&#39;, monospace">startup                       26.41                                   </font></div><div><font face="&#39;courier new&#39;, monospace">sunflow                       131.64                                  </font></div>


<div><font face="&#39;courier new&#39;, monospace">xml                           780.32                                  </font></div><div><font face="&#39;courier new&#39;, monospace">Composite result: 241.2 SPECjvm2008 Base ops/m</font></div>


<div><font face="&#39;courier new&#39;, monospace">================================</font></div></div>