[llvm] r279023 - [ThinLTO] Keep common symbols in ThinLTO modules

Teresa Johnson via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 19 18:31:09 PDT 2016


On Fri, Aug 19, 2016 at 11:49 AM, H.J. Lu <hjl.tools at gmail.com> wrote:

> On Wed, Aug 17, 2016 at 6:08 PM, Teresa Johnson via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
> > Author: tejohnson
> > Date: Wed Aug 17 20:08:50 2016
> > New Revision: 279023
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=279023&view=rev
> > Log:
> > [ThinLTO] Keep common symbols in ThinLTO modules
> >
> > Summary:
> > Skip the merging of common symbols for ThinLTO modules, they will be
> > merged by the final native object link. Trying to merge the symbols and
> > add to a combined module will incorrectly enable the common symbol to be
> > internalized in the ThinLTO module. Additionally, we will not want to
> > create a combined module for ThinLTO distributed builds.
> >
> > This fixes failures in 7 cpu2006 benchmarks from the new LTO API in
> > ThinLTO mode.
> >
> > Reviewers: mehdi_amini
> >
> > Subscribers: pcc, llvm-commits, mehdi_amini
> >
> > Differential Revision: https://reviews.llvm.org/D23637
> >
> > Added:
> >     llvm/trunk/test/tools/gold/X86/Inputs/common_thinlto.ll
> >     llvm/trunk/test/tools/gold/X86/common_thinlto.ll
> > Modified:
> >     llvm/trunk/include/llvm/LTO/LTO.h
> >     llvm/trunk/tools/gold/gold-plugin.cpp
> >
>
> > --- llvm/trunk/test/tools/gold/X86/common_thinlto.ll (added)
> > +++ llvm/trunk/test/tools/gold/X86/common_thinlto.ll Wed Aug 17
> 20:08:50 2016
> > @@ -0,0 +1,38 @@
> > +; RUN: opt -module-summary %s -o %t1.o
> > +; RUN: opt -module-summary %p/Inputs/common_thinlto.ll -o %t2.o
> > +
> > +; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
> > +; RUN:    --plugin-opt=save-temps \
> > +; RUN:    --plugin-opt=thinlto \
>
> "-m elf_x86_64" is missing here.
>

Fixed in r279355.

Teresa


>
> > +; RUN:    -shared %t1.o %t2.o -o %t3
> > +
> > +; RUN: llvm-dis %t1.o.2.internalize.bc -o - | FileCheck %s
> --check-prefix=INTERNALIZE
> > +; We should not have internalized P, and it should still be common.
> > +; INTERNALIZE: @P = common global
> > +
> > +; RUN: llvm-dis %t1.o.4.opt.bc -o - | FileCheck %s --check-prefix=OPT
> > +; bar should still exist (if we had internalized P it would look dead).
> > +; OPT: @bar
> > +
> > +; RUN: llvm-nm %t3.o | FileCheck %s --check-prefix=NM
> > +; NM: bar
> > +
> > +source_filename = "common1.c"
> > +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
> > +target triple = "x86_64-unknown-linux-gnu"
> > +
> > + at P = common global i8* (...)* null, align 8
> > +
> > +define i32 @main() {
> > +entry:
> > +  store i8* (...)* bitcast (i8* ()* @bar to i8* (...)*), i8* (...)**
> @P, align 8
> > +  %call = call i32 (...) @foo()
> > +  ret i32 0
> > +}
> > +
> > +declare i32 @foo(...)
> > +
> > +define internal i8* @bar() {
> > +entry:
> > +  ret i8* null
> > +}
> >
>
>
> --
> H.J.
>



-- 
Teresa Johnson |  Software Engineer |  tejohnson at google.com |  408-460-2413
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160819/ac2280a5/attachment.html>


More information about the llvm-commits mailing list