<div dir="ltr"><div dir="ltr">On Tue, Jun 9, 2020 at 11:54 AM Shishir V Jessu <<a href="mailto:shishir.jessu@utexas.edu">shishir.jessu@utexas.edu</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi David, <br><br>By "dead" do you mean unreachable?</div></blockquote><div><br>Yep!<br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"> My understanding was that the removal of dead code is simply another optimization, </div></blockquote><div><br>It is, yes.<br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">which should be disabled after adding "optnone"</div></blockquote><div><br>Nah - optnone just means "don't optimize this function" (nor do interprocedural analysis to optimize the call site based on details of the implementation of this function - treat it as though this function were in another translation unit/module that the compiler has no visibility into) - but without any interprocedural analysis, nor any optimization of the body of the function, a call to an optnone function can still be removed if the call is dead.<br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"> (and adding the function to llvm.used so the function doesn't later get deleted entirely).<br></div></blockquote><div><br>llvm.used is there to preserve functions that don't otherwise need to exist - it sounds to me like this isn't a useful tool for your situation - if you manage to preserve the call then the function will be retained (unless it's defined as "available externally" - then the definition of the funcion could be removed, leaving only a declaration). It sounds like you need to preserve the call - so if you succeed at that, then the function body/definition should be retained without the need for llvm.used.<br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I am instrumenting certain basic blocks in an LLVM pass, and would like to compile a binary which structures things the same way the LLVM pass does, to analyze some behavior.</div></blockquote><div><br>Hmm, can't quite picture that from what you've described, sorry.<br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"> I observe that my calls are not removed on -O0 and -O1 for several programs, so it should be the case that the calls are removed on higher optimization levels - but then adding "optnone" isn't protecting all of those calls from being removed. <br></div></blockquote><div><br></div><div>Any number of optimizations might make more code provably dead & then removed, losing your calls.<br><br>- Dave</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"><div dir="ltr"><br>If you have any more insight I'd appreciate it! Thanks for your help.</div><img src="https://my-email-signature.link/signature.gif?u=452460&e=99786309&v=6f5c2705f64df408565969efdd4d60bdf734dc50faf3087448a05f7e6d71089c" style="width: 2px; max-height: 0px; overflow: hidden;"><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 9, 2020 at 1:13 PM David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</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"><div dir="ltr">optnone on such functions should suffice - well, unless the calls turn out to be dead & I don't think there's anything you can do to thwart dead code removal. So what are you trying to preserve the function calls for?</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 9, 2020 at 11:01 AM Shishir V Jessu via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.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"><div dir="ltr"><div dir="ltr">Hello, <br><br>I am adding function calls to an LLVM link-time optimization (LTO) pass, using the <font face="monospace">IRBuilder::CreateCall </font>method. I want these calls to remain in the final x86 binary at any optimization level, but on levels -O2 and -O3, some of these calls are being optimized out. <br><br>So far, I've tried adding each function in the program (excluding LLVM intrinsics) to the <font face="monospace">llvm.used </font>set, and I've also set <font face="monospace">noinline</font> and <font face="monospace">optnone</font> attributes on each function in the program. This has allowed me to retain <i>most, </i>but not all, of the calls I've added with <font face="monospace">IRBuilder::CreateCall. </font><br><font face="arial, sans-serif"><br>Furthermore, I have confirmed that all the calls I've created are present in the LLVM IR that results immediately after my pass. Thus, I know some future LTO pass is optimizing out some of these calls. <br><br>How can I ensure that none of the calls I add are optimized out? Thanks for your help!<br><br>Best, <br>Shishir Jessu</font></div></div>
_______________________________________________<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="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>
</blockquote></div>
</blockquote></div></div>