<div dir="ltr">Hi David, <br><br>By "dead" do you mean unreachable? My understanding was that the removal of dead code is simply another optimization, which should be disabled after adding "optnone" (and adding the function to llvm.used so the function doesn't later get deleted entirely). <br><br>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. 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><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:0;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">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>