[llvm-commits] [llvm] r76279 - in /llvm/trunk: include/llvm/Target/TargetAsmInfo.h lib/Target/TargetAsmInfo.cpp utils/TableGen/AsmWriterEmitter.cpp

Evan Cheng evan.cheng at apple.com
Fri Jul 17 18:43:55 PDT 2009


Author: evancheng
Date: Fri Jul 17 20:43:53 2009
New Revision: 76279

URL: http://llvm.org/viewvc/llvm-project?rev=76279&view=rev
Log:
Revert 76177 for now. It's messing up ARM asm printing. Also this significant debate about its efficiency.

Modified:
    llvm/trunk/include/llvm/Target/TargetAsmInfo.h
    llvm/trunk/lib/Target/TargetAsmInfo.cpp
    llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp

Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmInfo.h?rev=76279&r1=76278&r2=76279&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original)
+++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Fri Jul 17 20:43:53 2009
@@ -222,14 +222,6 @@
     /// assembler.
     const char *CommentString;            // Defaults to "#"
 
-    /// FirstOperandColumn - The output column where the first operand
-    /// should be printed
-    unsigned FirstOperandColumn;          // Defaults to 0 (ignored)
-
-    /// MaxOperandLength - The maximum length of any printed asm
-    /// operand
-    unsigned MaxOperandLength;            // Defaults to 0 (ignored)
-
     /// GlobalPrefix - If this is set to a non-empty string, it is prepended
     /// onto all global symbols.  This is often used for "_" or ".".
     const char *GlobalPrefix;             // Defaults to ""
@@ -705,9 +697,6 @@
     const char *getCommentString() const {
       return CommentString;
     }
-    unsigned getOperandColumn(unsigned Operand) const {
-      return FirstOperandColumn + (MaxOperandLength+1)*(Operand-1);
-    }
     const char *getGlobalPrefix() const {
       return GlobalPrefix;
     }

Modified: llvm/trunk/lib/Target/TargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetAsmInfo.cpp?rev=76279&r1=76278&r2=76279&view=diff

==============================================================================
--- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Fri Jul 17 20:43:53 2009
@@ -45,8 +45,6 @@
   SeparatorChar = ';';
   CommentColumn = 60;
   CommentString = "#";
-  FirstOperandColumn = 0;
-  MaxOperandLength = 0;
   GlobalPrefix = "";
   PrivateGlobalPrefix = ".";
   LessPrivateGlobalPrefix = "";

Modified: llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp?rev=76279&r1=76278&r2=76279&view=diff

==============================================================================
--- llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/AsmWriterEmitter.cpp Fri Jul 17 20:43:53 2009
@@ -19,7 +19,6 @@
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/MathExtras.h"
 #include <algorithm>
-#include <sstream>
 #include <iostream>
 using namespace llvm;
 
