[PATCH] D94630: [LTO] Add support for existing Config::Freestanding option.

Florian Hahn via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 13 13:00:28 PST 2021


fhahn created this revision.
fhahn added reviewers: steven_wu, tejohnson, dexonsmith, probinson, asbirlea.
Herald added subscribers: hiraditya, inglorion.
fhahn requested review of this revision.
Herald added a project: LLVM.

lto::Config has a field to control whether the build is "freestanding"
(no builtins) or not, but it is not hooked up to the code actually
running the passes.

This patch adds support for the flag to both the code that runs
optimization with the new and old pass managers, by explicitly adding a
TargetLibraryInfo instance. If Freestanding is true, all library functions
are disabled.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D94630

Files:
  llvm/lib/LTO/LTOBackend.cpp
  llvm/test/LTO/X86/tli-nobuiltin.ll
  llvm/tools/llvm-lto2/llvm-lto2.cpp


Index: llvm/tools/llvm-lto2/llvm-lto2.cpp
===================================================================
--- llvm/tools/llvm-lto2/llvm-lto2.cpp
+++ llvm/tools/llvm-lto2/llvm-lto2.cpp
@@ -158,6 +158,11 @@
     PassPlugins("load-pass-plugin",
                 cl::desc("Load passes from plugin library"));
 
+static cl::opt<bool>
+    EnableFreestanding("lto-freestanding",
+             cl::desc("Enable Freestanding (disable builtins / TLI) during LTO"),
+             cl::init(false), cl::Hidden);
+
 static void check(Error E, std::string Msg) {
   if (!E)
     return;
@@ -269,6 +274,7 @@
 
   Conf.OptLevel = OptLevel - '0';
   Conf.UseNewPM = UseNewPM;
+  Conf.Freestanding = EnableFreestanding;
   for (auto &PluginFN : PassPlugins)
     Conf.PassPlugins.push_back(PluginFN);
   switch (CGOptLevel) {
Index: llvm/test/LTO/X86/tli-nobuiltin.ll
===================================================================
--- llvm/test/LTO/X86/tli-nobuiltin.ll
+++ llvm/test/LTO/X86/tli-nobuiltin.ll
@@ -11,6 +11,25 @@
 ; RUN: llvm-nm %t.o | FileCheck %s --check-prefix=LTO-FREESTANDING
 ; LTO-FREESTANDING: fprintf
 
+; Test -lto-freestanding option for LTOBackend & legacy PM.
+
+; RUN: llvm-lto2 run -r %t.bc,_fprintf,px -r %t.bc,_hello_world,px -r %t.bc,_percent_s,px  -r %t.bc,_foo,px %t.bc -o %t1.o 2>&1
+; RUN: llvm-nm %t1.o.0 | FileCheck %s --check-prefix=LTO
+
+; RUN: llvm-lto2 run -lto-freestanding -r %t.bc,_fprintf,px -r %t.bc,_hello_world,px -r %t.bc,_percent_s,px  -r %t.bc,_foo,px %t.bc -o %t2.o 2>&1
+; RUN: llvm-nm %t2.o.0 | FileCheck %s --check-prefix=LTO-FREESTANDING
+
+; Test -lto-freestanding option for LTOBackend & new PM.
+
+; TODO: the new PM ignores the option at the moment.
+
+; RUN: llvm-lto2 run -use-new-pm -r %t.bc,_fprintf,px -r %t.bc,_hello_world,px -r %t.bc,_percent_s,px  -r %t.bc,_foo,px %t.bc -o %t1.o 2>&1
+; RUN: llvm-nm %t1.o.0 | FileCheck %s --check-prefix=LTO
+
+; RUN: llvm-lto2 run -use-new-pm -lto-freestanding -r %t.bc,_fprintf,px -r %t.bc,_hello_world,px -r %t.bc,_percent_s,px  -r %t.bc,_foo,px %t.bc -o %t2.o 2>&1
+; RUN: llvm-nm %t2.o.0 | FileCheck %s --check-prefix=LTO
+
+
 target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-apple-macosx10.11.0"
 
Index: llvm/lib/LTO/LTOBackend.cpp
===================================================================
--- llvm/lib/LTO/LTOBackend.cpp
+++ llvm/lib/LTO/LTOBackend.cpp
@@ -302,6 +302,11 @@
   CGSCCAnalysisManager CGAM;
   ModuleAnalysisManager MAM;
 
+  std::unique_ptr<TargetLibraryInfoImpl> TLII(new TargetLibraryInfoImpl(Triple(TM->getTargetTriple())));
+  if (Conf.Freestanding)
+    TLII->disableAllFunctions();
+  FAM.registerPass([&] { return TargetLibraryAnalysis(*TLII); });
+
   // Register the AA manager first so that our version is the one used.
   FAM.registerPass([&] { return std::move(AA); });
 
@@ -335,6 +340,8 @@
 
   PassManagerBuilder PMB;
   PMB.LibraryInfo = new TargetLibraryInfoImpl(Triple(TM->getTargetTriple()));
+  if (Conf.Freestanding)
+    PMB.LibraryInfo->disableAllFunctions();
   PMB.Inliner = createFunctionInliningPass();
   PMB.ExportSummary = ExportSummary;
   PMB.ImportSummary = ImportSummary;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D94630.316499.patch
Type: text/x-patch
Size: 3204 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210113/5c800827/attachment.bin>


More information about the llvm-commits mailing list