print common symbols
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 19 Oct 2006 13:30:40 +0000 (13:30 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 19 Oct 2006 13:30:40 +0000 (13:30 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31048 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMAsmPrinter.cpp
test/CodeGen/ARM/constants.ll

index f67f39aa7d0b01039c61286a648356c5c82ad79a..aa465cc24f8ca711718d470c4eb090fd82156863 100644 (file)
@@ -278,26 +278,42 @@ bool ARMAsmPrinter::doFinalization(Module &M) {
     unsigned Size = TD->getTypeSize(C->getType());
     unsigned Align = TD->getTypeAlignment(C->getType());
 
-    switch (I->getLinkage()) {
-    default:
-      assert(0 && "Unknown linkage type!");
-      break;
-    case GlobalValue::ExternalLinkage:
-      O << "\t.globl " << name << "\n";
-      break;
-    case GlobalValue::InternalLinkage:
-      break;
-    }
+    if (C->isNullValue() &&
+        (I->hasLinkOnceLinkage() || I->hasInternalLinkage() ||
+         I->hasWeakLinkage())) {
+      SwitchToDataSection(".data", I);
+      if (I->hasInternalLinkage())
+        O << "\t.local " << name << "\n";
+
+      O << "\t.comm " << name << "," << TD->getTypeSize(C->getType())
+        << "," << (unsigned)TD->getTypeAlignment(C->getType());
+      O << "\t\t";
+      O << TAI->getCommentString() << " ";
+      WriteAsOperand(O, I, true, true, &M);
+      O << "\n";
+    } else {
+      switch (I->getLinkage()) {
+      default:
+        assert(0 && "Unknown linkage type!");
+        break;
+      case GlobalValue::ExternalLinkage:
+        O << "\t.globl " << name << "\n";
+        break;
+      case GlobalValue::InternalLinkage:
+        break;
+      }
 
-    assert (!C->isNullValue());
-    SwitchToDataSection(".data", I);
+      assert (!C->isNullValue());
+      SwitchToDataSection(".data", I);
 
-    EmitAlignment(Align, I);
-    O << "\t.type " << name << ", %object\n";
-    O << "\t.size " << name << ", " << Size << "\n";
-    O << name << ":\n";
-    EmitGlobalConstant(C);
+      EmitAlignment(Align, I);
+      O << "\t.type " << name << ", %object\n";
+      O << "\t.size " << name << ", " << Size << "\n";
+      O << name << ":\n";
+      EmitGlobalConstant(C);
+    }
   }
+
   AsmPrinter::doFinalization(M);
   return false; // success
 }
index 9d5fb8e637d40ee2c56b801a3910c35e32521e0e..f161b9d070ba58a62bba7606cc1ac9d7ab9f0a73 100644 (file)
@@ -4,7 +4,10 @@
 ; RUN: llvm-as < %s | llc -march=arm | grep "mov r0, #256" | wc -l | grep 1 &&
 ; RUN: llvm-as < %s | llc -march=arm | grep ".word.*257" | wc -l | grep 1 &&
 ; RUN: llvm-as < %s | llc -march=arm | grep "mov r0, #-1073741761" | wc -l | grep 1 &&
-; RUN: llvm-as < %s | llc -march=arm | grep "mov r0, #1008" | wc -l | grep 1
+; RUN: llvm-as < %s | llc -march=arm | grep "mov r0, #1008" | wc -l | grep 1 &&
+; RUN: llvm-as < %s | llc -march=arm | grep "\.comm.*a,4,4" | wc -l | grep 1
+
+%a = internal global int 0
 
 uint %f1() {
   ret uint 0