[lld] r264181 - [LTO] Keep linkonce symbols when required.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 23 11:52:10 PDT 2016


On Wed, Mar 23, 2016 at 7:41 PM, Davide Italiano via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: davide
> Date: Wed Mar 23 13:41:48 2016
> New Revision: 264181
>
> URL: http://llvm.org/viewvc/llvm-project?rev=264181&view=rev
> Log:
> [LTO] Keep linkonce symbols when required.
>
> Similarly to how we do with linkonce_odr symbols already, but
> change their linkage to weak.
>
> Added:
>     lld/trunk/test/ELF/lto/Inputs/linkonce.ll
>     lld/trunk/test/ELF/lto/linkonce.ll
> Modified:
>     lld/trunk/ELF/LTO.cpp
>
> Modified: lld/trunk/ELF/LTO.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LTO.cpp?rev=264181&r1=264180&r2=264181&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/LTO.cpp (original)
> +++ lld/trunk/ELF/LTO.cpp Wed Mar 23 13:41:48 2016
> @@ -85,8 +85,16 @@ void BitcodeCompiler::add(BitcodeFile &F
>      if (!BitcodeFile::shouldSkip(Sym)) {
>        if (SymbolBody *B = Bodies[BodyIndex++])
>          if (&B->repl() == B && isa<DefinedBitcode>(B)) {
> -          if (GV->getLinkage() == llvm::GlobalValue::LinkOnceODRLinkage)
> +          switch (GV->getLinkage()) {
> +          default:
> +            break;
> +          case llvm::GlobalValue::LinkOnceAnyLinkage:
> +            GV->setLinkage(GlobalValue::WeakAnyLinkage);
> +            break;
> +          case llvm::GlobalValue::LinkOnceODRLinkage:
>              GV->setLinkage(GlobalValue::WeakODRLinkage);
> +            break;
> +          }
>            Keep.push_back(GV);
>

Can you reduce the indentation? I think you can do this.

    if (BitcodeFile::shouldSkip(Sym))
      continue;
    SymbolBody *B = Bodies[BodyIndex++];
    if (!B || &B->repl() != B || !isa<DefinedBitcode>(B))
      continue;
    switch (GV-getLinkage()) {
      ...
    }
    Keep.push_back(GV);


>          }
>      }
>
> Added: lld/trunk/test/ELF/lto/Inputs/linkonce.ll
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/lto/Inputs/linkonce.ll?rev=264181&view=auto
>
> ==============================================================================
> --- lld/trunk/test/ELF/lto/Inputs/linkonce.ll (added)
> +++ lld/trunk/test/ELF/lto/Inputs/linkonce.ll Wed Mar 23 13:41:48 2016
> @@ -0,0 +1,6 @@
> +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
> +target triple = "x86_64-unknown-linux-gnu"
> +
> +define linkonce void @f() {
> +  ret void
> +}
>
> Added: lld/trunk/test/ELF/lto/linkonce.ll
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/lto/linkonce.ll?rev=264181&view=auto
>
> ==============================================================================
> --- lld/trunk/test/ELF/lto/linkonce.ll (added)
> +++ lld/trunk/test/ELF/lto/linkonce.ll Wed Mar 23 13:41:48 2016
> @@ -0,0 +1,17 @@
> +; REQUIRES: x86
> +; RUN: llvm-as %p/Inputs/linkonce.ll -o %t1.o
> +; RUN: llc %s -o %t2.o -filetype=obj
> +; RUN: ld.lld %t1.o %t2.o -o %t.so -shared -save-temps
> +; RUN: llvm-dis %t.so.lto.opt.bc -o - | FileCheck %s
> +
> +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
> +target triple = "x86_64-unknown-linux-gnu"
> +declare void @f()
> +
> +define void @g() {
> +  call void @f()
> +  ret void
> +}
> +
> +; Be sure that 'f' is kept and has weak linkage.
> +; CHECK: define weak void @f()
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160323/98b73acd/attachment.html>


More information about the llvm-commits mailing list