}
#ifdef ENABLE_NEW_ISEL
- MatcherNode *Matcher = 0;
-
// Add all the patterns to a temporary list so we can sort them.
std::vector<const PatternToMatch*> Patterns;
for (CodeGenDAGPatterns::ptm_iterator I = CGP.ptm_begin(), E = CGP.ptm_end();
PatternSortingPredicate2(CGP));
- // Walk the patterns backwards (since we append to the front of the generated
- // code), building a matcher for each and adding it to the matcher for the
- // whole target.
- while (!Patterns.empty()) {
- const PatternToMatch &Pattern = *Patterns.back();
- Patterns.pop_back();
-
- MatcherNode *N = ConvertPatternToMatcher(Pattern, CGP);
-
- if (Matcher == 0)
- Matcher = N;
- else
- Matcher = new PushMatcherNode(N, Matcher);
- }
+ // Convert each pattern into Matcher's.
+ std::vector<Matcher*> PatternMatchers;
+ for (unsigned i = 0, e = Patterns.size(); i != e; ++i)
+ PatternMatchers.push_back(ConvertPatternToMatcher(*Patterns[i], CGP));
+
+ Matcher *TheMatcher = new ScopeMatcher(&PatternMatchers[0],
+ PatternMatchers.size());
- Matcher = OptimizeMatcher(Matcher);
+ TheMatcher = OptimizeMatcher(TheMatcher);
//Matcher->dump();
- EmitMatcherTable(Matcher, OS);
- delete Matcher;
+ EmitMatcherTable(TheMatcher, OS);
+ delete TheMatcher;
#else
// At this point, we have full information about the 'Patterns' we need to