summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2008-08-22 00:20:26 +0000
committerDan Gohman <gohman@apple.com>2008-08-22 00:20:26 +0000
commit49e19e906fd445f8dcc90b6b6d620ade9dc2f7dd (patch)
tree725434ab26c4c50a99aa02df7f3859f097f651cd /llvm/utils/TableGen/CodeGenDAGPatterns.cpp
parent24c0154b7719810de52bdc21555efcd708e08b0b (diff)
downloadbcm5719-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.cpp27
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
//
OpenPOWER on IntegriCloud