<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Mar 12, 2016 at 11:05 AM, Wei Mi <span dir="ltr"><<a href="mailto:wmi@google.com" target="_blank">wmi@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">> GCC has two things that do LICM, PRE and tree-loop-licm.<br>
<br>
</span>Thanks for the explanation of PRE and LICM in GCC.<br>
<span class=""><br>
>> And I don't think doing opt aggressively without known benefit and<br>
>> then nullify it is a good idea.<br>
><br>
><br>
> This is a common point of contention in compilers.<br>
> IME, most compilers fall on the side of "we don't try to take register<br>
> pressure into account in the middle, because it's really hard to say what is<br>
> going to happen 10+ passes down the road, and not easy to estimate<br>
> accurately on today's architectures".<br>
><br>
> GCC and LLVM definitely fall into that case.<br>
><br>
<br>
</span>Agree that usually we don't try to take register pressure into account<br>
in the middle. But there is special case, like llvm interleave in<br>
vectorization. I also don't try to get a precise register model to use<br>
in middle end. I just want to obviate apparent non-beneficial cases<br>
which only increase compile time. That is why I do the throttling in a<br>
constrain way -- only on very large loops, only on cheap instruction,<br>
and only when reg pressure is high based on estimation.<br></blockquote><div><br></div><div>The question is whether the compile time increase is due to LICM or caused by inefficiency in other part of the LLVM that gets exposed by LICM. If LICM is not the root cause, fixing it here does look like the wrong place (aka, papering over the real problem else where).</div><div><br></div><div>Regarding register pressure aware LICM,  fixing register rematerialization logic and making it more powerful can go a long way.  </div><div><br></div><div>thanks,</div><div><br></div><div>David</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
If I still see perf regression, I may either try getting the constrain<br>
more strictly, or reflect if there is real deficiency to do it in this<br>
way. It will be based on more testing (For my limited testing -- llvm<br>
testsuite and google internal perf testing on x86-64, I havn't seen<br>
regressions for now).<br>
<br>
Thanks,<br>
Wei.<br>
</blockquote></div><br></div></div>