mcstreamerize AsmPrinter::EmitZeros, at least when emitting to the
authorChris Lattner <sabre@nondot.org>
Tue, 19 Jan 2010 18:58:52 +0000 (18:58 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 19 Jan 2010 18:58:52 +0000 (18:58 +0000)
default address space.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93890 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/AsmPrinter.cpp
lib/MC/MCAsmStreamer.cpp

index c22e501f53ff23cd1b9bac94f4cf5f4623c9aede..48add10b3523d81c73d22d77e657973614700d6f 100644 (file)
@@ -436,7 +436,7 @@ void AsmPrinter::EmitConstantPool(MachineConstantPool *MCP) {
       // Emit inter-object padding for alignment.
       unsigned AlignMask = CPE.getAlignment() - 1;
       unsigned NewOffset = (Offset + AlignMask) & ~AlignMask;
-      EmitZeros(NewOffset - Offset);
+      OutStreamer.EmitFill(NewOffset - Offset);
 
       const Type *Ty = CPE.getType();
       Offset = NewOffset + TM.getTargetData()->getTypeAllocSize(Ty);
@@ -917,8 +917,8 @@ void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue *GV,
 ///
 void AsmPrinter::EmitZeros(uint64_t NumZeros, unsigned AddrSpace) const {
   if (NumZeros == 0) return;
-  if (MAI->getZeroDirective()) {
-    O << MAI->getZeroDirective() << NumZeros << '\n';
+  if (MAI->getZeroDirective() || AddrSpace == 0) {
+    OutStreamer.EmitFill(NumZeros);
   } else {
     for (; NumZeros; --NumZeros)
       O << MAI->getData8bitsDirective(AddrSpace) << "0\n";
@@ -1417,13 +1417,11 @@ void AsmPrinter::EmitGlobalConstant(const Constant *CV, unsigned AddrSpace) {
   const Type *type = CV->getType();
   unsigned Size = TD->getTypeAllocSize(type);
 
-  if (CV->isNullValue() || isa<UndefValue>(CV)) {
-    EmitZeros(Size, AddrSpace);
-    return;
-  }
+  if (CV->isNullValue() || isa<UndefValue>(CV))
+    return EmitZeros(Size, AddrSpace);
   
   if (const ConstantArray *CVA = dyn_cast<ConstantArray>(CV)) {
-    EmitGlobalConstantArray(CVA , AddrSpace);
+    EmitGlobalConstantArray(CVA, AddrSpace);
     return;
   }
   
index 317e74d5b320a1d59b2b93b82a754073e51c972d..1fd048ef667f66a4b86ea1ead7a1edf8add3d53b 100644 (file)
@@ -203,6 +203,8 @@ void MCAsmStreamer::EmitValue(const MCExpr *Value, unsigned Size) {
 /// EmitFill - Emit NumBytes bytes worth of the value specified by
 /// FillValue.  This implements directives such as '.space'.
 void MCAsmStreamer::EmitFill(uint64_t NumBytes, uint8_t FillValue) {
+  if (NumBytes == 0) return;
+  
   if (const char *ZeroDirective = MAI.getZeroDirective()) {
     OS << ZeroDirective << NumBytes;
     if (FillValue != 0)