OSDN Git Service

Predicate function on the node should be matched before its childrean' matching
authorEvan Cheng <evan.cheng@apple.com>
Mon, 9 Oct 2006 21:02:17 +0000 (21:02 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Mon, 9 Oct 2006 21:02:17 +0000 (21:02 +0000)
code. This is especially important now matching ISD::LOAD also requires a
Predicate_Load call.

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

utils/TableGen/DAGISelEmitter.cpp

index 28fdec5..6267a3b 100644 (file)
@@ -2312,6 +2312,10 @@ public:
       }
     }
 
+    // If there is a node predicate for this, emit the call.
+    if (!N->getPredicateFn().empty())
+      emitCheck(N->getPredicateFn() + "(" + RootName + ".Val)");
+
     const ComplexPattern *CP;
     for (unsigned i = 0, e = N->getNumChildren(); i != e; ++i, ++OpNo) {
       emitInit("SDOperand " + RootName + utostr(OpNo) + " = " +
@@ -2420,10 +2424,6 @@ public:
         Code += ", CPTmp" + utostr(i);
       emitCheck(Code + ")");
     }
-
-    // If there is a node predicate for this, emit the call.
-    if (!N->getPredicateFn().empty())
-      emitCheck(N->getPredicateFn() + "(" + RootName + ".Val)");
   }
 
   /// EmitResultCode - Emit the action for a pattern.  Now that it has matched