diff options
-rw-r--r-- | llvm/test/tools/gold/X86/Inputs/common.ll | 2 | ||||
-rw-r--r-- | llvm/test/tools/gold/X86/Inputs/common2.ll | 1 | ||||
-rw-r--r-- | llvm/test/tools/gold/X86/Inputs/common3.ll | 1 | ||||
-rw-r--r-- | llvm/test/tools/gold/X86/common.ll | 34 | ||||
-rw-r--r-- | llvm/tools/gold/gold-plugin.cpp | 6 |
5 files changed, 32 insertions, 12 deletions
diff --git a/llvm/test/tools/gold/X86/Inputs/common.ll b/llvm/test/tools/gold/X86/Inputs/common.ll index 46f199e167a..48e03562370 100644 --- a/llvm/test/tools/gold/X86/Inputs/common.ll +++ b/llvm/test/tools/gold/X86/Inputs/common.ll @@ -1 +1 @@ -@a = common global i16 0, align 4 +@a = common global i32 0, align 4 diff --git a/llvm/test/tools/gold/X86/Inputs/common2.ll b/llvm/test/tools/gold/X86/Inputs/common2.ll new file mode 100644 index 00000000000..0f309d88a00 --- /dev/null +++ b/llvm/test/tools/gold/X86/Inputs/common2.ll @@ -0,0 +1 @@ +@a = common global i8 0, align 16 diff --git a/llvm/test/tools/gold/X86/Inputs/common3.ll b/llvm/test/tools/gold/X86/Inputs/common3.ll new file mode 100644 index 00000000000..21d79730bdd --- /dev/null +++ b/llvm/test/tools/gold/X86/Inputs/common3.ll @@ -0,0 +1 @@ +@a = common global i8 0, align 1 diff --git a/llvm/test/tools/gold/X86/common.ll b/llvm/test/tools/gold/X86/common.ll index ef18e683104..335f6e9a88a 100644 --- a/llvm/test/tools/gold/X86/common.ll +++ b/llvm/test/tools/gold/X86/common.ll @@ -1,15 +1,33 @@ ; RUN: llvm-as %s -o %t1.o ; RUN: llvm-as %p/Inputs/common.ll -o %t2.o +; RUN: llvm-as %p/Inputs/common2.ll -o %t2b.o +; RUN: llvm-as %p/Inputs/common3.ll -o %t2c.o + +@a = common global i16 0, align 8 ; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \ ; RUN: --plugin-opt=emit-llvm \ ; RUN: -shared %t1.o %t2.o -o %t3.o -; RUN: llvm-dis %t3.o -o - | FileCheck %s - -@a = common global i8 0, align 8 +; RUN: llvm-dis %t3.o -o - | FileCheck %s --check-prefix=A ; Shared library case, we merge @a as common and keep it for the symbol table. -; CHECK: @a = common global i16 0, align 8 +; A: @a = common global i32 0, align 8 + +; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: --plugin-opt=emit-llvm \ +; RUN: -shared %t1.o %t2b.o -o %t3.o +; RUN: llvm-dis %t3.o -o - | FileCheck %s --check-prefix=B + +; (i16 align 8) + (i8 align 16) = i16 align 16 +; B: @a = common global i16 0, align 16 + +; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \ +; RUN: --plugin-opt=emit-llvm \ +; RUN: -shared %t1.o %t2c.o -o %t3.o +; RUN: llvm-dis %t3.o -o - | FileCheck %s --check-prefix=C + +; (i16 align 8) + (i8 align 1) = i16 align 8. +; C: @a = common global i16 0, align 8 ; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \ ; RUN: --plugin-opt=emit-llvm \ @@ -17,13 +35,13 @@ ; RUN: llvm-dis %t3.o -o - | FileCheck --check-prefix=EXEC %s ; All IR case, we internalize a after merging. -; EXEC: @a = internal global i16 0, align 8 +; EXEC: @a = internal global i32 0, align 8 -; RUN: llc %p/Inputs/common.ll -o %t2.o -filetype=obj +; RUN: llc %p/Inputs/common.ll -o %t2native.o -filetype=obj ; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \ ; RUN: --plugin-opt=emit-llvm \ -; RUN: %t1.o %t2.o -o %t3.o +; RUN: %t1.o %t2native.o -o %t3.o ; RUN: llvm-dis %t3.o -o - | FileCheck --check-prefix=MIXED %s ; Mixed ELF and IR. We keep ours as common so the linker will finish the merge. -; MIXED: @a = common global i8 0, align 8 +; MIXED: @a = common global i16 0, align 8 diff --git a/llvm/tools/gold/gold-plugin.cpp b/llvm/tools/gold/gold-plugin.cpp index a74bc3ad750..ec27c26cce9 100644 --- a/llvm/tools/gold/gold-plugin.cpp +++ b/llvm/tools/gold/gold-plugin.cpp @@ -1090,8 +1090,8 @@ static bool linkInModule(LLVMContext &Context, IRMover &L, claimed_file &F, M->setTargetTriple(DefaultTriple); } - if (!L.move(std::move(M), Keep, [](GlobalValue &, IRMover::ValueAdder) {})) - return false; + if (L.move(std::move(M), Keep, [](GlobalValue &, IRMover::ValueAdder) {})) + return true; for (const auto &I : Realign) { GlobalValue *Dst = L.getModule().getNamedValue(I.first()); @@ -1100,7 +1100,7 @@ static bool linkInModule(LLVMContext &Context, IRMover &L, claimed_file &F, cast<GlobalVariable>(Dst)->setAlignment(I.second); } - return true; + return false; } /// Perform the ThinLTO backend on a single module, invoking the LTO and codegen |