[PATCH] D12024: COFF: Introduce flag /opt:lldlto=N for controlling LTO optimization level.
Peter Collingbourne via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 13 21:47:55 PDT 2015
This revision was automatically updated to reflect the committed changes.
Closed by commit rL245027: COFF: Introduce flag /opt:lldlto=N for controlling LTO optimization level. (authored by pcc).
Changed prior to commit:
http://reviews.llvm.org/D12024?vs=32123&id=32128#toc
Repository:
rL LLVM
http://reviews.llvm.org/D12024
Files:
lld/trunk/COFF/Config.h
lld/trunk/COFF/Driver.cpp
lld/trunk/COFF/SymbolTable.cpp
lld/trunk/test/COFF/lto-opt-level.ll
Index: lld/trunk/test/COFF/lto-opt-level.ll
===================================================================
--- lld/trunk/test/COFF/lto-opt-level.ll
+++ lld/trunk/test/COFF/lto-opt-level.ll
@@ -0,0 +1,21 @@
+; RUN: llvm-as -o %t.obj %s
+; RUN: lld-link /out:%t0.exe /entry:main /subsystem:console /opt:lldlto=0 /debug %t.obj
+; RUN: llvm-nm %t0.exe | FileCheck --check-prefix=CHECK-O0 %s
+; RUN: lld-link /out:%t2.exe /entry:main /subsystem:console /opt:lldlto=2 /debug %t.obj
+; RUN: llvm-nm %t2.exe | FileCheck --check-prefix=CHECK-O2 %s
+; RUN: lld-link /out:%t2a.exe /entry:main /subsystem:console /debug %t.obj
+; RUN: llvm-nm %t2a.exe | FileCheck --check-prefix=CHECK-O2 %s
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc"
+
+; CHECK-O0: foo
+; CHECK-O2-NOT: foo
+define internal void @foo() {
+ ret void
+}
+
+define void @main() {
+ call void @foo()
+ ret void
+}
Index: lld/trunk/COFF/Driver.cpp
===================================================================
--- lld/trunk/COFF/Driver.cpp
+++ lld/trunk/COFF/Driver.cpp
@@ -369,6 +369,14 @@
Config->ICF = true;
continue;
}
+ if (StringRef(S).startswith("lldlto=")) {
+ StringRef OptLevel = StringRef(S).substr(7);
+ if (OptLevel.getAsInteger(10, Config->LTOOptLevel) ||
+ Config->LTOOptLevel > 3) {
+ error("/opt:lldlto: invalid optimization level: " + OptLevel);
+ }
+ continue;
+ }
if (S != "ref" && S != "icf" && S != "noicf" &&
S != "lbr" && S != "nolbr" &&
!StringRef(S).startswith("icf=")) {
Index: lld/trunk/COFF/SymbolTable.cpp
===================================================================
--- lld/trunk/COFF/SymbolTable.cpp
+++ lld/trunk/COFF/SymbolTable.cpp
@@ -343,6 +343,7 @@
// Create an object file and add it to the symbol table by replacing any
// DefinedBitcode symbols with the definitions in the object file.
LTOCodeGenerator CG;
+ CG.setOptLevel(Config->LTOOptLevel);
ObjectFile *Obj = createLTOObject(&CG);
for (SymbolBody *Body : Obj->getSymbols()) {
Index: lld/trunk/COFF/Config.h
===================================================================
--- lld/trunk/COFF/Config.h
+++ lld/trunk/COFF/Config.h
@@ -87,6 +87,9 @@
// Used for /opt:icf
bool ICF = false;
+ // Used for /opt:lldlto=N
+ unsigned LTOOptLevel = 2;
+
// Used for /merge:from=to (e.g. /merge:.rdata=.text)
std::map<StringRef, StringRef> Merge;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D12024.32128.patch
Type: text/x-patch
Size: 2487 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150814/e7a8f936/attachment.bin>
More information about the llvm-commits
mailing list