From 9744d611d7c7c1fb51c50c4e94901e4e9a905116 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 19 Jan 2010 05:51:42 +0000 Subject: [PATCH] factor this code better. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93859 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 48 +++++++++++---------------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index a7686ec1e45..3e54f0992a5 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -161,41 +161,33 @@ void AsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) { unsigned Size = TD->getTypeAllocSize(GV->getType()->getElementType()); unsigned AlignLog = TD->getPreferredAlignmentLog(GV); - // Handle normal common symbols. - if (GVKind.isCommon()) { + // Handle common and BSS local symbols (.lcomm). + if (GVKind.isCommon() || GVKind.isBSSLocal()) { if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it. - O << MAI->getCOMMDirective() << *GVSym << ',' << Size; - if (MAI->getCOMMDirectiveTakesAlignment()) - O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << AlignLog) : AlignLog); - - if (VerboseAsm) { - O << "\t\t" << MAI->getCommentString() << " '"; - WriteAsOperand(O, GV, /*PrintType=*/false, GV->getParent()); - O << '\''; - } - O << '\n'; - return; - } - - if (GVKind.isBSSLocal()) { - if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it. - - if (const char *LComm = MAI->getLCOMMDirective()) { - O << LComm << *GVSym << ',' << Size; - if (MAI->getLCOMMDirectiveTakesAlignment()) - O << ',' << AlignLog; - } else { - O << "\t.local\t" << *GVSym << '\n'; - O << MAI->getCOMMDirective() << *GVSym << ',' << Size; - if (MAI->getCOMMDirectiveTakesAlignment()) - O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << AlignLog) : AlignLog); - } if (VerboseAsm) { O.PadToColumn(MAI->getCommentColumn()); O << MAI->getCommentString() << ' '; WriteAsOperand(O, GV, /*PrintType=*/false, GV->getParent()); } + if (GVKind.isCommon()) { + // .comm _foo, 42, 4 + O << MAI->getCOMMDirective() << *GVSym << ',' << Size; + if (MAI->getCOMMDirectiveTakesAlignment()) + O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << AlignLog) : AlignLog); + } else if (const char *LComm = MAI->getLCOMMDirective()) { + // .lcomm _foo, 42, 4 + O << LComm << *GVSym << ',' << Size; + if (MAI->getLCOMMDirectiveTakesAlignment()) + O << ',' << AlignLog; + } else { + // .local _foo + O << "\t.local\t" << *GVSym << '\n'; + // .comm _foo, 42, 4 + O << MAI->getCOMMDirective() << *GVSym << ',' << Size; + if (MAI->getCOMMDirectiveTakesAlignment()) + O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << AlignLog) : AlignLog); + } O << '\n'; return; }