diff options
author | Dan Gohman <gohman@apple.com> | 2008-08-22 00:20:26 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-08-22 00:20:26 +0000 |
commit | 49e19e906fd445f8dcc90b6b6d620ade9dc2f7dd (patch) | |
tree | 725434ab26c4c50a99aa02df7f3859f097f651cd /llvm/utils/TableGen/CodeGenDAGPatterns.cpp | |
parent | 24c0154b7719810de52bdc21555efcd708e08b0b (diff) | |
download | bcm5719-llvm-49e19e906fd445f8dcc90b6b6d620ade9dc2f7dd.tar.gz bcm5719-llvm-49e19e906fd445f8dcc90b6b6d620ade9dc2f7dd.zip |
Factor out the predicate check code from DAGISelEmitter.cpp
and use it in FastISelEmitter.cpp, and make FastISel
subtarget aware. Among other things, this lets it work
properly on x86 targets that don't have SSE, where it
successfully selects x87 instructions.
llvm-svn: 55156
Diffstat (limited to 'llvm/utils/TableGen/CodeGenDAGPatterns.cpp')
-rw-r--r-- | llvm/utils/TableGen/CodeGenDAGPatterns.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp index 1e957834a88..1e595dd4744 100644 --- a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp +++ b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp @@ -141,6 +141,33 @@ void DumpDepVars(MultipleUseVarSet &DepVars) { } //===----------------------------------------------------------------------===// +// PatternToMatch implementation +// + +/// getPredicateCheck - Return a single string containing all of this +/// pattern's predicates concatenated with "&&" operators. +/// +std::string PatternToMatch::getPredicateCheck() const { + std::string PredicateCheck; + for (unsigned i = 0, e = Predicates->getSize(); i != e; ++i) { + if (DefInit *Pred = dynamic_cast<DefInit*>(Predicates->getElement(i))) { + Record *Def = Pred->getDef(); + if (!Def->isSubClassOf("Predicate")) { +#ifndef NDEBUG + Def->dump(); +#endif + assert(0 && "Unknown predicate type!"); + } + if (!PredicateCheck.empty()) + PredicateCheck += " && "; + PredicateCheck += "(" + Def->getValueAsString("CondString") + ")"; + } + } + + return PredicateCheck; +} + +//===----------------------------------------------------------------------===// // SDTypeConstraint implementation // |