pull name slicing out of BuildInstructionOperandReference so
authorChris Lattner <sabre@nondot.org>
Thu, 4 Nov 2010 01:58:23 +0000 (01:58 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 4 Nov 2010 01:58:23 +0000 (01:58 +0000)
it doesn't do any lexical stuff anymore.

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

utils/TableGen/AsmMatcherEmitter.cpp

index d85d098d612a8469a2c4d06d4084597f20a02414..2ffdd13ab8743d58cb38b473a5b9071ea165f565 100644 (file)
@@ -500,8 +500,7 @@ private:
   ClassInfo *getTokenClass(StringRef Token);
 
   /// getOperandClass - Lookup or create the class for the given operand.
-  ClassInfo *getOperandClass(StringRef Token,
-                             const CGIOperandList::OperandInfo &OI);
+  ClassInfo *getOperandClass(const CGIOperandList::OperandInfo &OI);
 
   /// BuildRegisterClasses - Build the ClassInfo* instances for register
   /// classes.
@@ -511,7 +510,7 @@ private:
   /// operand classes.
   void BuildOperandClasses();
 
-  void BuildInstructionOperandReference(MatchableInfo *II,
+  void BuildInstructionOperandReference(MatchableInfo *II, StringRef OpName,
                                         MatchableInfo::AsmOperand &Op);
 
 public:
@@ -778,8 +777,7 @@ ClassInfo *AsmMatcherInfo::getTokenClass(StringRef Token) {
 }
 
 ClassInfo *
-AsmMatcherInfo::getOperandClass(StringRef Token,
-                                const CGIOperandList::OperandInfo &OI) {
+AsmMatcherInfo::getOperandClass(const CGIOperandList::OperandInfo &OI) {
   if (OI.Rec->isSubClassOf("RegisterClass")) {
     if (ClassInfo *CI = RegisterClassClasses[OI.Rec])
       return CI;
@@ -1102,8 +1100,14 @@ void AsmMatcherInfo::BuildInfo() {
         continue;
       }
 
+      StringRef OperandName;
+      if (Token[1] == '{')
+        OperandName = Token.substr(2, Token.size() - 3);
+      else
+        OperandName = Token.substr(1);
+      
       // Otherwise this is an operand reference.
-      BuildInstructionOperandReference(II, Op);
+      BuildInstructionOperandReference(II, OperandName, Op);
     }
     
     II->BuildResultOperands();
@@ -1117,16 +1121,8 @@ void AsmMatcherInfo::BuildInfo() {
 /// named operand such as $src.  Resolve the Class and OperandInfo pointers.
 void AsmMatcherInfo::
 BuildInstructionOperandReference(MatchableInfo *II,
+                                 StringRef OperandName,
                                  MatchableInfo::AsmOperand &Op) {
-  StringRef Token = Op.Token;
-  assert(Token[0] == '$' && "Not an operand name ref");
-  
-  StringRef OperandName;
-  if (Token[1] == '{')
-    OperandName = Token.substr(2, Token.size() - 3);
-  else
-    OperandName = Token.substr(1);
-  
   const CGIOperandList &Operands = II->TheOperandList;
   
   
@@ -1137,7 +1133,7 @@ BuildInstructionOperandReference(MatchableInfo *II,
                   OperandName.str() + "'");
 
   // Set up the operand class.
-  Op.Class = getOperandClass(Token, Operands[Idx]);
+  Op.Class = getOperandClass(Operands[Idx]);
 
   // If the named operand is tied, canonicalize it to the untied operand.
   // For example, something like: