factor this code better.
authorChris Lattner <sabre@nondot.org>
Tue, 19 Jan 2010 05:51:42 +0000 (05:51 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 19 Jan 2010 05:51:42 +0000 (05:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93859 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/AsmPrinter.cpp

index a7686ec1e45f3cf08ace5d658d248c328bdeff80..3e54f0992a5fad03707ffe5425d015ed44e542b7 100644 (file)
@@ -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() << " '";
+      O.PadToColumn(MAI->getCommentColumn());
+      O << 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()) {
+    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);
     }
-    if (VerboseAsm) {
-      O.PadToColumn(MAI->getCommentColumn());
-      O << MAI->getCommentString() << ' ';
-      WriteAsOperand(O, GV, /*PrintType=*/false, GV->getParent());
-    }
     O << '\n';
     return;
   }