Index: test/tools/gold/X86/Inputs/common.ll =================================================================== --- test/tools/gold/X86/Inputs/common.ll +++ test/tools/gold/X86/Inputs/common.ll @@ -1 +1 @@ -@a = common global i16 0, align 4 +@a = common global i32 0, align 4 Index: test/tools/gold/X86/Inputs/common2.ll =================================================================== --- /dev/null +++ test/tools/gold/X86/Inputs/common2.ll @@ -0,0 +1 @@ +@a = common global i8 0, align 16 Index: test/tools/gold/X86/Inputs/common3.ll =================================================================== --- /dev/null +++ test/tools/gold/X86/Inputs/common3.ll @@ -0,0 +1 @@ +@a = common global i8 0, align 1 Index: test/tools/gold/X86/common.ll =================================================================== --- test/tools/gold/X86/common.ll +++ 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 Index: tools/gold/gold-plugin.cpp =================================================================== --- tools/gold/gold-plugin.cpp +++ tools/gold/gold-plugin.cpp @@ -1091,8 +1091,8 @@ 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()); @@ -1101,7 +1101,7 @@ cast(Dst)->setAlignment(I.second); } - return true; + return false; } /// Perform the ThinLTO backend on a single module, invoking the LTO and codegen