mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
[TableGen][ISel] Do a better job of factoring ScopeMatchers created during creation of SwitchTypeMatcher.
Previously we were factoring when the ScopeMatcher was initially created, but it might get more Matchers added to it later. Delay factoring until we have fully created/populated the ScopeMatchers. This reduces X86 isel tables by 154 bytes. llvm-svn: 287520
This commit is contained in:
parent
e4cf482936
commit
c5ad05d406
@ -414,9 +414,7 @@ static void FactorNodes(std::unique_ptr<Matcher> &MatcherPtr) {
|
||||
}
|
||||
|
||||
Matcher *Entries[2] = { PrevMatcher, MatcherWithoutCTM };
|
||||
std::unique_ptr<Matcher> Case(new ScopeMatcher(Entries));
|
||||
FactorNodes(Case);
|
||||
Cases[Entry-1].second = Case.release();
|
||||
Cases[Entry-1].second = new ScopeMatcher(Entries);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -424,6 +422,16 @@ static void FactorNodes(std::unique_ptr<Matcher> &MatcherPtr) {
|
||||
Cases.push_back(std::make_pair(CTMTy, MatcherWithoutCTM));
|
||||
}
|
||||
|
||||
// Make sure we recursively factor any scopes we may have created.
|
||||
for (auto &M : Cases) {
|
||||
if (ScopeMatcher *SM = dyn_cast<ScopeMatcher>(M.second)) {
|
||||
std::unique_ptr<Matcher> Scope(SM);
|
||||
FactorNodes(Scope);
|
||||
M.second = Scope.release();
|
||||
assert(M.second && "null matcher");
|
||||
}
|
||||
}
|
||||
|
||||
if (Cases.size() != 1) {
|
||||
MatcherPtr.reset(new SwitchTypeMatcher(Cases));
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user