[lld] r265053 - ELF: Add flag for controlling LTO optimization level.

Peter Collingbourne via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 31 14:00:28 PDT 2016


Author: pcc
Date: Thu Mar 31 16:00:27 2016
New Revision: 265053

URL: http://llvm.org/viewvc/llvm-project?rev=265053&view=rev
Log:
ELF: Add flag for controlling LTO optimization level.

Differential Revision: http://reviews.llvm.org/D18667

Added:
    lld/trunk/test/ELF/lto/opt-level.ll
Modified:
    lld/trunk/ELF/Config.h
    lld/trunk/ELF/Driver.cpp
    lld/trunk/ELF/LTO.cpp
    lld/trunk/ELF/Options.td

Modified: lld/trunk/ELF/Config.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Config.h?rev=265053&r1=265052&r2=265053&view=diff
==============================================================================
--- lld/trunk/ELF/Config.h (original)
+++ lld/trunk/ELF/Config.h Thu Mar 31 16:00:27 2016
@@ -90,6 +90,7 @@ struct Configuration {
   ELFKind EKind = ELFNoneKind;
   uint16_t EMachine = llvm::ELF::EM_NONE;
   uint64_t EntryAddr = -1;
+  unsigned LtoO = 2;
   unsigned Optimize = 0;
 };
 

Modified: lld/trunk/ELF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=265053&r1=265052&r2=265053&view=diff
==============================================================================
--- lld/trunk/ELF/Driver.cpp (original)
+++ lld/trunk/ELF/Driver.cpp Thu Mar 31 16:00:27 2016
@@ -282,6 +282,12 @@ void LinkerDriver::readConfigs(opt::Inpu
       error("invalid optimization level");
   }
 
+  if (auto *Arg = Args.getLastArg(OPT_lto_O)) {
+    StringRef Val = Arg->getValue();
+    if (Val.getAsInteger(10, Config->LtoO))
+      error("invalid optimization level");
+  }
+
   if (auto *Arg = Args.getLastArg(OPT_hash_style)) {
     StringRef S = Arg->getValue();
     if (S == "gnu") {

Modified: lld/trunk/ELF/LTO.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LTO.cpp?rev=265053&r1=265052&r2=265053&view=diff
==============================================================================
--- lld/trunk/ELF/LTO.cpp (original)
+++ lld/trunk/ELF/LTO.cpp Thu Mar 31 16:00:27 2016
@@ -62,7 +62,7 @@ static void runLTOPasses(Module &M, Targ
   PMB.VerifyOutput = true;
   PMB.LoopVectorize = true;
   PMB.SLPVectorize = true;
-  PMB.OptLevel = 2; // FIXME: This should be an option.
+  PMB.OptLevel = Config->LtoO;
   PMB.populateLTOPassManager(LtoPasses);
   LtoPasses.run(M);
 

Modified: lld/trunk/ELF/Options.td
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Options.td?rev=265053&r1=265052&r2=265053&view=diff
==============================================================================
--- lld/trunk/ELF/Options.td (original)
+++ lld/trunk/ELF/Options.td Thu Mar 31 16:00:27 2016
@@ -75,6 +75,9 @@ def init : Separate<["-"], "init">, Meta
 def l : JoinedOrSeparate<["-"], "l">, MetaVarName<"<libName>">,
   HelpText<"Root name of library to use">;
 
+def lto_O : Joined<["--"], "lto-O">, MetaVarName<"<opt-level>">,
+  HelpText<"Optimization level for LTO">;
+
 def m : JoinedOrSeparate<["-"], "m">,
   HelpText<"Set target emulation">;
 

Added: lld/trunk/test/ELF/lto/opt-level.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/lto/opt-level.ll?rev=265053&view=auto
==============================================================================
--- lld/trunk/test/ELF/lto/opt-level.ll (added)
+++ lld/trunk/test/ELF/lto/opt-level.ll Thu Mar 31 16:00:27 2016
@@ -0,0 +1,21 @@
+; RUN: llvm-as -o %t.o %s
+; RUN: ld.lld -o %t0 -m elf_x86_64 -e main --lto-O0 %t.o
+; RUN: llvm-nm %t0 | FileCheck --check-prefix=CHECK-O0 %s
+; RUN: ld.lld -o %t2 -m elf_x86_64 -e main --lto-O2 %t.o
+; RUN: llvm-nm %t2 | FileCheck --check-prefix=CHECK-O2 %s
+; RUN: ld.lld -o %t2a -m elf_x86_64 -e main %t.o
+; RUN: llvm-nm %t2a | FileCheck --check-prefix=CHECK-O2 %s
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+; CHECK-O0: foo
+; CHECK-O2-NOT: foo
+define internal void @foo() {
+  ret void
+}
+
+define void @main() {
+  call void @foo()
+  ret void
+}




More information about the llvm-commits mailing list