<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Thu, Jun 22, 2017 at 10:45 AM Joerg Sonnenberger via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@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">On Thu, Jun 22, 2017 at 05:35:51PM +0000, David Blaikie wrote:<br>
> optnone should work, but really noinline should probably (Chandler: Can you<br>
> confirm: is it reasonable to model noinline as "no interprocedural analysis<br>
> across this function boundary" (so FunctionAttrs should do the same thing<br>
> for noinline as it does for optnone, for example? ie: not derive any new<br>
> attributes) - allowing the function to be optimized internally (unlike<br>
> optnone) but not allowing interprocedural analysis inside the function to<br>
> be used in callers (unlike optnone)) work as well?<br>
<br>
I don't think it is reasonable to expect "noinline" to mean "must not do<br>
IPA". There are different reasons for using "noinline": ensuring a stack<br>
frame, forcing outlining of "cold" code etc. Many of those reasons are<br>
perfectly fine to still allow IPA. Debug hooks fall into two categories:<br>
making sure that the call happens (noinline should allow that)</blockquote><div><br></div><div>noinline (& in fact, even optnone) doesn't make sure the call happens - various forms of IPA can cause a call to go away without actually inlining. <br><br>(simplest example, that even the inliner got wrong (& I fixed recently, which is why any of this comes to mind/I have any context on it) - the inliner removed a call to an optnone+readnone function without consulting the inliner heuristic (this was in the alwaysinliner) because it assumed the operation was so cheap no inliner heuristic would ever disagree, basically ;) )<br><br>But some other optimization could/would still remove a noinline+readnone function because it's a trivially dead instruction (assuming the result isn't used). So noinline doesn't preserve the call - because some IPA can, in some cases, be as powerful as inlining-ish.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> and<br>
making sure that the debugger can actually do something at this point<br>
(noinline should not have to allow that).<br>
<br>
Joerg<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div>