[llvm] r201563 - XCore target: Handle common linkage
Robert Lytton
robert at xmos.com
Tue Feb 18 03:21:59 PST 2014
Author: rlytton
Date: Tue Feb 18 05:21:59 2014
New Revision: 201563
URL: http://llvm.org/viewvc/llvm-project?rev=201563&view=rev
Log:
XCore target: Handle common linkage
Modified:
llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp
llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.cpp
llvm/trunk/test/CodeGen/XCore/linkage.ll
Modified: llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp?rev=201563&r1=201562&r2=201563&view=diff
==============================================================================
--- llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp Tue Feb 18 05:21:59 2014
@@ -87,9 +87,9 @@ XCoreTargetStreamer &XCoreAsmPrinter::ge
}
void XCoreAsmPrinter::emitArrayBound(MCSymbol *Sym, const GlobalVariable *GV) {
- assert(((GV->hasExternalLinkage() ||
- GV->hasWeakLinkage()) ||
- GV->hasLinkOnceLinkage()) && "Unexpected linkage");
+ assert( ( GV->hasExternalLinkage() || GV->hasWeakLinkage() ||
+ GV->hasLinkOnceLinkage() || GV->hasCommonLinkage() ) &&
+ "Unexpected linkage");
if (ArrayType *ATy = dyn_cast<ArrayType>(
cast<PointerType>(GV->getType())->getElementType())) {
@@ -99,7 +99,8 @@ void XCoreAsmPrinter::emitArrayBound(MCS
OutStreamer.EmitAssignment(SymGlob,
MCConstantExpr::Create(ATy->getNumElements(),
OutContext));
- if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage()) {
+ if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() ||
+ GV->hasCommonLinkage()) {
// TODO Use COMDAT groups for LinkOnceLinkage
OutStreamer.EmitSymbolAttribute(SymGlob, MCSA_Weak);
}
@@ -131,11 +132,13 @@ void XCoreAsmPrinter::EmitGlobalVariable
case GlobalValue::WeakAnyLinkage:
case GlobalValue::WeakODRLinkage:
case GlobalValue::ExternalLinkage:
+ case GlobalValue::CommonLinkage:
emitArrayBound(GVSym, GV);
OutStreamer.EmitSymbolAttribute(GVSym, MCSA_Global);
// TODO Use COMDAT groups for LinkOnceLinkage
- if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage())
+ if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() ||
+ GV->hasCommonLinkage())
OutStreamer.EmitSymbolAttribute(GVSym, MCSA_Weak);
// FALL THROUGH
case GlobalValue::InternalLinkage:
Modified: llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.cpp?rev=201563&r1=201562&r2=201563&view=diff
==============================================================================
--- llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.cpp (original)
+++ llvm/trunk/lib/Target/XCore/XCoreTargetObjectFile.cpp Tue Feb 18 05:21:59 2014
@@ -149,13 +149,13 @@ SelectSectionForGlobal(const GlobalValue
TM.getDataLayout()->getTypeAllocSize(ObjType) < CodeModelLargeSize) {
if (Kind.isReadOnly()) return UseCPRel? ReadOnlySection
: DataRelROSection;
- if (Kind.isBSS()) return BSSSection;
+ if (Kind.isBSS() || Kind.isCommon())return BSSSection;
if (Kind.isDataRel()) return DataSection;
if (Kind.isReadOnlyWithRel()) return DataRelROSection;
} else {
if (Kind.isReadOnly()) return UseCPRel? ReadOnlySectionLarge
: DataRelROSectionLarge;
- if (Kind.isBSS()) return BSSSectionLarge;
+ if (Kind.isBSS() || Kind.isCommon())return BSSSectionLarge;
if (Kind.isDataRel()) return DataSectionLarge;
if (Kind.isReadOnlyWithRel()) return DataRelROSectionLarge;
}
Modified: llvm/trunk/test/CodeGen/XCore/linkage.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/XCore/linkage.ll?rev=201563&r1=201562&r2=201563&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/XCore/linkage.ll (original)
+++ llvm/trunk/test/CodeGen/XCore/linkage.ll Tue Feb 18 05:21:59 2014
@@ -25,9 +25,21 @@ define protected void @test_protected()
; CHECK: .weak array
@array = weak global [2 x i32] zeroinitializer
+; CHECK: .globl ac.globound
+; CHECK: ac.globound = 2
+; CHECK: .weak ac.globound
+; CHECK: .globl ac
+; CHECK: .weak ac
+ at ac = common global [2 x i32] zeroinitializer
+
+; CHECK: .globl gd
; CHECK: .weak gd
@gd = weak global i32 0
+; CHECK: .globl gc
+; CHECK: .weak gc
+ at gc = common global i32 0
+
; CHECK-NOT: .hidden test_hidden_declaration
; CHECK: .weak gr
More information about the llvm-commits
mailing list