<div dir="ltr">LTO itself has global dead code elimination. Try disabling with an internal option: -Wl,-mllvm,-compute-dead=false.<br><div><br></div><div>Teresa</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Feb 24, 2021 at 8:46 AM Marc 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:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I am writing an LTO plugin path that should be run before optimization,<br>
however before my pass is running functions have already been removed.<br>
<br>
Simple example below.<br>
b.c contains foo(), bar() and foobar(). a.c contains the main and runs<br>
either foo() or bar() but not foobar().<br>
<br>
The bitcode file that ld.lld receives still contains the empty foobar()<br>
function. I try to prevent any kind of optimization - but still the<br>
foobar() function is already eliminated before the plugin is running.<br>
<br>
How can I prevent the elimination of dead code?<br>
I already use -O0 -fno-inline -fno-inline-functions -Wl,--discard-none<br>
-Wl,--lto-O0 -femit-all-decls -fno-virtual-function-elimination<br>
-Wl,--no-gc-sections<br>
Thank you!<br>
<br>
# cat a.c<br>
#include <stdio.h><br>
int main(int argc, char **argv) {<br>
  if (argc == 2)<br>
    foo();<br>
  else<br>
    bar();<br>
  return 0;<br>
}<br>
<br>
# cat b.c<br>
void foo() {}<br>
void bar() {}<br>
void foobar() {}<br>
<br>
# cat f.cpp<br>
#include "llvm/Support/Debug.h"<br>
#include "llvm/Support/raw_ostream.h"<br>
#include "llvm/IR/LegacyPassManager.h"<br>
#include "llvm/IR/Module.h"<br>
#include "llvm/Transforms/IPO/PassManagerBuilder.h"<br>
#include "llvm/Pass.h"<br>
using namespace llvm;<br>
namespace {<br>
class Unreachable : public ModulePass {<br>
 public:<br>
  static char ID;<br>
  Unreachable() : ModulePass(ID) {}<br>
  bool runOnModule(Module &M) override;<br>
};<br>
}<br>
char Unreachable::ID = 0;<br>
bool Unreachable::runOnModule(Module &M) {<br>
  errs() << "Running plugin ...\n";<br>
  for (auto &F : M)<br>
    errs() << F.getName() << "\n";<br>
  return true;<br>
}<br>
static void registerUnreachablePass(const PassManagerBuilder &,<br>
legacy::PassManagerBase &PM) {<br>
  auto p = new Unreachable();<br>
  PM.add(p);<br>
}<br>
static RegisterStandardPasses RegisterUnreachablePassLTO(<br>
    PassManagerBuilder::EP_FullLinkTimeOptimizationEarly,<br>
    registerUnreachablePass);<br>
<br>
# export CFLAGS="-O0 -g -flto=full"<br>
# clang $CFLAGS -c a.c<br>
# clang $CFLAGS -c b.c<br>
# clang++ `llvm-config --cxxflags` -fno-rtti -fPIC -std=c++14 -o f.so<br>
-shared f.cpp<br>
<br>
# clang -fno-inline -fno-inline-functions -Wl,--discard-none<br>
-Wl,--lto-O0 -femit-all-decls -fno-virtual-function-elimination<br>
-Wl,--no-gc-sections -fuse-ld=/usr/bin/ld.lld $CFLAGS<br>
-fno-experimental-new-pass-manager -Wl,-mllvm=-load=./f.so -o ab a.o b.o<br>
<br>
Running plugin ...<br>
main<br>
llvm.dbg.declare<br>
foo<br>
bar<br>
<br>
#^^^the foobar function is gone :-(<br>
<br>
Regards,<br>
Marc<br>
<br>
-- <br>
Marc Heuse<br>
<a href="http://www.mh-sec.de" rel="noreferrer" target="_blank">www.mh-sec.de</a><br>
<br>
PGP: AF3D 1D4C D810 F0BB 977D  3807 C7EE D0A0 6BE9 F573<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="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><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><span style="font-family:Times;font-size:medium"><table cellspacing="0" cellpadding="0"><tbody><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small"><td nowrap style="border-top:2px solid rgb(213,15,37)">Teresa Johnson |</td><td nowrap style="border-top:2px solid rgb(51,105,232)"> Software Engineer |</td><td nowrap style="border-top:2px solid rgb(0,153,57)"> <a href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.com</a> |</td><td nowrap style="border-top:2px solid rgb(238,178,17)"><br></td></tr></tbody></table></span></div></div></div>