[PATCH] D23955: [LTO] Don't create a new common unless merged has different size

Teresa Johnson via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 26 21:49:41 PDT 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL279911: [LTO] Don't create a new common unless merged has different size (authored by tejohnson).

Changed prior to commit:
  https://reviews.llvm.org/D23955?vs=69470&id=69471#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D23955

Files:
  llvm/trunk/lib/LTO/LTO.cpp
  llvm/trunk/test/tools/gold/X86/common.ll
  llvm/trunk/test/tools/gold/X86/start-lib-common.ll

Index: llvm/trunk/lib/LTO/LTO.cpp
===================================================================
--- llvm/trunk/lib/LTO/LTO.cpp
+++ llvm/trunk/lib/LTO/LTO.cpp
@@ -417,16 +417,17 @@
 Error LTO::runRegularLTO(AddOutputFn AddOutput) {
   // Make sure commons have the right size/alignment: we kept the largest from
   // all the prevailing when adding the inputs, and we apply it here.
+  const DataLayout &DL = RegularLTO.CombinedModule->getDataLayout();
   for (auto &I : RegularLTO.Commons) {
-    ArrayType *Ty =
-        ArrayType::get(Type::getInt8Ty(RegularLTO.Ctx), I.second.Size);
     GlobalVariable *OldGV = RegularLTO.CombinedModule->getNamedGlobal(I.first);
-    if (OldGV && OldGV->getType()->getElementType() == Ty) {
+    if (OldGV && DL.getTypeAllocSize(OldGV->getValueType()) == I.second.Size) {
       // Don't create a new global if the type is already correct, just make
       // sure the alignment is correct.
       OldGV->setAlignment(I.second.Align);
       continue;
     }
+    ArrayType *Ty =
+        ArrayType::get(Type::getInt8Ty(RegularLTO.Ctx), I.second.Size);
     auto *GV = new GlobalVariable(*RegularLTO.CombinedModule, Ty, false,
                                   GlobalValue::CommonLinkage,
                                   ConstantAggregateZero::get(Ty), "");
Index: llvm/trunk/test/tools/gold/X86/common.ll
===================================================================
--- llvm/trunk/test/tools/gold/X86/common.ll
+++ llvm/trunk/test/tools/gold/X86/common.ll
@@ -19,15 +19,15 @@
 ; RUN: llvm-dis %t3.o -o - | FileCheck %s --check-prefix=B
 
 ; (i16 align 8) + (i8 align 16) = i16 align 16
-; B: @a = common global [2 x i8] zeroinitializer, 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 [2 x i8] zeroinitializer, align 8
+; C: @a = common global i16 0, align 8
 
 ; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
 ; RUN:    --plugin-opt=emit-llvm \
@@ -44,4 +44,4 @@
 ; 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 [2 x i8] zeroinitializer, align 8
+; MIXED: @a = common global i16 0, align 8
Index: llvm/trunk/test/tools/gold/X86/start-lib-common.ll
===================================================================
--- llvm/trunk/test/tools/gold/X86/start-lib-common.ll
+++ llvm/trunk/test/tools/gold/X86/start-lib-common.ll
@@ -19,4 +19,4 @@
 
 ; Check that the common symbol is not dropped completely, which was a regression
 ; in r262676.
-; CHECK: @x = common global [4 x i8] zeroinitializer
+; CHECK: @x = common global i32 0, align 8


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23955.69471.patch
Type: text/x-patch
Size: 2891 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160827/509fe360/attachment.bin>


More information about the llvm-commits mailing list