Skip to content
Snippets Groups Projects
Commit 1f5cfa9f authored by Peter Collingbourne's avatar Peter Collingbourne
Browse files

Apply summary-based dead stripping to regular LTO modules with summaries.

If a regular LTO module has a summary index, then instead of linking
it into the combined regular LTO module right away, add it to the
combined summary index and associate it with a special module that
represents the combined regular LTO module.

Any such modules are linked during LTO::run(), at which time we use
the results of summary-based dead stripping to control whether to
link prevailing symbols.

Differential Revision: https://reviews.llvm.org/D33922

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@305482 91177308-0d34-0410-b5e6-96231b3b80d8
parent 8660d557
No related branches found
No related tags found
No related merge requests found
...@@ -964,11 +964,11 @@ Expected<BitcodeModule> clang::FindThinLTOModule(MemoryBufferRef MBRef) { ...@@ -964,11 +964,11 @@ Expected<BitcodeModule> clang::FindThinLTOModule(MemoryBufferRef MBRef) {
if (!BMsOrErr) if (!BMsOrErr)
return BMsOrErr.takeError(); return BMsOrErr.takeError();
// The bitcode file may contain multiple modules, we want the one with a // The bitcode file may contain multiple modules, we want the one that is
// summary. // marked as being the ThinLTO module.
for (BitcodeModule &BM : *BMsOrErr) { for (BitcodeModule &BM : *BMsOrErr) {
Expected<bool> HasSummary = BM.hasSummary(); Expected<BitcodeLTOInfo> LTOInfo = BM.getLTOInfo();
if (HasSummary && *HasSummary) if (LTOInfo && LTOInfo->IsThinLTO)
return BM; return BM;
} }
......
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @f2() {
ret void
}
!0 = !{i32 1, !"ThinLTO", i32 0}
!llvm.module.flags = !{ !0 }
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
; RUN: opt -module-summary -o %t1.o %s ; RUN: opt -module-summary -o %t1.o %s
; RUN: llvm-lto -thinlto -o %t %t1.o ; RUN: llvm-lto -thinlto -o %t %t1.o
; RUN: opt -o %t2.o %S/Inputs/thinlto_backend.ll ; RUN: opt -module-summary -o %t2.o %S/Inputs/thinlto-multi-module.ll
; RUN: llvm-cat -b -o %t1cat.o %t1.o %t2.o ; RUN: llvm-cat -b -o %t1cat.o %t2.o %t1.o
; RUN: cp %t1cat.o %t1.o ; RUN: cp %t1cat.o %t1.o
; RUN: %clang -target x86_64-unknown-linux-gnu -O2 -o %t3.o -x ir %t1.o -c -fthinlto-index=%t.thinlto.bc ; RUN: %clang -target x86_64-unknown-linux-gnu -O2 -o %t3.o -x ir %t1.o -c -fthinlto-index=%t.thinlto.bc
; RUN: llvm-nm %t3.o | FileCheck --check-prefix=CHECK-OBJ %s ; RUN: llvm-nm %t3.o | FileCheck --check-prefix=CHECK-OBJ %s
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment