summaryrefslogtreecommitdiff
path: root/utils/TableGen/DAGISelEmitter.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-03-01 07:17:40 +0000
committerChris Lattner <sabre@nondot.org>2010-03-01 07:17:40 +0000
commitfa342faef9d1c89de356ed83a6c6529ed3e87610 (patch)
treea6d5a6fed6cb48fec62183639b79d8120e4b52a3 /utils/TableGen/DAGISelEmitter.cpp
parenteb66921adb943ea841e72c8eee4777607c48b70e (diff)
downloadllvm-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.cpp13
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());