De-virtualize EmitZeroes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28046 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h
index 739c1a3..8a13873 100644
--- a/include/llvm/CodeGen/AsmPrinter.h
+++ b/include/llvm/CodeGen/AsmPrinter.h
@@ -101,6 +101,7 @@
     /// "\t.zero\t" and "\t.space\t".  If this is set to null, the
     /// Data*bitsDirective's will be used to emit zero bytes.
     const char *ZeroDirective;   // Defaults to "\t.zero\t"
+    const char *ZeroDirectiveSuffix;  // Defaults to ""
 
     /// AsciiDirective - This directive allows emission of an ascii string with
     /// the standard C escape characters embedded into it.
@@ -256,7 +257,7 @@
 
     /// EmitZeros - Emit a block of zeros.
     ///
-    virtual void EmitZeros(uint64_t NumZeros) const;
+    void EmitZeros(uint64_t NumZeros) const;
 
     /// EmitString - Emit a zero-byte-terminated string constant.
     ///
diff --git a/lib/CodeGen/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter.cpp
index 9e94f7a..aad0232 100644
--- a/lib/CodeGen/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter.cpp
@@ -37,6 +37,7 @@
   InlineAsmStart("#APP\n\t"),
   InlineAsmEnd("\t#NO_APP\n"),
   ZeroDirective("\t.zero\t"),
+  ZeroDirectiveSuffix(0),
   AsciiDirective("\t.ascii\t"),
   AscizDirective("\t.asciz\t"),
   Data8bitsDirective("\t.byte\t"),
@@ -240,9 +241,12 @@
 ///
 void AsmPrinter::EmitZeros(uint64_t NumZeros) const {
   if (NumZeros) {
-    if (ZeroDirective)
-      O << ZeroDirective << NumZeros << "\n";
-    else {
+    if (ZeroDirective) {
+      O << ZeroDirective << NumZeros;
+      if (ZeroDirectiveSuffix)
+        O << ZeroDirectiveSuffix;
+      O << "\n";
+    } else {
       for (; NumZeros; --NumZeros)
         O << Data8bitsDirective << "0\n";
     }
diff --git a/lib/Target/X86/X86IntelAsmPrinter.cpp b/lib/Target/X86/X86IntelAsmPrinter.cpp
index 112f496..900f67e 100755
--- a/lib/Target/X86/X86IntelAsmPrinter.cpp
+++ b/lib/Target/X86/X86IntelAsmPrinter.cpp
@@ -28,7 +28,8 @@
   GlobalPrefix = "_";
   PrivateGlobalPrefix = "$";
   AlignDirective = "\talign\t";
-  ZeroDirective = 0;
+  ZeroDirective = "\tdb\t";
+  ZeroDirectiveSuffix = " dup(0)";
   AsciiDirective = "\tdb\t";
   AscizDirective = 0;
   Data8bitsDirective = "\t.db\t";
@@ -472,12 +473,6 @@
   }
 }
 
-void X86IntelAsmPrinter::EmitZeros(uint64_t NumZeros) const {
-  if (NumZeros) {
-    O << "\tdb " << NumZeros << " dup(0)\n";
-  }
-}
-
 void X86IntelAsmPrinter::EmitString(const ConstantArray *CVA) const {
   unsigned NumElts = CVA->getNumOperands();
   if (NumElts) {
diff --git a/lib/Target/X86/X86IntelAsmPrinter.h b/lib/Target/X86/X86IntelAsmPrinter.h
index 7c81923..34a7110 100755
--- a/lib/Target/X86/X86IntelAsmPrinter.h
+++ b/lib/Target/X86/X86IntelAsmPrinter.h
@@ -93,7 +93,6 @@
   bool doFinalization(Module &M);
 
   virtual void SwitchSection(const char *NewSection, const GlobalValue *GV);
-  virtual void EmitZeros(uint64_t NumZeros) const;
   virtual void EmitString(const ConstantArray *CVA) const;
 };