[llvm] r217455 - Merge alignment of common GlobalValue.
Rafael Espindola
rafael.espindola at gmail.com
Tue Sep 9 10:48:19 PDT 2014
Author: rafael
Date: Tue Sep 9 12:48:18 2014
New Revision: 217455
URL: http://llvm.org/viewvc/llvm-project?rev=217455&view=rev
Log:
Merge alignment of common GlobalValue.
Fixes pr20882.
Modified:
llvm/trunk/lib/Linker/LinkModules.cpp
llvm/trunk/test/Linker/Inputs/linkage2.ll
llvm/trunk/test/Linker/linkage2.ll
Modified: llvm/trunk/lib/Linker/LinkModules.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/LinkModules.cpp?rev=217455&r1=217454&r2=217455&view=diff
==============================================================================
--- llvm/trunk/lib/Linker/LinkModules.cpp (original)
+++ llvm/trunk/lib/Linker/LinkModules.cpp Tue Sep 9 12:48:18 2014
@@ -1001,6 +1001,7 @@ bool ModuleLinker::linkGlobalProto(Globa
GlobalValue *DGV = getLinkedToGlobal(SGV);
llvm::Optional<GlobalValue::VisibilityTypes> NewVisibility;
bool HasUnnamedAddr = SGV->hasUnnamedAddr();
+ unsigned Alignment = SGV->getAlignment();
bool LinkFromSrc = false;
Comdat *DC = nullptr;
@@ -1025,15 +1026,22 @@ bool ModuleLinker::linkGlobalProto(Globa
return true;
NewVisibility = NV;
HasUnnamedAddr = HasUnnamedAddr && DGV->hasUnnamedAddr();
+ if (DGV->hasCommonLinkage() && SGV->hasCommonLinkage())
+ Alignment = std::max(Alignment, DGV->getAlignment());
+ else if (!LinkFromSrc)
+ Alignment = DGV->getAlignment();
// If we're not linking from the source, then keep the definition that we
// have.
if (!LinkFromSrc) {
// Special case for const propagation.
- if (GlobalVariable *DGVar = dyn_cast<GlobalVariable>(DGV))
+ if (GlobalVariable *DGVar = dyn_cast<GlobalVariable>(DGV)) {
+ DGVar->setAlignment(Alignment);
+
if (DGVar->isDeclaration() && SGV->isConstant() &&
!DGVar->isConstant())
DGVar->setConstant(true);
+ }
// Set calculated linkage, visibility and unnamed_addr.
DGV->setLinkage(NewLinkage);
@@ -1071,6 +1079,7 @@ bool ModuleLinker::linkGlobalProto(Globa
SGV->getType()->getAddressSpace());
// Propagate alignment, visibility and section info.
copyGVAttributes(NewDGV, SGV);
+ NewDGV->setAlignment(Alignment);
if (NewVisibility)
NewDGV->setVisibility(*NewVisibility);
NewDGV->setUnnamedAddr(HasUnnamedAddr);
Modified: llvm/trunk/test/Linker/Inputs/linkage2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/Inputs/linkage2.ll?rev=217455&r1=217454&r2=217455&view=diff
==============================================================================
--- llvm/trunk/test/Linker/Inputs/linkage2.ll (original)
+++ llvm/trunk/test/Linker/Inputs/linkage2.ll Tue Sep 9 12:48:18 2014
@@ -3,3 +3,5 @@
@test2_a = external dllimport global i8
@test3_a = common global i16 0
+
+ at test4_a = common global i16 0, align 4
Modified: llvm/trunk/test/Linker/linkage2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/linkage2.ll?rev=217455&r1=217454&r2=217455&view=diff
==============================================================================
--- llvm/trunk/test/Linker/linkage2.ll (original)
+++ llvm/trunk/test/Linker/linkage2.ll Tue Sep 9 12:48:18 2014
@@ -9,3 +9,6 @@
@test3_a = common global i8 0
; CHECK-DAG: @test3_a = common global i16 0
+
+ at test4_a = common global i8 0, align 8
+; CHECK-DAG: @test4_a = common global i16 0, align 8
More information about the llvm-commits
mailing list