From 114ee856b4477d6f6c6754426a531bf56b3c8bad Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 11 Aug 2003 20:32:02 +0000 Subject: [PATCH] Add support for naming the destination of a "set" in a pattern llvm-svn: 7748 --- support/tools/TableGen/InstrSelectorEmitter.cpp | 4 ++++ support/tools/TableGen/InstrSelectorEmitter.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/support/tools/TableGen/InstrSelectorEmitter.cpp b/support/tools/TableGen/InstrSelectorEmitter.cpp index 153f27e512f..d9f333be6e8 100644 --- a/support/tools/TableGen/InstrSelectorEmitter.cpp +++ b/support/tools/TableGen/InstrSelectorEmitter.cpp @@ -138,6 +138,7 @@ Pattern::Pattern(PatternType pty, DagInit *RawPat, Record *TheRec, if (!Tree->getChild(0)->isLeaf()) error("Arg #0 of set should be a register or register class!"); Result = Tree->getChild(0)->getValueRecord(); + ResultName = Tree->getChildName(0); Tree = Tree->getChild(1); } } @@ -895,6 +896,9 @@ static std::string getArgName(Pattern *P, const std::string &ArgName, for (unsigned i = 0, e = P->getNumArgs(); i != e; ++i) if (P->getArgName(i) == ArgName) return Operands[i].second + "->Val"; + + if (ArgName == P->getResultName()) + return "NewReg"; P->error("Pattern does not define a value named $" + ArgName + "!"); return ""; } diff --git a/support/tools/TableGen/InstrSelectorEmitter.h b/support/tools/TableGen/InstrSelectorEmitter.h index a1b1b6e7816..9588130b612 100644 --- a/support/tools/TableGen/InstrSelectorEmitter.h +++ b/support/tools/TableGen/InstrSelectorEmitter.h @@ -142,6 +142,7 @@ private: /// register result, specified with a (set) in the pattern. /// Record *Result; + std::string ResultName; // The name of the result value... /// TheRecord - The actual TableGen record corresponding to this pattern. /// @@ -185,6 +186,7 @@ public: TreePatternNode *getTree() const { return Tree; } Record *getResult() const { return Result; } + const std::string &getResultName() const { return ResultName; } /// getRecord - Return the actual TableGen record corresponding to this /// pattern.