[llvm-commits] CVS: llvm/utils/TableGen/DAGISelEmitter.cpp
Evan Cheng
evan.cheng at apple.com
Tue Mar 21 12:44:29 PST 2006
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()));
}
}
More information about the llvm-commits
mailing list