[llvm-commits] [llvm] r41710 - /llvm/trunk/utils/TableGen/DAGISelEmitter.cpp

Evan Cheng evan.cheng at apple.com
Tue Sep 4 13:18:29 PDT 2007


Author: evancheng
Date: Tue Sep  4 15:18:28 2007
New Revision: 41710

URL: http://llvm.org/viewvc/llvm-project?rev=41710&view=rev
Log:
Always check the type of node. This prevents situations such as selecting 32-bit rotate target instruction for a 64-bit node when 64-bit pattern is missing.

Modified:
    llvm/trunk/utils/TableGen/DAGISelEmitter.cpp

Modified: llvm/trunk/utils/TableGen/DAGISelEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DAGISelEmitter.cpp?rev=41710&r1=41709&r2=41710&view=diff

==============================================================================
--- llvm/trunk/utils/TableGen/DAGISelEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/DAGISelEmitter.cpp Tue Sep  4 15:18:28 2007
@@ -3811,47 +3811,41 @@
       OpcodeVTMap.find(OpName);
     std::vector<std::string> &OpVTs = OpVTI->second;
     OS << "  case " << OpName << ": {\n";
-    if (OpVTs.size() == 1) {
-      std::string &VTStr = OpVTs[0];
-      OS << "    return Select_" << getLegalCName(OpName)
-         << VTStr << "(N);\n";
-    } else {
-      // Keep track of whether we see a pattern that has an iPtr result.
-      bool HasPtrPattern = false;
-      bool HasDefaultPattern = false;
-      
-      OS << "    switch (NVT) {\n";
-      for (unsigned i = 0, e = OpVTs.size(); i < e; ++i) {
-        std::string &VTStr = OpVTs[i];
-        if (VTStr.empty()) {
-          HasDefaultPattern = true;
-          continue;
-        }
-
-        // If this is a match on iPTR: don't emit it directly, we need special
-        // code.
-        if (VTStr == "_iPTR") {
-          HasPtrPattern = true;
-          continue;
-        }
-        OS << "    case MVT::" << VTStr.substr(1) << ":\n"
-           << "      return Select_" << getLegalCName(OpName)
-           << VTStr << "(N);\n";
-      }
-      OS << "    default:\n";
+    // Keep track of whether we see a pattern that has an iPtr result.
+    bool HasPtrPattern = false;
+    bool HasDefaultPattern = false;
       
-      // If there is an iPTR result version of this pattern, emit it here.
-      if (HasPtrPattern) {
-        OS << "      if (NVT == TLI.getPointerTy())\n";
-        OS << "        return Select_" << getLegalCName(OpName) <<"_iPTR(N);\n";
+    OS << "    switch (NVT) {\n";
+    for (unsigned i = 0, e = OpVTs.size(); i < e; ++i) {
+      std::string &VTStr = OpVTs[i];
+      if (VTStr.empty()) {
+        HasDefaultPattern = true;
+        continue;
       }
-      if (HasDefaultPattern) {
-        OS << "      return Select_" << getLegalCName(OpName) << "(N);\n";
+
+      // If this is a match on iPTR: don't emit it directly, we need special
+      // code.
+      if (VTStr == "_iPTR") {
+        HasPtrPattern = true;
+        continue;
       }
-      OS << "      break;\n";
-      OS << "    }\n";
-      OS << "    break;\n";
+      OS << "    case MVT::" << VTStr.substr(1) << ":\n"
+         << "      return Select_" << getLegalCName(OpName)
+         << VTStr << "(N);\n";
+    }
+    OS << "    default:\n";
+      
+    // If there is an iPTR result version of this pattern, emit it here.
+    if (HasPtrPattern) {
+      OS << "      if (NVT == TLI.getPointerTy())\n";
+      OS << "        return Select_" << getLegalCName(OpName) <<"_iPTR(N);\n";
+    }
+    if (HasDefaultPattern) {
+      OS << "      return Select_" << getLegalCName(OpName) << "(N);\n";
     }
+    OS << "      break;\n";
+    OS << "    }\n";
+    OS << "    break;\n";
     OS << "  }\n";
   }
 





More information about the llvm-commits mailing list