Emit type checks late instead of early, this encourages
authorChris Lattner <sabre@nondot.org>
Mon, 1 Mar 2010 07:54:59 +0000 (07:54 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 1 Mar 2010 07:54:59 +0000 (07:54 +0000)
structural matching code to be factored and shared this
shrinks the X86 isel table from 86537 to 83890 bytes.

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

utils/TableGen/DAGISelMatcherGen.cpp

index 62442d0c22c6d82335037fffbafd8906c889fba8..cc3c4f14b4bac09577e93bd54f21b48a24de65ce 100644 (file)
@@ -460,8 +460,9 @@ void MatcherGen::EmitMatchCode(const TreePatternNode *N,
   // If N and NodeNoTypes don't agree on a type, then this is a case where we
   // need to do a type check.  Emit the check, apply the tyep to NodeNoTypes and
   // reinfer any correlated types.
+  unsigned NodeType = EEVT::isUnknown;
   if (NodeNoTypes->getExtTypes() != N->getExtTypes()) {
-    AddMatcher(new CheckTypeMatcher(N->getTypeNum(0)));
+    NodeType = N->getTypeNum(0);
     NodeNoTypes->setTypes(N->getExtTypes());
     InferPossibleTypes();
   }
@@ -488,6 +489,10 @@ void MatcherGen::EmitMatchCode(const TreePatternNode *N,
     EmitLeafMatchCode(N);
   else
     EmitOperatorMatchCode(N, NodeNoTypes);
+  
+  if (NodeType != EEVT::isUnknown)
+    AddMatcher(new CheckTypeMatcher((MVT::SimpleValueType)NodeType));
+
 }
 
 /// EmitMatcherCode - Generate the code that matches the predicate of this