Add more checking to filter out more kinds of things that
authorDan Gohman <gohman@apple.com>
Tue, 19 Aug 2008 20:30:54 +0000 (20:30 +0000)
committerDan Gohman <gohman@apple.com>
Tue, 19 Aug 2008 20:30:54 +0000 (20:30 +0000)
FastISel doesn't support yet.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55002 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/FastISelEmitter.cpp

index 67dde85a3779da3eedc0b42356c26ef16128aac2..437383ba8b287769c04d79a9f8c15d7ef81e955e 100644 (file)
@@ -180,9 +180,16 @@ void FastISelEmitter::run(std::ostream &OS) {
     MVT::SimpleValueType VT = InstPatNode->getTypeNum(0);
 
     // For now, filter out instructions which just set a register to
-    // an Operand, like MOV32ri.
+    // an Operand or an immediate, like MOV32ri.
     if (InstPatOp->isSubClassOf("Operand"))
       continue;
+    if (InstPatOp->getName() == "imm" ||
+        InstPatOp->getName() == "fpimm")
+      continue;
+
+    // For now, filter out any instructions with predicates.
+    if (!InstPatNode->getPredicateFn().empty())
+      continue;
 
     // Check all the operands. For now only accept register operands.
     OperandsSignature Operands;
@@ -190,6 +197,9 @@ void FastISelEmitter::run(std::ostream &OS) {
       TreePatternNode *Op = InstPatNode->getChild(i);
       if (!Op->isLeaf())
         goto continue_label;
+      // For now, filter out any operand with a predicate.
+      if (!Op->getPredicateFn().empty())
+        goto continue_label;
       DefInit *OpDI = dynamic_cast<DefInit*>(Op->getLeafValue());
       if (!OpDI)
         goto continue_label;