[llvm-commits] CVS: llvm/utils/TableGen/DAGISelEmitter.cpp

Evan Cheng evan.cheng at apple.com
Sat Oct 14 01:30:29 PDT 2006



Changes in directory llvm/utils/TableGen:

DAGISelEmitter.cpp updated: 1.270 -> 1.271
---
Log message:

When checking if a load can be folded, we check if there is any non-direct
way to reach the load via any nodes that would be folded. Start from the
root of the matched sub-tree.


---
Diffs of the changes:  (+12 -10)

 DAGISelEmitter.cpp |   22 ++++++++++++----------
 1 files changed, 12 insertions(+), 10 deletions(-)


Index: llvm/utils/TableGen/DAGISelEmitter.cpp
diff -u llvm/utils/TableGen/DAGISelEmitter.cpp:1.270 llvm/utils/TableGen/DAGISelEmitter.cpp:1.271
--- llvm/utils/TableGen/DAGISelEmitter.cpp:1.270	Thu Oct 12 18:18:52 2006
+++ llvm/utils/TableGen/DAGISelEmitter.cpp	Sat Oct 14 03:30:15 2006
@@ -2199,8 +2199,8 @@
   /// EmitMatchCode - Emit a matcher for N, going to the label for PatternNo
   /// if the match fails. At this point, we already know that the opcode for N
   /// matches, and the SDNode for the result has the RootName specified name.
-  void EmitMatchCode(TreePatternNode *N, TreePatternNode *P,
-                     const std::string &RootName,
+  void EmitMatchCode(TreePatternNode *Root, TreePatternNode *N,
+                     TreePatternNode *P, const std::string &RootName,
                      const std::string &ChainSuffix, bool &FoundChain) {
     bool isRoot = (P == NULL);
     // Emit instruction predicates. Each predicate is just a string for now.
@@ -2284,13 +2284,14 @@
           //      |         ^
           //     [XX]-------|
           const SDNodeInfo &PInfo = ISE.getSDNodeInfo(P->getOperator());
-          if (PInfo.getNumOperands() > 1 ||
+          if (P != Root ||
+              PInfo.getNumOperands() > 1 ||
               PInfo.hasProperty(SDNPHasChain) ||
               PInfo.hasProperty(SDNPInFlag) ||
               PInfo.hasProperty(SDNPOptInFlag)) {
             std::string ParentName(RootName.begin(), RootName.end()-1);
             emitCheck("CanBeFoldedBy(" + RootName + ".Val, " + ParentName +
-                      ".Val)");
+                      ".Val, N.Val)");
           }
         }
       }
@@ -2358,7 +2359,7 @@
           emitCheck(MaskPredicate + RootName + "0, cast<ConstantSDNode>(" +
                     RootName + "1), " + itostr(II->getValue()) + ")");
           
-          EmitChildMatchCode(N->getChild(0), N, RootName + utostr(0),
+          EmitChildMatchCode(Root, N->getChild(0), N, RootName + utostr(0),
                              ChainSuffix + utostr(0), FoundChain);
           return;
         }
@@ -2369,7 +2370,7 @@
       emitInit("SDOperand " + RootName + utostr(OpNo) + " = " +
                RootName + ".getOperand(" +utostr(OpNo) + ");");
 
-      EmitChildMatchCode(N->getChild(i), N, RootName + utostr(OpNo),
+      EmitChildMatchCode(Root, N->getChild(i), N, RootName + utostr(OpNo),
                          ChainSuffix + utostr(OpNo), FoundChain);
     }
 
@@ -2400,15 +2401,15 @@
     }
   }
 
-  void EmitChildMatchCode(TreePatternNode *Child, TreePatternNode *Parent,
-                          const std::string &RootName,
+  void EmitChildMatchCode(TreePatternNode *Root, TreePatternNode *Child,
+                          TreePatternNode *Parent, const std::string &RootName,
                           const std::string &ChainSuffix, bool &FoundChain) {
     if (!Child->isLeaf()) {
       // If it's not a leaf, recursively match.
       const SDNodeInfo &CInfo = ISE.getSDNodeInfo(Child->getOperator());
       emitCheck(RootName + ".getOpcode() == " +
                 CInfo.getEnumName());
-      EmitMatchCode(Child, Parent, RootName, ChainSuffix, FoundChain);
+      EmitMatchCode(Root, Child, Parent, RootName, ChainSuffix, FoundChain);
       if (NodeHasProperty(Child, SDNPHasChain, ISE))
         FoldedChains.push_back(std::make_pair(RootName, CInfo.getNumResults()));
     } else {
@@ -3098,7 +3099,8 @@
 
   // Emit the matcher, capturing named arguments in VariableMap.
   bool FoundChain = false;
-  Emitter.EmitMatchCode(Pattern.getSrcPattern(), NULL, "N", "", FoundChain);
+  Emitter.EmitMatchCode(Pattern.getSrcPattern(), Pattern.getSrcPattern(), NULL,
+                        "N", "", FoundChain);
 
   // TP - Get *SOME* tree pattern, we don't care which.
   TreePattern &TP = *PatternFragments.begin()->second;






More information about the llvm-commits mailing list