now that complexpatterns are all emitted at the end of the match
authorChris Lattner <sabre@nondot.org>
Thu, 4 Mar 2010 01:25:36 +0000 (01:25 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 4 Mar 2010 01:25:36 +0000 (01:25 +0000)
sequence, just emit instruction predicates right before them.  This
exposes yet more factoring opportunitites, shrinking the X86 table
to 79144 bytes.

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

utils/TableGen/DAGISelMatcherGen.cpp

index 433da18cecb6cbba2760a28bf82eb0eab9b650b7..783c470f9b623aeb62b4e24df5284148d5198f93 100644 (file)
@@ -471,6 +471,9 @@ bool MatcherGen::EmitMatcherCode(unsigned Variant) {
     if (Variant != 0) return true;
   }
     
+  // Emit the matcher for the pattern structure and types.
+  EmitMatchCode(Pattern.getSrcPattern(), PatWithNoTypes);
+  
   // If the pattern has a predicate on it (e.g. only enabled when a subtarget
   // feature is around, do the check).
   // FIXME: This should get emitted after the match code below to encourage
@@ -479,15 +482,11 @@ bool MatcherGen::EmitMatcherCode(unsigned Variant) {
   // X86's MatchAddress.
   if (!Pattern.getPredicateCheck().empty())
     AddMatcher(new CheckPatternPredicateMatcher(Pattern.getPredicateCheck()));
-
-  // Emit the matcher for the pattern structure and types.
-  EmitMatchCode(Pattern.getSrcPattern(), PatWithNoTypes);
   
   // Now that we've completed the structural type match, emit any ComplexPattern
   // checks (e.g. addrmode matches).  We emit this after the structural match
   // because they are generally more expensive to evaluate and more difficult to
   // factor.
-  // FIXME2: Can the patternpredicatematcher be moved to right before this??
   for (unsigned i = 0, e = MatchedComplexPatterns.size(); i != e; ++i) {
     const TreePatternNode *N = MatchedComplexPatterns[i].first;