Add basic support for integer constants in pattern results.
[oota-llvm.git] / utils / TableGen / DAGISelEmitter.cpp
index 0f9d30450ef965379d52a331475cdd5b6105b0e6..af1b564c36b92c90fee05aa0856e4ab9963f2451 100644 (file)
@@ -665,8 +665,15 @@ TreePatternNode *TreePattern::ParseTreePattern(DagInit *Dag) {
           Args.push_back(Dag->getArgName(i));
         }
       }
+    } else if (IntInit *II = dynamic_cast<IntInit*>(Arg)) {
+      TreePatternNode *Node = new TreePatternNode(II);
+      if (!Dag->getArgName(i).empty())
+        error("Constant int argument should not have a name!");
+      Children.push_back(Node);
     } else {
+      std::cerr << '"';
       Arg->dump();
+      std::cerr << "\": ";
       error("Unknown leaf value for tree pattern!");
     }
   }
@@ -1627,6 +1634,13 @@ CodeGenPatternResult(TreePatternNode *N, unsigned &Ctr,
            << ");\n";
         return ResNo;
       }
+    } else if (IntInit *II = dynamic_cast<IntInit*>(N->getLeafValue())) {
+      unsigned ResNo = Ctr++;
+      OS << "      SDOperand Tmp" << ResNo << " = CurDAG->getTargetConstant("
+         << II->getValue() << ", MVT::"
+        << getEnumName(N->getType())
+        << ");\n";
+      return ResNo;
     }
     
     N->dump();