summaryrefslogtreecommitdiff
path: root/support
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-08-11 20:32:02 +0000
committerChris Lattner <sabre@nondot.org>2003-08-11 20:32:02 +0000
commit57fb6ab871ffd829983b1d76fd00065cf4aec67d (patch)
tree7762a3ad54031fc4088d338e5b2d654660d3c8fe /support
parent88118bf7874753627388efbebcfd363675ff3612 (diff)
downloadllvm-57fb6ab871ffd829983b1d76fd00065cf4aec67d.tar.gz
llvm-57fb6ab871ffd829983b1d76fd00065cf4aec67d.tar.bz2
llvm-57fb6ab871ffd829983b1d76fd00065cf4aec67d.tar.xz
Add support for naming the destination of a "set" in a pattern
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7748 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'support')
-rw-r--r--support/tools/TableGen/InstrSelectorEmitter.cpp4
-rw-r--r--support/tools/TableGen/InstrSelectorEmitter.h2
2 files changed, 6 insertions, 0 deletions
diff --git a/support/tools/TableGen/InstrSelectorEmitter.cpp b/support/tools/TableGen/InstrSelectorEmitter.cpp
index 153f27e512..d9f333be6e 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 a1b1b6e781..9588130b61 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.