<div dir="ltr">Hi,<div><br></div><div>Previously, I made commit r219401 that try to enable partial & runtime unrolling on cortex-a57, but I forgot to call base TTI implementation in target specific hook, so those unrolling methods are not really enabled.</div><div><br></div><div>Here are the patch to get them enabled and 2 related patches to improve it. </div><div><br></div><div>0001 - Run LICM pass after loop unrolling pass. Runtime unrollng will introduce a runtime check in loop prologue(you can treat it as a loop preheader). If the unrolled loop is a inner loop, then the proglogue will be inside the outer loop. LICM pass can help to promote the runtime check out if the checked value is loop invariant.</div><div><br></div><div>0002 - Introduce runtime unrolling disable matadata and use it to mark the scalar loop from vectorization. Runtime unrolling is an expensive optimization which can bring benefit only if the loop is hot and iteration number is relatively large enough. For some loops, we know they are not worth to be runtime unrolled. The scalar loop from vectorization is one of the cases.</div><div><br></div><div>0003 - <span style="font-size:13.63636302948px">Enable partial & runtime </span><span class="" style="font-size:13.63636302948px">unrolling</span><span style="font-size:13.63636302948px"> on cortex-a57, and double the unrolling threshold if the loop depth > 1. For inner one of nested loops, it is more likely to be a hot loop, and the runtime check can be promoted out from patch 0001, so the overhead is less, we can try a larger threshold to unroll more loops.</span></div><div><span style="font-size:13.63636302948px"><br></span></div><div><span style="font-size:13.63636302948px"><br></span></div><div><span style="font-size:13.63636302948px">Combined above changes together, we can get below performance and code size changes.</span></div><div><span style="font-size:13.63636302948px"><br></span></div><div><span style="font-size:13.63636302948px">Benchmark</span><span class="" style="font-size:13.63636302948px;white-space:pre">     </span><span style="font-size:13.63636302948px">Execution time</span><span class="" style="font-size:13.63636302948px;white-space:pre">       </span><span style="font-size:13.63636302948px">code bloat</span><br></div><div><div style><span style="font-size:13.63636302948px">spec.cpu2000.179_art<span class="" style="white-space:pre">       </span>-16.567%<span class="" style="white-space:pre">  </span>8.805%</span></div><div style><span style="font-size:13.63636302948px">spec.cpu2000.177_mesa<span class="" style="white-space:pre">    </span>-2.771%<span class="" style="white-space:pre">   </span>1.912%</span></div><div style><span style="font-size:13.63636302948px">spec.cpu2006.483_xalancbmk<span class="" style="white-space:pre">       </span>-2.555%<span class="" style="white-space:pre">   </span>0.076%</span></div><div style><span style="font-size:13.63636302948px">spec.cpu2000.256_bzip2<span class="" style="white-space:pre">   </span>-1.648%<span class="" style="white-space:pre">   </span>2.414%</span></div><div style><span style="font-size:13.63636302948px">spec.cpu2006.433_milc<span class="" style="white-space:pre">    </span>-1.228%<span class="" style="white-space:pre">   </span>1.353%</span></div><div style><span style="font-size:13.63636302948px">spec.cpu2006.456_hmmer<span class="" style="white-space:pre">   </span>-1.079%<span class="" style="white-space:pre">   </span>2.413%</span></div><div style><span class="" style="white-space:pre;font-size:13.63636302948px">               </span></div><div style><span style="font-size:13.63636302948px">spec.cpu2006.462_libquantum<span class="" style="white-space:pre"> </span>2.492%<span class="" style="white-space:pre">    </span>1.482%</span></div><div style><span style="font-size:13.63636302948px">spec.cpu2000.253_perlbmk<span class="" style="white-space:pre"> </span>1.563%<span class="" style="white-space:pre">    </span>0.464%</span></div><div style><span style="font-size:13.63636302948px">spec.cpu2006.450_soplex<span class="" style="white-space:pre">  </span>1.379%<span class="" style="white-space:pre">    </span>1.925%</span></div><div style><span style="font-size:13.63636302948px">spec.cpu2000.186_crafty<span class="" style="white-space:pre">  </span>1.242%<span class="" style="white-space:pre">    </span>0.005%</span></div><div style><span class="" style="white-space:pre;font-size:13.63636302948px">               </span></div><div style><span style="font-size:13.63636302948px">spec.geomean    <span class="" style="white-space:pre">  </span>-0.546%<span class="" style="white-space:pre">   </span>0.952%</span></div></div><div><br></div><div>Please review. Thanks.</div><div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Best Regards,<div><br></div><div>Kevin Qin</div></div></div>
</div></div>