mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 08:17:40 +00:00
Emit redundant opcode checks for andimm and orimm tests at root
so that we get grouping at the top level. Add an optimization to reorder type check & record nodes after opcode checks. We prefer to expose tree shape matching which improves grouping and will enhance the next optimization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97432 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user