diff options
author | Chris Lattner <sabre@nondot.org> | 2010-03-01 07:17:40 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-03-01 07:17:40 +0000 |
commit | fa342faef9d1c89de356ed83a6c6529ed3e87610 (patch) | |
tree | a6d5a6fed6cb48fec62183639b79d8120e4b52a3 /utils/TableGen/DAGISelEmitter.cpp | |
parent | eb66921adb943ea841e72c8eee4777607c48b70e (diff) | |
download | llvm-fa342faef9d1c89de356ed83a6c6529ed3e87610.tar.gz llvm-fa342faef9d1c89de356ed83a6c6529ed3e87610.tar.bz2 llvm-fa342faef9d1c89de356ed83a6c6529ed3e87610.tar.xz |
eliminate the CheckMultiOpcodeMatcher code and have each
ComplexPattern at the root be generated multiple times, once
for each opcode they are part of. This encourages factoring
because the opcode checks get treated just like everything
else in the matcher.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97439 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/DAGISelEmitter.cpp')
-rw-r--r-- | utils/TableGen/DAGISelEmitter.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/utils/TableGen/DAGISelEmitter.cpp b/utils/TableGen/DAGISelEmitter.cpp index 2854e4f221..533664669a 100644 --- a/utils/TableGen/DAGISelEmitter.cpp +++ b/utils/TableGen/DAGISelEmitter.cpp @@ -1959,10 +1959,17 @@ void DAGISelEmitter::run(raw_ostream &OS) { PatternSortingPredicate2(CGP)); - // Convert each pattern into Matcher's. + // Convert each variant of each pattern into a Matcher. std::vector<Matcher*> PatternMatchers; - for (unsigned i = 0, e = Patterns.size(); i != e; ++i) - PatternMatchers.push_back(ConvertPatternToMatcher(*Patterns[i], CGP)); + for (unsigned i = 0, e = Patterns.size(); i != e; ++i) { + for (unsigned Variant = 0; ; ++Variant) { + if (Matcher *M = ConvertPatternToMatcher(*Patterns[i], Variant, CGP)) + PatternMatchers.push_back(M); + else + break; + } + } + Matcher *TheMatcher = new ScopeMatcher(&PatternMatchers[0], PatternMatchers.size()); |