[PATCH] D42514: [ThinLTO/gold] Write empty imports even for modules with symbols
Vitaly Buka via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 24 16:32:40 PST 2018
vitalybuka created this revision.
vitalybuka added reviewers: pcc, eugenis.
Herald added subscribers: eraman, inglorion, mehdi_amini.
ThinLTO may skip object for other reasons, e.g. if there is no summary.
https://reviews.llvm.org/D42514
Files:
llvm/test/tools/gold/X86/v1.12/thinlto_emit_linked_objects.ll
llvm/tools/gold/gold-plugin.cpp
Index: llvm/tools/gold/gold-plugin.cpp
===================================================================
--- llvm/tools/gold/gold-plugin.cpp
+++ llvm/tools/gold/gold-plugin.cpp
@@ -880,22 +880,20 @@
if (options::thinlto && !HandleToInputFile.count(F.leader_handle))
HandleToInputFile.insert(std::make_pair(
F.leader_handle, llvm::make_unique<PluginInputFile>(F.handle)));
- const void *View = getSymbolsAndView(F);
// In case we are thin linking with a minimized bitcode file, ensure
// the module paths encoded in the index reflect where the backends
// will locate the full bitcode files for compiling/importing.
std::string Identifier =
getThinLTOObjectFileName(F.name, OldSuffix, NewSuffix);
auto ObjFilename = ObjectFilenames.insert(Identifier);
assert(ObjFilename.second);
- if (!View) {
- if (options::thinlto_index_only)
- // Write empty output files that may be expected by the distributed
- // build system.
- writeEmptyDistributedBuildOutputs(Identifier, OldPrefix, NewPrefix);
- continue;
+ if (options::thinlto_index_only) {
+ // Write empty output files that may be expected by the distributed
+ // build system.
+ writeEmptyDistributedBuildOutputs(Identifier, OldPrefix, NewPrefix);
}
- addModule(*Lto, F, View, ObjFilename.first->first());
+ if (const void *View = getSymbolsAndView(F))
+ addModule(*Lto, F, View, ObjFilename.first->first());
}
SmallString<128> Filename;
Index: llvm/test/tools/gold/X86/v1.12/thinlto_emit_linked_objects.ll
===================================================================
--- llvm/test/tools/gold/X86/v1.12/thinlto_emit_linked_objects.ll
+++ llvm/test/tools/gold/X86/v1.12/thinlto_emit_linked_objects.ll
@@ -1,37 +1,40 @@
+; RUN: rm -f %t*.o.thinlto.bc
+; RUN: rm -f %t*.o.imports
+
; First generate bitcode with a module summary index for each file
-; RUN: opt -module-summary %s -o %t.o
+; RUN: opt -module-summary %s -o %t1.o
; RUN: opt -module-summary %p/Inputs/thinlto_emit_linked_objects.ll -o %t2.o
+; RUN: opt %s -o %t3.o
; Next do the ThinLink step, specifying thinlto-index-only so that the gold
; plugin exits after generating individual indexes. The objects the linker
; decided to include in the link should be emitted into the file specified
-; after 'thinlto-index-only='. In this version of the test, only %t.o will
+; after 'thinlto-index-only='. In this version of the test, only %t1.o will
; be included in the link, and not %t2.o since it is within
; a library (--start-lib/--end-lib pair) and not strongly referenced.
; Note that the support for detecting this is in gold v1.12.
-; RUN: rm -f %t.o.thinlto.bc
-; RUN: rm -f %t2.o.thinlto.bc
-; RUN: rm -f %t.o.imports
-; RUN: rm -f %t2.o.imports
; RUN: %gold -plugin %llvmshlibdir/LLVMgold%shlibext \
; RUN: --plugin-opt=thinlto \
-; RUN: --plugin-opt=thinlto-index-only=%t3 \
+; RUN: --plugin-opt=thinlto-index-only=%t.index \
; RUN: --plugin-opt=thinlto-emit-imports-files \
; RUN: -m elf_x86_64 \
; RUN: -o %t4 \
-; RUN: %t.o \
+; RUN: %t1.o %t3.o \
; RUN: --start-lib %t2.o --end-lib
; Ensure that the expected output files are created, even for the file
; the linker decided not to include in the link.
-; RUN: ls %t.o.thinlto.bc
+; RUN: ls %t1.o.thinlto.bc
; RUN: ls %t2.o.thinlto.bc
-; RUN: ls %t.o.imports
+; RUN: ls %t3.o.thinlto.bc
+; RUN: ls %t1.o.imports
; RUN: ls %t2.o.imports
+; RUN: ls %t3.o.imports
-; RUN: cat %t3 | FileCheck %s
-; CHECK: thinlto_emit_linked_objects.ll.tmp.o
+; RUN: cat %t.index | FileCheck %s
+; CHECK: thinlto_emit_linked_objects.ll.tmp1.o
; CHECK-NOT: thinlto_emit_linked_objects.ll.tmp2.o
+; CHECK-NOT: thinlto_emit_linked_objects.ll.tmp3.o
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D42514.131375.patch
Type: text/x-patch
Size: 3906 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180125/93e510f3/attachment.bin>
More information about the llvm-commits
mailing list