[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