================
@@ -279,9 +279,31 @@ static void runNewPMPasses(const Config &Conf, Module 
&Mod, TargetMachine *TM,
   RegisterPassPlugins(Conf.PassPlugins, PB);
 
   std::unique_ptr<TargetLibraryInfoImpl> TLII(
-      new TargetLibraryInfoImpl(TM->getTargetTriple(), TM->Options.VecLib));
+      new TargetLibraryInfoImpl(TM->getTargetTriple()));
   if (Conf.Freestanding)
     TLII->disableAllFunctions();
+
+  TargetLibraryInfo TLI(*TLII);
+  for (unsigned I = 0, E = static_cast<unsigned>(LibFunc::NumLibFuncs); I != E;
+       ++I) {
+    LibFunc F = static_cast<LibFunc>(I);
+    StringRef Name = TLI.getName(F);
+    GlobalValue *Val = Mod.getNamedValue(Name);
+
+    // LibFuncs present in the current TU can always be referenced.
+    if (Val && !Val->isDeclaration())
+      continue;
+
+    // LibFuncs not implemented in bitcode can always be referenced.
+    if (!BitcodeLibFuncs.contains(Name))
+      continue;
+
+    // FIXME: Functions that are somewhere in a ThinLTO link (just not imported
+    // in this module) should not be disabled, as they have already been
+    // extracted.
----------------
teresajohnson wrote:

I think this information could be figured out earlier during the LTO link, 
refining the BitcodeLibFuncs set, which would address it both for regular LTO 
and for (currently in-process only, see other comment) ThinLTO (and you could 
remove the above check whether it is defined in this TU). There's 2 places in 
theory where you could do this:
1) when bitcode files are added to LTO via addModule. However, it looks like 
currently in the linker you are computing the initial set after all the bitcode 
objects are added, so that would need to be reordered.
2) right at the start of LTO::run(). You'd want to consult the 
GlobalResolutions, which is a map from symbol name to the global linker 
resolution info. You could add a loop over the BitcodeLibFuncs, and check if we 
have a GlobalResolution for each. If the Prevailing bool is set then the LTO 
unit contains the prevailing def of the function, and that lib func could then 
be removed from the set.

https://github.com/llvm/llvm-project/pull/164916
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to