[PATCH] D133740: [ELF][Distributed ThinLTO] Do not generate empty index when bitcode object is linked

Wei Wang via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 12 17:36:12 PDT 2022


weiwang created this revision.
Herald added subscribers: ormris, hoy, wenlei, arphaman, steven_wu, hiraditya, arichardson, inglorion, emaste.
Herald added a reviewer: MaskRay.
Herald added a project: All.
weiwang requested review of this revision.
Herald added subscribers: llvm-commits, StephenFan.
Herald added a project: LLVM.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D133740

Files:
  lld/ELF/LTO.cpp
  lld/test/ELF/lto/thinlto-index-only.ll


Index: lld/test/ELF/lto/thinlto-index-only.ll
===================================================================
--- lld/test/ELF/lto/thinlto-index-only.ll
+++ lld/test/ELF/lto/thinlto-index-only.ll
@@ -42,6 +42,24 @@
 ; RUN: ld.lld --plugin-opt=thinlto-index-only -shared dummy.o --start-lib 1.o --end-lib -o /dev/null
 ; RUN: ls 1.o.thinlto.bc
 
+;; Ensure when the same bitcode object is given as both lazy and non-lazy,
+;; LLD does not generate an empty index for the lazy object.
+; RUN: rm -f 2.o.thinlto.bc
+; RUN: ld.lld --plugin-opt=thinlto-index-only -shared 1.o 2.o --start-lib 2.o --end-lib -o /dev/null
+; RUN: llvm-dis < 2.o.thinlto.bc | grep -q '\^0 = module:'
+
+;; Ensure when the same bitcode object is given as both lazy and non-lazy,
+;; LLD does not generate an empty index for the lazy object.
+; RUN: rm -f 2.o.thinlto.bc
+; RUN: ld.lld --plugin-opt=thinlto-index-only -shared --start-lib 2.o --end-lib 2.o 1.o -o /dev/null
+; RUN: llvm-dis < 2.o.thinlto.bc | grep -q '\^0 = module:'
+
+;; Ensure when the same lazy bitcode object is given multiple times,
+;; no empty index file is generated if one of the copies is linked.
+; RUN: rm -f 2.o.thinlto.bc
+; RUN: ld.lld --plugin-opt=thinlto-index-only -shared 1.o --start-lib 2.o --end-lib --start-lib 2.o --end-lib -o /dev/null
+; RUN: llvm-dis < 2.o.thinlto.bc | grep -q '\^0 = module:'
+
 ; NM: T f
 
 ;; The backend index for this module contains summaries from itself and
Index: lld/ELF/LTO.cpp
===================================================================
--- lld/ELF/LTO.cpp
+++ lld/ELF/LTO.cpp
@@ -290,9 +290,15 @@
 // This is needed because this is what GNU gold plugin does and we have a
 // distributed build system that depends on that behavior.
 static void thinLTOCreateEmptyIndexFiles() {
+  StringSet<> linkedBitCodeFiles;
+  for (BitcodeFile *f : ctx->bitcodeFiles)
+    linkedBitCodeFiles.insert(f->getName());
+
   for (BitcodeFile *f : ctx->lazyBitcodeFiles) {
     if (!f->lazy)
       continue;
+    if (linkedBitCodeFiles.contains(f->getName()))
+      continue;
     std::string path = replaceThinLTOSuffix(getThinLTOOutputFile(f->getName()));
     std::unique_ptr<raw_fd_ostream> os = openFile(path + ".thinlto.bc");
     if (!os)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D133740.459602.patch
Type: text/x-patch
Size: 2236 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220913/fe2dbe62/attachment.bin>


More information about the llvm-commits mailing list