[PATCH] D28737: [ThinLTO] Don't create a comdat group for a dropped def with initializer

Teresa Johnson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 18 08:42:22 PST 2017


tejohnson updated this revision to Diff 84844.
tejohnson added a comment.

Replace ThinLTO-specific tests with a simple llc based test


https://reviews.llvm.org/D28737

Files:
  lib/CodeGen/AsmPrinter/AsmPrinter.cpp
  test/CodeGen/X86/dropped_constructor.ll


Index: test/CodeGen/X86/dropped_constructor.ll
===================================================================
--- /dev/null
+++ test/CodeGen/X86/dropped_constructor.ll
@@ -0,0 +1,19 @@
+; Test to ensure that a global value that was dropped to a declaration
+; (e.g. ThinLTO will drop non-prevailing weak to declarations) does not
+; provoke creation of a comdat when it had an initializer.
+; RUN: llc -mtriple x86_64-unknown-linux-gnu < %s | FileCheck %s
+; CHECK-NOT: comdat
+
+; ModuleID = 'dropped_constructor.o'
+source_filename = "dropped_constructor.c"
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+ at fv = external global i8, align 8
+ at llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @__cxx_global_var_init.33, i8* @fv }]
+
+; Function Attrs: norecurse nounwind
+define internal void @__cxx_global_var_init.33() section ".text.startup" {
+  store i8 1, i8* @fv, align 8
+  ret void
+}
Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp
===================================================================
--- lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -1644,8 +1644,11 @@
     const TargetLoweringObjectFile &Obj = getObjFileLowering();
     const MCSymbol *KeySym = nullptr;
     if (GlobalValue *GV = S.ComdatKey) {
-      if (GV->hasAvailableExternallyLinkage())
-        // If the associated variable is available_externally, some other TU
+      if (GV->isDeclarationForLinker())
+        // If the associated variable is not defined in this module
+        // (it might be available_externally, or have been an
+        // available_externally definition that was dropped by the
+        // EliminateAvailableExternally pass), some other TU
         // will provide its dynamic initializer.
         continue;
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D28737.84844.patch
Type: text/x-patch
Size: 1888 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170118/a86cf8a3/attachment.bin>


More information about the llvm-commits mailing list