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

H.J. Lu via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 19 11:49:04 PDT 2016


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.

> +; 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.


More information about the llvm-commits mailing list