mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-27 00:21:03 +00:00
Add OPC_CheckChildSame0-3 to the DAG isel matcher. This replaces sequences of MoveChild, CheckSame, MoveParent. Saves 846 bytes from the X86 DAG isel matcher, ~300 from ARM, ~840 from Hexagon.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192026 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -2101,6 +2101,18 @@ CheckSame(const unsigned char *MatcherTable, unsigned &MatcherIndex,
|
||||
return N == RecordedNodes[RecNo].first;
|
||||
}
|
||||
|
||||
/// CheckChildSame - Implements OP_CheckChildXSame.
|
||||
LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
|
||||
CheckChildSame(const unsigned char *MatcherTable, unsigned &MatcherIndex,
|
||||
SDValue N,
|
||||
const SmallVectorImpl<std::pair<SDValue, SDNode*> > &RecordedNodes,
|
||||
unsigned ChildNo) {
|
||||
if (ChildNo >= N.getNumOperands())
|
||||
return false; // Match fails if out of range child #.
|
||||
return ::CheckSame(MatcherTable, MatcherIndex, N.getOperand(ChildNo),
|
||||
RecordedNodes);
|
||||
}
|
||||
|
||||
/// CheckPatternPredicate - Implements OP_CheckPatternPredicate.
|
||||
LLVM_ATTRIBUTE_ALWAYS_INLINE static bool
|
||||
CheckPatternPredicate(const unsigned char *MatcherTable, unsigned &MatcherIndex,
|
||||
@@ -2215,6 +2227,13 @@ static unsigned IsPredicateKnownToFail(const unsigned char *Table,
|
||||
case SelectionDAGISel::OPC_CheckSame:
|
||||
Result = !::CheckSame(Table, Index, N, RecordedNodes);
|
||||
return Index;
|
||||
case SelectionDAGISel::OPC_CheckChild0Same:
|
||||
case SelectionDAGISel::OPC_CheckChild1Same:
|
||||
case SelectionDAGISel::OPC_CheckChild2Same:
|
||||
case SelectionDAGISel::OPC_CheckChild3Same:
|
||||
Result = !::CheckChildSame(Table, Index, N, RecordedNodes,
|
||||
Table[Index-1] - SelectionDAGISel::OPC_CheckChild0Same);
|
||||
return Index;
|
||||
case SelectionDAGISel::OPC_CheckPatternPredicate:
|
||||
Result = !::CheckPatternPredicate(Table, Index, SDISel);
|
||||
return Index;
|
||||
@@ -2512,6 +2531,14 @@ SelectCodeCommon(SDNode *NodeToMatch, const unsigned char *MatcherTable,
|
||||
case OPC_CheckSame:
|
||||
if (!::CheckSame(MatcherTable, MatcherIndex, N, RecordedNodes)) break;
|
||||
continue;
|
||||
|
||||
case OPC_CheckChild0Same: case OPC_CheckChild1Same:
|
||||
case OPC_CheckChild2Same: case OPC_CheckChild3Same:
|
||||
if (!::CheckChildSame(MatcherTable, MatcherIndex, N, RecordedNodes,
|
||||
Opcode-OPC_CheckChild0Same))
|
||||
break;
|
||||
continue;
|
||||
|
||||
case OPC_CheckPatternPredicate:
|
||||
if (!::CheckPatternPredicate(MatcherTable, MatcherIndex, *this)) break;
|
||||
continue;
|
||||
|
Reference in New Issue
Block a user