From 6de8b53230a44b3e09801e8bf100a110d03a2b64 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 13 Sep 2005 21:59:15 +0000 Subject: [PATCH] continue xform function parsing git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23338 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/DAGISelEmitter.cpp | 8 +++++++- utils/TableGen/DAGISelEmitter.h | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp index af9dc95e97c..590e19420ab 100644 --- a/utils/TableGen/DAGISelEmitter.cpp +++ b/utils/TableGen/DAGISelEmitter.cpp @@ -509,7 +509,7 @@ void DAGISelEmitter::ParseNodeTransforms(std::ostream &OS) { SDNodeXForms.insert(std::make_pair(XFormNode, std::make_pair(SDNode, Code))); - if (!Code.empty()) { + if (0 && !Code.empty()) { std::string ClassName = getSDNodeInfo(SDNode).getSDClassName(); const char *C2 = ClassName == "SDNode" ? "N" : "inN"; @@ -592,6 +592,12 @@ void DAGISelEmitter::ParseAndResolvePatternFragments(std::ostream &OS) { OS << Code << "\n}\n"; P->getOnlyTree()->setPredicateFn("Predicate_"+Fragments[i]->getName()); } + + // If there is a node transformation corresponding to this, keep track of + // it. + Record *Transform = Fragments[i]->getValueAsDef("OperandTransform"); + if (!getSDNodeTransform(Transform).second.empty()) // not noop xform? + P->getOnlyTree()->setTransformFn("Transform_"+Transform->getName()); } OS << "\n\n"; diff --git a/utils/TableGen/DAGISelEmitter.h b/utils/TableGen/DAGISelEmitter.h index d1605228679..d9668552db8 100644 --- a/utils/TableGen/DAGISelEmitter.h +++ b/utils/TableGen/DAGISelEmitter.h @@ -302,6 +302,11 @@ public: return PatternFragments.find(R)->second; } + const std::pair &getSDNodeTransform(Record *R) const { + assert(SDNodeXForms.count(R) && "Invalid transform!"); + return SDNodeXForms.find(R)->second; + } + private: void ParseNodeInfo(); void ParseNodeTransforms(std::ostream &OS); -- 2.34.1