Promote xform fns to be explicit nodes in result patterns, and clean off
authorChris Lattner <sabre@nondot.org>
Wed, 14 Sep 2005 23:01:59 +0000 (23:01 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 14 Sep 2005 23:01:59 +0000 (23:01 +0000)
predicates since they will have already matched at this point.

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

utils/TableGen/DAGISelEmitter.cpp

index 952100ced8a4cf93e1469cfc56ca2496e564d164..7f24c37ab31fa469ca01a4ba29126d1f0ce051bc 100644 (file)
@@ -830,7 +830,21 @@ void DAGISelEmitter::ParseAndResolveInstructions() {
         I->error("Operand $" + OpName +
                  "'s type disagrees between the operand and pattern");
       
-      ResultNodeOperands.push_back(InVal->clone());
+      // Construct the result for the dest-pattern operand list.
+      TreePatternNode *OpNode = InVal->clone();
+      
+      // No predicate is useful on the result.
+      OpNode->setPredicateFn("");
+      
+      // Promote the xform function to be an explicit node if set.
+      if (Record *Xform = OpNode->getTransformFn()) {
+        OpNode->setTransformFn(0);
+        std::vector<TreePatternNode*> Children;
+        Children.push_back(OpNode);
+        OpNode = new TreePatternNode(Xform, Children);
+      }
+      
+      ResultNodeOperands.push_back(OpNode);
     }
     
     if (!InstInputsCheck.empty())