@@ -33,11 +32,7 @@
 // This should be an anon namespace, this works around a GCC warning.
 namespace llvm {  
   struct AsmWriterOperand {
-    enum OpType { 
-      isLiteralTextOperand, 
-      isMachineInstrOperand,
-      isLiteralStatementOperand
-    } OperandType;
+    enum { isLiteralTextOperand, isMachineInstrOperand } OperandType;
 
     /// Str - For isLiteralTextOperand, this IS the literal text.  For
     /// isMachineInstrOperand, this is the PrinterMethodName for the operand.
@@ -52,16 +47,14 @@
     std::string MiModifier;
 
     // To make VS STL happy
-    AsmWriterOperand(OpType op = isLiteralTextOperand):OperandType(op) {}
+    AsmWriterOperand():OperandType(isLiteralTextOperand) {}
 
-    AsmWriterOperand(const std::string &LitStr,
-                     OpType op = isLiteralTextOperand)
-      : OperandType(op), Str(LitStr) {}
+    explicit AsmWriterOperand(const std::string &LitStr)
+      : OperandType(isLiteralTextOperand), Str(LitStr) {}
 
     AsmWriterOperand(const std::string &Printer, unsigned OpNo, 
-                     const std::string &Modifier,
-                     OpType op = isMachineInstrOperand) 
-      : OperandType(op), Str(Printer), MIOpNo(OpNo),
+                     const std::string &Modifier) 
+      : OperandType(isMachineInstrOperand), Str(Printer), MIOpNo(OpNo),
       MiModifier(Modifier) {}
 
     bool operator!=(const AsmWriterOperand &Other) const {
@@ -85,22 +78,6 @@
     std::vector<AsmWriterOperand> Operands;
     const CodeGenInstruction *CGI;
 
-    /// MAX_GROUP_NESTING_LEVEL - The maximum number of group nesting
-    /// levels we ever expect to see in an asm operand.
-    static const int MAX_GROUP_NESTING_LEVEL = 10;
-
-    /// GroupLevel - The level of nesting of the current operand
-    /// group, such as [reg + (reg + offset)].  -1 means we are not in
-    /// a group.
-    int GroupLevel;
-
-    /// GroupDelim - Remember the delimeter for a group operand.
-    char GroupDelim[MAX_GROUP_NESTING_LEVEL];
-
-    /// InGroup - Determine whether we are in the middle of an
-    /// operand group.
-    bool InGroup() const { return GroupLevel != -1; }
-
     AsmWriterInst(const CodeGenInstruction &CGI, unsigned Variant);
 
     /// MatchesAllButOneOp - If this instruction is exactly identical to the
@@ -112,70 +89,6 @@
     void AddLiteralString(const std::string &Str) {
       // If the last operand was already a literal text string, append this to
       // it, otherwise add a new operand.
-
-      std::string::size_type SearchStart = 0;
-      std::string::size_type SpaceStartPos = std::string::npos;
-      do {
-        // Search for whitespace and replace with calls to set the
-        // output column.
-        SpaceStartPos = Str.find_first_of(" \t", SearchStart);
-        // Assume grouped text is one operand.
-        std::string::size_type StartDelimPos = Str.find_first_of("[{(", SearchStart);
-
-        SearchStart = std::string::npos;
-
-        if (StartDelimPos != std::string::npos) {
-          ++GroupLevel;
-          assert(GroupLevel < MAX_GROUP_NESTING_LEVEL
-                 && "Exceeded maximum operand group nesting level");
-          GroupDelim[GroupLevel] = Str[StartDelimPos];
-          if (SpaceStartPos != std::string::npos &&
-              SpaceStartPos > StartDelimPos) {
-            // This space doesn't count.
-            SpaceStartPos = std::string::npos;
-          }
-        }
-
-        if (InGroup()) {
-          // Find the end delimiter.
-          char EndDelim = (GroupDelim[GroupLevel] == '{' ? '}' : 
-                           (GroupDelim[GroupLevel] == '(' ? ')' : ']'));
-          std::string::size_type EndDelimSearchStart =
-            StartDelimPos == std::string::npos ? 0 : StartDelimPos+1;
-          std::string::size_type EndDelimPos = Str.find(EndDelim,
-                                                        EndDelimSearchStart);
-          SearchStart = EndDelimPos;
-          if (EndDelimPos != std::string::npos) {
-            // Iterate.
-            SearchStart = EndDelimPos + 1;
-            --GroupLevel;
-            assert(GroupLevel > -2 && "Too many end delimeters!");
-          }
-          if (InGroup())
-            SpaceStartPos = std::string::npos;
-        }
-      } while (SearchStart != std::string::npos);
-
-
-      if (SpaceStartPos != std::string::npos) {
-        std::string::size_type SpaceEndPos = 
-          Str.find_first_not_of(" \t", SpaceStartPos+1);
-        if (SpaceStartPos != 0) {
-          // Emit the first part of the string.
-          AddLiteralString(Str.substr(0, SpaceStartPos));
-        }
-        Operands.push_back(
-          AsmWriterOperand(
-            "O.PadToColumn(TAI->getOperandColumn(OperandColumn++), 1);\n",
-            AsmWriterOperand::isLiteralStatementOperand));
-        if (SpaceEndPos != std::string::npos) {
-          // Emit the last part of the string.
-          AddLiteralString(Str.substr(SpaceEndPos));
-        }
-        // We've emitted the whole string.
-        return;
-      }
-      
       if (!Operands.empty() &&
           Operands.back().OperandType == AsmWriterOperand::isLiteralTextOperand)
         Operands.back().Str.append(Str);
@@ -190,18 +103,6 @@
   if (OperandType == isLiteralTextOperand)
     return "O << \"" + Str + "\"; ";
 
-  if (OperandType == isLiteralStatementOperand) {
-    return Str;
-  }
-
-  if (OperandType == isLiteralStatementOperand) {
-    return Str;
-  }
-
-  if (OperandType == isLiteralStatementOperand) {
-    return Str;
-  }
-
   std::string Result = Str + "(MI";
   if (MIOpNo != ~0U)
     Result += ", " + utostr(MIOpNo);
@@ -214,8 +115,7 @@
 /// ParseAsmString - Parse the specified Instruction's AsmString into this
 /// AsmWriterInst.
 ///
-AsmWriterInst::AsmWriterInst(const CodeGenInstruction &CGI, unsigned Variant)
-    : GroupLevel(-1) {
+AsmWriterInst::AsmWriterInst(const CodeGenInstruction &CGI, unsigned Variant) {
   this->CGI = &CGI;
   unsigned CurVariant = ~0U;  // ~0 if we are outside a {.|.|.} region, other #.
 
@@ -455,9 +355,6 @@
     }
     O << "\n";
   }
-  O << "    EmitComments(*MI);\n";
-  // Print the final newline
-  O << "    O << \"\\n\";\n";
   O << "    break;\n";
 }
 
@@ -784,16 +681,8 @@
 
   O << "  // Emit the opcode for the instruction.\n"
     << "  unsigned Bits = OpInfo[MI->getOpcode()];\n"
-    << "  if (Bits == 0) return false;\n\n";
-
-  O << "  std::string OpStr(AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << "));\n"
-    << "  unsigned OperandColumn = 1;\n"
-    << "  O << OpStr;\n\n";
-
-  O << "  if (OpStr.find_last_of(\" \\t\") == OpStr.size()-1) {\n"
-    << "    O.PadToColumn(TAI->getOperandColumn(1));\n"
-    << "    OperandColumn = 2;\n"
-    << "  }\n\n";
+    << "  if (Bits == 0) return false;\n"
+    << "  O << AsmStrs+(Bits & " << (1 << AsmStrBits)-1 << ");\n\n";
 
   // Output the table driven operand information.
   BitsLeft = 32-AsmStrBits;
@@ -857,10 +746,10 @@
 
     O << "  }\n";
     O << "  EmitComments(*MI);\n";
+    // Print the final newline
+    O << "  O << \"\\n\";\n";
+    O << "  return true;\n";
   }
-  // Print the final newline
-  O << "  O << \"\\n\";\n";
-  O << "  return true;\n";
   
   O << "}\n";
 }





More information about the llvm-commits mailing list