<div dir="ltr"><div>Hi,</div><div><br></div><div>PS: It is a generic question related to partial loop unrolling, and nothing specific to LLVM.</div><div><br></div><div>As far as partial loop unrolling is concerned, I could see following three different possibilities. Assume that unroll factor is 3.<br>
</div><div><br></div><div>Original loop:</div><div>      for (i = 0; i < 10; i++)</div><div>      {</div><div>           do_foo(i);</div><div>      } </div><div><br></div><div>1. First possibility</div><div>      i = 0;</div>
<div>      do_foo(i++);</div><div>      do_foo(i++);</div><div>      do_foo(i++);</div><div>      for (; i < 10; i++)<br></div><div>      {</div><div>           do_foo(i);</div><div>      } </div><div><br></div><div>2. Second possibility</div>
<div><div>      for (i = 0; i < 7; i++)</div><div>      {</div><div>           do_foo(i);</div><div>      } </div></div><div>      do_foo(i++);</div><div>      do_foo(i++);</div><div>      do_foo(i++);</div><div><br></div>
<div>3. Third possibility</div><div><div>      for (i = 0; i < 10;)</div><div>      {</div><div>           do_foo(i++);</div><div>           do_foo(i++);</div><div>           do_foo(i++);</div><div>      } </div></div>
<div><br></div><div>My questions are:</div><div><br></div><div>a. In case, if we get any performance improvement due to partial loop unrolling, are all the three possibilities give almost same performance improvement?</div>
<div><br></div><div>b. If answer to question 'a' is 'no', then which one of these three possibilities is ideal for generic partial unrolling implementation? and in general, which one of these is implemented in production compilers? and in particular, which one of these is implemented in LLVM compiler?</div>
<div><br></div><div><br></div>-- <br><div>mahesha</div>
</div>