De-virtualize EmitZeroes.
authorJeff Cohen <jeffc@jolt-lang.org>
Tue, 2 May 2006 03:46:13 +0000 (03:46 +0000)
committerJeff Cohen <jeffc@jolt-lang.org>
Tue, 2 May 2006 03:46:13 +0000 (03:46 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28046 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/AsmPrinter.h
lib/CodeGen/AsmPrinter.cpp
lib/Target/X86/X86IntelAsmPrinter.cpp
lib/Target/X86/X86IntelAsmPrinter.h

index 739c1a3ff0d23f61702c6f92c7cec095383adab6..8a13873bc2a984d3f8e5ec78f23a325250a0b157 100644 (file)
@@ -101,6 +101,7 @@ namespace llvm {
     /// "\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 @@ namespace llvm {
 
     /// 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.
     ///
index 9e94f7a52fa618d75916557bf13daf5e4f9eae5c..aad02327c64cedd62b7705dc716770400f3bfaa2 100644 (file)
@@ -37,6 +37,7 @@ AsmPrinter::AsmPrinter(std::ostream &o, TargetMachine &tm)
   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::EmitAlignment(unsigned NumBits, const GlobalValue *GV) const {
 ///
 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";
     }
index 112f496eadca05721c74f0b31bc3ce79dbb356ab..900f67e9b8edb75ed2934ced6eea3fd902eea76a 100755 (executable)
@@ -28,7 +28,8 @@ X86IntelAsmPrinter::X86IntelAsmPrinter(std::ostream &O, X86TargetMachine &TM)
   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::SwitchSection(const char *NewSection,
   }
 }
 
-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) {
index 7c81923ed6651739427aaf33bfdc21710096f8e2..34a7110d5875580da113fc3d6bbd3e6617e83e3c 100755 (executable)
@@ -93,7 +93,6 @@ struct X86IntelAsmPrinter : public X86SharedAsmPrinter {
   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;
 };