[llvm-commits] [llvm] r97428 - /llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp

Chris Lattner sabre at nondot.org
Sun Feb 28 14:57:03 PST 2010


Author: lattner
Date: Sun Feb 28 16:57:03 2010
New Revision: 97428

URL: http://llvm.org/viewvc/llvm-project?rev=97428&view=rev
Log:
don't emit useless functions.  These were producing
warnings in release-assert builds if there were no cases.

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

Modified: llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp?rev=97428&r1=97427&r2=97428&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/DAGISelMatcherEmitter.cpp Sun Feb 28 16:57:03 2010
@@ -445,64 +445,73 @@
   // here into the case stmts.
   
   // Emit pattern predicates.
-  OS << "bool CheckPatternPredicate(unsigned PredNo) const {\n";
-  OS << "  switch (PredNo) {\n";
-  OS << "  default: assert(0 && \"Invalid predicate in table?\");\n";
-  for (unsigned i = 0, e = PatternPredicates.size(); i != e; ++i)
-    OS << "  case " << i << ": return "  << PatternPredicates[i] << ";\n";
-  OS << "  }\n";
-  OS << "}\n\n";
+  if (!PatternPredicates.empty()) {
+    OS << "bool CheckPatternPredicate(unsigned PredNo) const {\n";
+    OS << "  switch (PredNo) {\n";
+    OS << "  default: assert(0 && \"Invalid predicate in table?\");\n";
+    for (unsigned i = 0, e = PatternPredicates.size(); i != e; ++i)
+      OS << "  case " << i << ": return "  << PatternPredicates[i] << ";\n";
+    OS << "  }\n";
+    OS << "}\n\n";
+  }
+    
 
   // Emit Node predicates.
-  OS << "bool CheckNodePredicate(SDNode *N, unsigned PredNo) const {\n";
-  OS << "  switch (PredNo) {\n";
-  OS << "  default: assert(0 && \"Invalid predicate in table?\");\n";
-  for (unsigned i = 0, e = NodePredicates.size(); i != e; ++i)
-    OS << "  case " << i << ": return "  << NodePredicates[i] << "(N);\n";
-  OS << "  }\n";
-  OS << "}\n\n";
+  if (!NodePredicates.empty()) {
+    OS << "bool CheckNodePredicate(SDNode *N, unsigned PredNo) const {\n";
+    OS << "  switch (PredNo) {\n";
+    OS << "  default: assert(0 && \"Invalid predicate in table?\");\n";
+    for (unsigned i = 0, e = NodePredicates.size(); i != e; ++i)
+      OS << "  case " << i << ": return "  << NodePredicates[i] << "(N);\n";
+    OS << "  }\n";
+    OS << "}\n\n";
+  }
   
   // Emit CompletePattern matchers.
   // FIXME: This should be const.
-  OS << "bool CheckComplexPattern(SDNode *Root, SDValue N,\n";
-  OS << "      unsigned PatternNo, SmallVectorImpl<SDValue> &Result) {\n";
-  OS << "  switch (PatternNo) {\n";
-  OS << "  default: assert(0 && \"Invalid pattern # in table?\");\n";
-  for (unsigned i = 0, e = ComplexPatterns.size(); i != e; ++i) {
-    const ComplexPattern &P = *ComplexPatterns[i];
-    unsigned NumOps = P.getNumOperands();
-
-    if (P.hasProperty(SDNPHasChain))
-      ++NumOps;  // Get the chained node too.
-    
-    OS << "  case " << i << ":\n";
-    OS << "    Result.resize(Result.size()+" << NumOps << ");\n";
-    OS << "    return "  << P.getSelectFunc();
-
-    // FIXME: Temporary hack until old isel dies.
-    if (P.hasProperty(SDNPHasChain))
-      OS << "XXX";
-    
-    OS << "(Root, N";
-    for (unsigned i = 0; i != NumOps; ++i)
-      OS << ", Result[Result.size()-" << (NumOps-i) << ']';
-    OS << ");\n";
+  if (!ComplexPatterns.empty()) {
+    OS << "bool CheckComplexPattern(SDNode *Root, SDValue N,\n";
+    OS << "      unsigned PatternNo, SmallVectorImpl<SDValue> &Result) {\n";
+    OS << "  switch (PatternNo) {\n";
+    OS << "  default: assert(0 && \"Invalid pattern # in table?\");\n";
+    for (unsigned i = 0, e = ComplexPatterns.size(); i != e; ++i) {
+      const ComplexPattern &P = *ComplexPatterns[i];
+      unsigned NumOps = P.getNumOperands();
+
+      if (P.hasProperty(SDNPHasChain))
+        ++NumOps;  // Get the chained node too.
+      
+      OS << "  case " << i << ":\n";
+      OS << "    Result.resize(Result.size()+" << NumOps << ");\n";
+      OS << "    return "  << P.getSelectFunc();
+
+      // FIXME: Temporary hack until old isel dies.
+      if (P.hasProperty(SDNPHasChain))
+        OS << "XXX";
+      
+      OS << "(Root, N";
+      for (unsigned i = 0; i != NumOps; ++i)
+        OS << ", Result[Result.size()-" << (NumOps-i) << ']';
+      OS << ");\n";
+    }
+    OS << "  }\n";
+    OS << "}\n\n";
   }
-  OS << "  }\n";
-  OS << "}\n\n";
   
   // Emit SDNodeXForm handlers.
   // FIXME: This should be const.
-  OS << "SDValue RunSDNodeXForm(SDValue V, unsigned XFormNo) {\n";
-  OS << "  switch (XFormNo) {\n";
-  OS << "  default: assert(0 && \"Invalid xform # in table?\");\n";
-  
-  // FIXME: The node xform could take SDValue's instead of SDNode*'s.
-  for (unsigned i = 0, e = NodeXForms.size(); i != e; ++i)
-    OS << "  case " << i << ": return Transform_" << NodeXForms[i]->getName()
-       << "(V.getNode());\n";
-  OS << "  }\n";
-  OS << "}\n\n";
+  if (!NodeXForms.empty()) {
+    OS << "SDValue RunSDNodeXForm(SDValue V, unsigned XFormNo) {\n";
+    OS << "  switch (XFormNo) {\n";
+    OS << "  default: assert(0 && \"Invalid xform # in table?\");\n";
+    
+    // FIXME: The node xform could take SDValue's instead of SDNode*'s.
+    for (unsigned i = 0, e = NodeXForms.size(); i != e; ++i)
+      OS << "  case " << i << ": return Transform_" << NodeXForms[i]->getName()
+         << "(V.getNode());\n";
+    OS << "  }\n";
+    OS << "}\n\n";
+  }
 }
 
 void MatcherTableEmitter::EmitHistogram(formatted_raw_ostream &OS) {





More information about the llvm-commits mailing list