diff options
Diffstat (limited to 'utils/TableGen/DAGISelMatcherGen.cpp')
| -rw-r--r-- | utils/TableGen/DAGISelMatcherGen.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/utils/TableGen/DAGISelMatcherGen.cpp b/utils/TableGen/DAGISelMatcherGen.cpp index 120a3dc..d198488 100644 --- a/utils/TableGen/DAGISelMatcherGen.cpp +++ b/utils/TableGen/DAGISelMatcherGen.cpp @@ -320,6 +320,13 @@ void MatcherGen::EmitOperatorMatchCode(const TreePatternNode *N, N->getPredicateFns().empty()) { if (IntInit *II = dynamic_cast<IntInit*>(N->getChild(1)->getLeafValue())) { if (!isPowerOf2_32(II->getValue())) { // Don't bother with single bits. + // If this is at the root of the pattern, we emit a redundant + // CheckOpcode so that the following checks get factored properly under + // a single opcode check. + if (N == Pattern.getSrcPattern()) + AddMatcher(new CheckOpcodeMatcher(CInfo)); + + // Emit the CheckAndImm/CheckOrImm node. if (N->getOperator()->getName() == "and") AddMatcher(new CheckAndImmMatcher(II->getValue())); else |
