Tblgen doesn't like multiple SDNode<> definitions that map to the sameenum value.  Split them into separate enums.

Also, don't emit dynamic checks when we can compute them statically

llvm-svn: 27202
diff --git a/llvm/utils/TableGen/DAGISelEmitter.cpp b/llvm/utils/TableGen/DAGISelEmitter.cpp
index 7c911bd..38bc05c 100644
--- a/llvm/utils/TableGen/DAGISelEmitter.cpp
+++ b/llvm/utils/TableGen/DAGISelEmitter.cpp
@@ -3115,19 +3115,21 @@
     
     // If the last pattern has predicates (which could fail) emit code to catch
     // the case where nothing handles a pattern.
-    if (mightNotMatch)
-      OS << "  std::cerr << \"Cannot yet select: \";\n"
-         << "  if (N.getOpcode() != ISD::INTRINSIC) {\n"
-         << "    N.Val->dump(CurDAG);\n"
-         << "  } else {\n"
-         << "    unsigned iid = cast<ConstantSDNode>(N.getOperand("
-                 "N.getOperand(0).getValueType() == MVT::Other))->getValue();\n"
-         << "    std::cerr << \"intrinsic %\"<< "
-                       "Intrinsic::getName((Intrinsic::ID)iid);\n"
-         << "  }\n"
-         << "  std::cerr << '\\n';\n"
+    if (mightNotMatch) {
+      OS << "  std::cerr << \"Cannot yet select: \";\n";
+      if (OpcodeInfo.getEnumName() != "ISD::INTRINSIC_W_CHAIN" &&
+          OpcodeInfo.getEnumName() != "ISD::INTRINSIC_WO_CHAIN" &&
+          OpcodeInfo.getEnumName() != "ISD::INTRINSIC_VOID") {
+        OS << "  N.Val->dump(CurDAG);\n";
+      } else {
+        OS << "  unsigned iid = cast<ConstantSDNode>(N.getOperand("
+               "N.getOperand(0).getValueType() == MVT::Other))->getValue();\n"
+           << "  std::cerr << \"intrinsic %\"<< "
+                         "Intrinsic::getName((Intrinsic::ID)iid);\n";
+      }
+      OS << "  std::cerr << '\\n';\n"
          << "  abort();\n";
-
+    }
     OS << "}\n\n";
   }
   
@@ -3285,7 +3287,9 @@
 
   OS << "  } // end of big switch.\n\n"
      << "  std::cerr << \"Cannot yet select: \";\n"
-     << "  if (N.getOpcode() != ISD::INTRINSIC) {\n"
+     << "  if (N.getOpcode() != ISD::INTRINSIC_W_CHAIN &&\n"
+     << "      N.getOpcode() != ISD::INTRINSIC_WO_CHAIN &&\n"
+     << "      N.getOpcode() != ISD::INTRINSIC_VOID) {\n"
      << "    N.Val->dump(CurDAG);\n"
      << "  } else {\n"
      << "    unsigned iid = cast<ConstantSDNode>(N.getOperand("