<div dir="ltr"><div>Hi Vladimir,</div><div><br></div>Given java has no unsigned long, wouldn't this be somewhat straightforward to test? I agree that it's unlikely to be worth it given most loops are int.<div><br></div><div>Thanks</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 29, 2015 at 1:38 PM, Vladimir Kozlov <span dir="ltr"><<a href="mailto:vladimir.kozlov@oracle.com" target="_blank">vladimir.kozlov@oracle.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">There is reason. We do long arithmetic to prove that int index will not overflow in canonical (counted) loops but we can't do that cheaply for long index. And 99% of loops use int index - so we don't want to spend code on edge case.<br>
<br>
Regards,<br>
Vladimir<span class=""><br>
<br>
<br>
On 5/27/15 5:25 AM, Vitaly Davidovich wrote:<br>
</span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
I don't think there's any fundamental reason, it's just that int loops are more common and so were optimized.<br>
<br>
sent from my phone<br>
<br>
On May 27, 2015 8:09 AM, "Benedikt Wedenik" <<a href="mailto:benedikt.wedenik@theobroma-systems.com" target="_blank">benedikt.wedenik@theobroma-systems.com</a><br></span><span class="">
<mailto:<a href="mailto:benedikt.wedenik@theobroma-systems.com" target="_blank">benedikt.wedenik@theobroma-systems.com</a>>> wrote:<br>
<br>
  First of all, thanks for your quick response :)<br>
  You were absolutely right - but I do not understand why the long counter was the problem.<br>
<br>
  Is there any reason why the loop-unrolling is only available for int loops?<br>
  I mean I guess so - because else it would probably be implemented already.<br>
  But still it would be a nice opportunity for an optimisation :)<br>
<br>
  Benedikt.<br></span><span class="">
  On 27 May 2015, at 13:44, Vitaly Davidovich <<a href="mailto:vitalyd@gmail.com" target="_blank">vitalyd@gmail.com</a> <mailto:<a href="mailto:vitalyd@gmail.com" target="_blank">vitalyd@gmail.com</a>>> wrote:<br>
<br>
</span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
  Also, the safepoint check on each iteration should go away when using an int loop; it'll be coalesced into once<br>
  per unroll factor or may go away entirely if the loop turns into a counted loop.<br>
<br>
  sent from my phone<br>
<br></span><span class="">
  On May 27, 2015 7:39 AM, "Vitaly Davidovich" <<a href="mailto:vitalyd@gmail.com" target="_blank">vitalyd@gmail.com</a> <mailto:<a href="mailto:vitalyd@gmail.com" target="_blank">vitalyd@gmail.com</a>>> wrote:<br>
<br>
    Cause you're using a long as induction variable; change to int and it should unroll.<br>
<br>
    sent from my phone<br>
<br>
    On May 27, 2015 6:46 AM, "Benedikt Wedenik" <<a href="mailto:benedikt.wedenik@theobroma-systems.com" target="_blank">benedikt.wedenik@theobroma-systems.com</a><br></span><span class="">
    <mailto:<a href="mailto:benedikt.wedenik@theobroma-systems.com" target="_blank">benedikt.wedenik@theobroma-systems.com</a>>> wrote:<br>
<br>
      Oh!<br>
<br>
      Thanks :) So then it's not so bad, cause it is (I guess) obligatory.<br>
<br>
      Do you have any idea why this loop does not get unrolled?<br>
<br>
      Benedikt.<br>
<br></span><span class="">
      On 27 May 2015, at 12:36, Andrew Haley <<a href="mailto:aph@redhat.com" target="_blank">aph@redhat.com</a> <mailto:<a href="mailto:aph@redhat.com" target="_blank">aph@redhat.com</a>>> wrote:<br>
<br>
      > On 05/27/2015 11:27 AM, Benedikt Wedenik wrote:<br>
      >><br>
      >> In the hot-loop there is this “ldr†which looked a little “strange†at the first glance.<br>
      >> I think that this load is a null-check? Is that the case?<br>
      ><br>
      > No. It's a safepoint check. HotSpot has to insert one of these because<br>
      > it can't prove that the loop is reasonably short-lived.<br>
      ><br>
      >> I also investigated the generated code on x86 which is quite similar, but instead of a load, they are<br>
      >> using the “testâ€-instruction which performs an “and†but only sets the flags discarding the result.<br>
      >> Is there any similar instruction available on aarch64 or is this already the closest solution?<br>
      ><br>
      > Closest to what? A load to XZR is the best solution: it does not hit<br>
      > the flags. x86 cannot do this.<br>
      ><br>
      > It looks like great code.<br>
      ><br>
      > Andrew.<br>
      ><br>
<br>
</span></blockquote>
<br>
</blockquote>
</blockquote></div><br></div>