mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-04 01:26:41 +00:00
Don't create a comdat group for a dropped def with initializer
Non-prevailing weak/linkonce odr symbols will be dropped by ThinLTO to available_externally when possible. If they had an initializer in the global_ctors list, a comdat group was being created. This code already had logic to skip available_externally defs, but now the EliminateAvailableExternally pass will drop these symbols to declarations earlier. Change the check to skip all declarations for linker (which includes available_externally along with declarations). Reviewers: mehdi_amini Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D28737 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292408 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1dd9f80902
commit
6f03dce4dd
@ -1644,8 +1644,11 @@ void AsmPrinter::EmitXXStructorList(const DataLayout &DL, const Constant *List,
|
||||
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;
|
||||
|
||||
|
19
test/CodeGen/X86/dropped_constructor.ll
Normal file
19
test/CodeGen/X86/dropped_constructor.ll
Normal file
@ -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"
|
||||
|
||||
@fv = external global i8, align 8
|
||||
@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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user