enhance RecordNode and RecordChild comments to indicate what
authorChris Lattner <sabre@nondot.org>
Mon, 1 Mar 2010 02:24:17 +0000 (02:24 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 1 Mar 2010 02:24:17 +0000 (02:24 +0000)
slot they're recording into, no functionality change.

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

utils/TableGen/DAGISelMatcher.h
utils/TableGen/DAGISelMatcherEmitter.cpp
utils/TableGen/DAGISelMatcherGen.cpp
utils/TableGen/DAGISelMatcherOpt.cpp

index 2f26b924d74268e75f0f4e330e18ab0fc3aea482..657c41e5e11c55270fcb0721fbcf96006108136b 100644 (file)
@@ -186,11 +186,16 @@ class RecordMatcher : public Matcher {
   /// WhatFor - This is a string indicating why we're recording this.  This
   /// should only be used for comment generation not anything semantic.
   std::string WhatFor;
+  
+  /// ResultNo - The slot number in the RecordedNodes vector that this will be,
+  /// just printed as a comment.
+  unsigned ResultNo;
 public:
-  RecordMatcher(const std::string &whatfor)
-    : Matcher(RecordNode), WhatFor(whatfor) {}
+  RecordMatcher(const std::string &whatfor, unsigned resultNo)
+    : Matcher(RecordNode), WhatFor(whatfor), ResultNo(resultNo) {}
   
   const std::string &getWhatFor() const { return WhatFor; }
+  unsigned getResultNo() const { return ResultNo; }
   
   static inline bool classof(const Matcher *N) {
     return N->getKind() == RecordNode;
@@ -212,13 +217,20 @@ class RecordChildMatcher : public Matcher {
   /// WhatFor - This is a string indicating why we're recording this.  This
   /// should only be used for comment generation not anything semantic.
   std::string WhatFor;
+  
+  /// ResultNo - The slot number in the RecordedNodes vector that this will be,
+  /// just printed as a comment.
+  unsigned ResultNo;
 public:
-  RecordChildMatcher(unsigned childno, const std::string &whatfor)
-  : Matcher(RecordChild), ChildNo(childno), WhatFor(whatfor) {}
+  RecordChildMatcher(unsigned childno, const std::string &whatfor,
+                     unsigned resultNo)
+  : Matcher(RecordChild), ChildNo(childno), WhatFor(whatfor),
+    ResultNo(resultNo) {}
   
   unsigned getChildNo() const { return ChildNo; }
   const std::string &getWhatFor() const { return WhatFor; }
-  
+  unsigned getResultNo() const { return ResultNo; }
+
   static inline bool classof(const Matcher *N) {
     return N->getKind() == RecordChild;
   }
index 133157f0cc50ab89238b93e2b282daf1bff19697..5b435fe4bae4cc48fbd188979c904b2c7716af26 100644 (file)
@@ -183,14 +183,16 @@ EmitMatcher(const Matcher *N, unsigned Indent, unsigned CurrentIdx,
       
   case Matcher::RecordNode:
     OS << "OPC_RecordNode,";
-    OS.PadToColumn(CommentIndent) << "// "
+    OS.PadToColumn(CommentIndent) << "// #"
+       << cast<RecordMatcher>(N)->getResultNo() << " = "
        << cast<RecordMatcher>(N)->getWhatFor() << '\n';
     return 1;
 
   case Matcher::RecordChild:
     OS << "OPC_RecordChild" << cast<RecordChildMatcher>(N)->getChildNo()
        << ',';
-    OS.PadToColumn(CommentIndent) << "// "
+    OS.PadToColumn(CommentIndent) << "// #"
+      << cast<RecordChildMatcher>(N)->getResultNo() << " = "
       << cast<RecordChildMatcher>(N)->getWhatFor() << '\n';
     return 1;
       
index d198488305923100901f2ec41871cd68bac0e2f5..5a253e8d202b27e1e2199be20d10c240f03db9b7 100644 (file)
@@ -225,7 +225,8 @@ void MatcherGen::EmitLeafMatchCode(const TreePatternNode *N) {
   // If we have a physreg reference like (mul gpr:$src, EAX) then we need to
   // record the register 
   if (LeafRec->isSubClassOf("Register")) {
-    AddMatcher(new RecordMatcher("physreg input "+LeafRec->getName()));
+    AddMatcher(new RecordMatcher("physreg input "+LeafRec->getName(),
+                                 NextRecordedOperandNo));
     PhysRegInputs.push_back(std::make_pair(LeafRec, NextRecordedOperandNo++));
     return;
   }
@@ -360,7 +361,8 @@ void MatcherGen::EmitOperatorMatchCode(const TreePatternNode *N,
   if (N->NodeHasProperty(SDNPHasChain, CGP)) {
     // Record the node and remember it in our chained nodes list.
     AddMatcher(new RecordMatcher("'" + N->getOperator()->getName() +
-                                         "' chained node"));
+                                         "' chained node",
+                                 NextRecordedOperandNo));
     // Remember all of the input chains our pattern will match.
     MatchedChainNodes.push_back(NextRecordedOperandNo++);
     
@@ -436,7 +438,8 @@ void MatcherGen::EmitOperatorMatchCode(const TreePatternNode *N,
     
     // Record the node and remember it in our chained nodes list.
     AddMatcher(new RecordMatcher("'" + N->getOperator()->getName() +
-                                         "' flag output node"));
+                                         "' flag output node",
+                                 NextRecordedOperandNo));
     // Remember all of the nodes with output flags our pattern will match.
     MatchedFlagResultNodes.push_back(NextRecordedOperandNo++);
   }
@@ -474,8 +477,8 @@ void MatcherGen::EmitMatchCode(const TreePatternNode *N,
     unsigned &VarMapEntry = VariableMap[N->getName()];
     if (VarMapEntry == 0) {
       // If it is a named node, we must emit a 'Record' opcode.
+      AddMatcher(new RecordMatcher("$" + N->getName(), NextRecordedOperandNo));
       VarMapEntry = ++NextRecordedOperandNo;
-      AddMatcher(new RecordMatcher("$" + N->getName()));
     } else {
       // If we get here, this is a second reference to a specific name.  Since
       // we already have checked that the first reference is valid, we don't
index 11818279052e892526b5f6b34b8b0d86b4a42ca8..f8dfe6d82c5100b4cc518224af47a811b3f273a6 100644 (file)
@@ -43,7 +43,8 @@ static void ContractNodes(OwningPtr<Matcher> &MatcherPtr,
   if (MoveChildMatcher *MC = dyn_cast<MoveChildMatcher>(N)) {
     Matcher *New = 0;
     if (RecordMatcher *RM = dyn_cast<RecordMatcher>(MC->getNext()))
-      New = new RecordChildMatcher(MC->getChildNo(), RM->getWhatFor());
+      New = new RecordChildMatcher(MC->getChildNo(), RM->getWhatFor(),
+                                   RM->getResultNo());
     
     if (CheckTypeMatcher *CT= dyn_cast<CheckTypeMatcher>(MC->getNext()))
       New = new CheckChildTypeMatcher(MC->getChildNo(), CT->getType());