<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Mon, Aug 14, 2017 at 6:38 PM Xinliang David Li via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Aug 14, 2017 at 6:31 PM, Chandler Carruth via Phabricator <span dir="ltr"><<a href="mailto:reviews@reviews.llvm.org" target="_blank">reviews@reviews.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">chandlerc added a comment.<br>
<span><br>
In <a href="https://reviews.llvm.org/D36726#841627" rel="noreferrer" target="_blank">https://reviews.llvm.org/D36726#841627</a>, @davidxl wrote:<br>
<br>
> I will provide more comments on propagating the inline hint later. However, I do think it is wrong to propagate the cold attribute in inliner -- there should be already an inter-procedural attribute propagation pass that does this.<br>
<br>
<br>
</span>While I'd love to teach our IPO attribute propagation to do that, we might still need to do it here. The inliner might make the opportunity for this propagation visible and then delete the call removing the chance to do it all within a single pass run, and the interprocedural pass never get a chance to see the intermediate state.<br></blockquote><div><br></div><div><br></div></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>Not sure I understand this. Do you have an example showing that IPO prop won't work?</div></div></div></div></blockquote><div><br></div><div>The inliner initially sees a direct call from A to B. The returned value is a pointer which is in turn called. Neither A nor B are cold. Be returns the address of a function C which is cold.</div><div><br></div><div>After inlining, A has a direct call to C (a cold function). The inliner can iterate to this without any other pass running and inline C into A.</div><div><br></div><div>There is no longer a call edge to a cold function, we've lost the chance to propagate anything. =/</div></div></div>