<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:times new roman,serif"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jul 15, 2020 at 10:03 PM Wenlei He via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">wenlei added a comment.<br>
<br>
In D83743#2153532 <<a href="https://reviews.llvm.org/D83743#2153532" rel="noreferrer" target="_blank">https://reviews.llvm.org/D83743#2153532</a>>, @wmi wrote:<br>
<br>
> Thanks for the explanation.<br>
><br>
> > We could also replay CGSCC inline of one build in another. The way it's implemented would work for those scenarios.<br>
><br>
> When you replay CGSCC, the inline decision in replay file should have order? If it is unordered, I cannot see how it can replay CGSCC inline from another build exactly.<br>
<br>
<br>
I might be missing something, but here's how I think about this. For a given inline decision, say D on A->B->C path, we would only evaluate once and make that decision once. Then for replay, assuming we follow the same bottom-up order</blockquote><div><br></div><div><div class="gmail_default" style="font-family:"times new roman",serif">Ok, that is the assumption I didn't hold before. That means the source and compiler shouldn't be changed between the last build and the replay. </div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">, for each call site, we can retrieve that exact decision from input remarks, and as long as we make the same decisions, the sequence of call sites that gets exposed for evaluation will also be the same. Because we evaluate call site for each path only once<span class="gmail_default" style="font-family:"times new roman",serif">,</span></blockquote><div><br></div><div><div class="gmail_default" style="font-family:"times new roman",serif">That may not be true for CGSCC inline because one SCC can be visited multiple times after the indirect call promotion or inline cleanup add/remove the SCC edges.</div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">any decision recorded in remarks should be unique, then I'm not sure how order of the inline remarks interfere with replay.<br>
<br>
> <br>
> <br>
>> Our current use case is not in the SCC inliner. But yeah, I image it could be useful there too. In general I feel some mechanism like this one to allow external input for tweaking inlining decision can be useful, mostly for tuning and experimental purpose. We currently don't have a good way of doing that, existing attributes like alwaysinline is function level, not call site level. And per-callsite inline intrinsic like <a href="https://reviews.llvm.org/D51200" rel="noreferrer" target="_blank">https://reviews.llvm.org/D51200</a> is intrusive and hard to push through either. I thought this is a relatively easy and clean way of getting that functionality for tuning.<br>
> <br>
> That is the scenario I am interested -- using it for tweaking inlining decision for tuning/experimental purpose. I understand it could need a lot more work than this patch and we may not need to address them currently. I just want to know how it should work in your mind. Could you explain it in more detail?<br>
<br>
I am considering different modes for replay in the future, the first is strict mode like what we have here - we simply replay everything faithfully. The second mode is positive replay, e.g. we only apply extra inlining using the input. A third mode can be negative replay, that is we prohibit inlining specified in input without affecting others. Orthogonally, we sometime may also want to focus on a specific inline tree, so it may be useful to have an unknown decision from advisor, then we can fall back to other advisors for decisions outside of the inline tree specified in input.<br></blockquote><div><br></div><div><div class="gmail_default" style="font-family:"times new roman",serif">Ok, thanks.</div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
<br>
Repository:<br>
  rG LLVM Github Monorepo<br>
<br>
CHANGES SINCE LAST ACTION<br>
  <a href="https://reviews.llvm.org/D83743/new/" rel="noreferrer" target="_blank">https://reviews.llvm.org/D83743/new/</a><br>
<br>
<a href="https://reviews.llvm.org/D83743" rel="noreferrer" target="_blank">https://reviews.llvm.org/D83743</a><br>
<br>
<br>
<br>
</blockquote></div></div>