Add support for naming the destination of a "set" in a pattern

llvm-svn: 7748
This commit is contained in:
Chris Lattner 2003-08-11 20:32:02 +00:00
parent 641eca6881
commit 114ee856b4
2 changed files with 6 additions and 0 deletions

View File

@ -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 "";
}

View File

@ -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.