Changes in directory llvm/utils/TableGen:
DAGISelEmitter.cpp updated: 1.181 -> 1.182 --- Log message: Don't forget to promote xform function to an explicit node for def : Pat<> patterns. --- Diffs of the changes: (+20 -1) DAGISelEmitter.cpp | 21 ++++++++++++++++++++- 1 files changed, 20 insertions(+), 1 deletion(-) Index: llvm/utils/TableGen/DAGISelEmitter.cpp diff -u llvm/utils/TableGen/DAGISelEmitter.cpp:1.181 llvm/utils/TableGen/DAGISelEmitter.cpp:1.182 --- llvm/utils/TableGen/DAGISelEmitter.cpp:1.181 Tue Mar 21 00:42:58 2006 +++ llvm/utils/TableGen/DAGISelEmitter.cpp Tue Mar 21 14:44:17 2006 @@ -1446,6 +1446,25 @@ Result->error("Cannot handle instructions producing instructions " "with temporaries yet!"); + // Promote the xform function to be an explicit node if set. + std::vector<TreePatternNode*> ResultNodeOperands; + TreePatternNode *DstPattern = Result->getOnlyTree(); + for (unsigned ii = 0, ee = DstPattern->getNumChildren(); ii != ee; ++ii) { + TreePatternNode *OpNode = DstPattern->getChild(ii); + 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); + } + DstPattern = new TreePatternNode(Result->getOnlyTree()->getOperator(), + ResultNodeOperands); + DstPattern->setTypes(Result->getOnlyTree()->getExtTypes()); + TreePattern Temp(Result->getRecord(), DstPattern, false, *this); + Temp.InferAllTypes(); + std::string Reason; if (!Pattern->getOnlyTree()->canPatternMatch(Reason, *this)) Pattern->error("Pattern can never match: " + Reason); @@ -1453,7 +1472,7 @@ PatternsToMatch. push_back(PatternToMatch(Patterns[i]->getValueAsListInit("Predicates"), Pattern->getOnlyTree(), - Result->getOnlyTree())); + Temp.getOnlyTree())); } } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits