From 6f94c802a2f750ce23d85fe8db592a19b6dfff8d Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 14 Sep 2005 23:01:59 +0000 Subject: [PATCH] Promote xform fns to be explicit nodes in result patterns, and clean off predicates since they will have already matched at this point. llvm-svn: 23362 --- utils/TableGen/DAGISelEmitter.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp index 952100ced8a..7f24c37ab31 100644 --- a/utils/TableGen/DAGISelEmitter.cpp +++ b/utils/TableGen/DAGISelEmitter.cpp @@ -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 Children; + Children.push_back(OpNode); + OpNode = new TreePatternNode(Xform, Children); + } + + ResultNodeOperands.push_back(OpNode); } if (!InstInputsCheck.empty())