Add support for naming the destination of a "set" in a pattern
authorChris Lattner <sabre@nondot.org>
Mon, 11 Aug 2003 20:32:02 +0000 (20:32 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 11 Aug 2003 20:32:02 +0000 (20:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7748 91177308-0d34-0410-b5e6-96231b3b80d8

support/tools/TableGen/InstrSelectorEmitter.cpp
support/tools/TableGen/InstrSelectorEmitter.h
utils/TableGen/InstrSelectorEmitter.cpp
utils/TableGen/InstrSelectorEmitter.h

index 153f27e512fb1a0ea93c00fc9f42abb21fdce92b..d9f333be6e8e3ff3faa759ee20f6c0f5d5365982 100644 (file)
@@ -138,6 +138,7 @@ Pattern::Pattern(PatternType pty, DagInit *RawPat, Record *TheRec,
       if (!Tree->getChild(0)->isLeaf())
         error("Arg #0 of set should be a register or register class!");
       Result = Tree->getChild(0)->getValueRecord();
+      ResultName = Tree->getChildName(0);
       Tree = Tree->getChild(1);
     }
   }
@@ -895,6 +896,9 @@ static std::string getArgName(Pattern *P, const std::string &ArgName,
   for (unsigned i = 0, e = P->getNumArgs(); i != e; ++i)
     if (P->getArgName(i) == ArgName)
       return Operands[i].second + "->Val";
+
+  if (ArgName == P->getResultName())
+    return "NewReg";
   P->error("Pattern does not define a value named $" + ArgName + "!");
   return "";
 }
index a1b1b6e7816adffbdfc158b8a33c33a4e4487cf8..9588130b612880732c2d18c4feb302f2abeca0a5 100644 (file)
@@ -142,6 +142,7 @@ private:
   /// register result, specified with a (set) in the pattern.
   ///
   Record *Result;
+  std::string ResultName;     // The name of the result value...
 
   /// TheRecord - The actual TableGen record corresponding to this pattern.
   ///
@@ -185,6 +186,7 @@ public:
   TreePatternNode *getTree() const { return Tree; }
   
   Record *getResult() const { return Result; }
+  const std::string &getResultName() const { return ResultName; }
 
   /// getRecord - Return the actual TableGen record corresponding to this
   /// pattern.
index 153f27e512fb1a0ea93c00fc9f42abb21fdce92b..d9f333be6e8e3ff3faa759ee20f6c0f5d5365982 100644 (file)
@@ -138,6 +138,7 @@ Pattern::Pattern(PatternType pty, DagInit *RawPat, Record *TheRec,
       if (!Tree->getChild(0)->isLeaf())
         error("Arg #0 of set should be a register or register class!");
       Result = Tree->getChild(0)->getValueRecord();
+      ResultName = Tree->getChildName(0);
       Tree = Tree->getChild(1);
     }
   }
@@ -895,6 +896,9 @@ static std::string getArgName(Pattern *P, const std::string &ArgName,
   for (unsigned i = 0, e = P->getNumArgs(); i != e; ++i)
     if (P->getArgName(i) == ArgName)
       return Operands[i].second + "->Val";
+
+  if (ArgName == P->getResultName())
+    return "NewReg";
   P->error("Pattern does not define a value named $" + ArgName + "!");
   return "";
 }
index a1b1b6e7816adffbdfc158b8a33c33a4e4487cf8..9588130b612880732c2d18c4feb302f2abeca0a5 100644 (file)
@@ -142,6 +142,7 @@ private:
   /// register result, specified with a (set) in the pattern.
   ///
   Record *Result;
+  std::string ResultName;     // The name of the result value...
 
   /// TheRecord - The actual TableGen record corresponding to this pattern.
   ///
@@ -185,6 +186,7 @@ public:
   TreePatternNode *getTree() const { return Tree; }
   
   Record *getResult() const { return Result; }
+  const std::string &getResultName() const { return ResultName; }
 
   /// getRecord - Return the actual TableGen record corresponding to this
   /// pattern.