aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-02-24 20:15:25 +0000
committerChris Lattner <sabre@nondot.org>2010-02-24 20:15:25 +0000
commit23cfda719e059ce7d761b08fbfb89e676d6c9737 (patch)
treec621ccf90d7f04d0612aece15a69c1068e923ad2 /include
parentd88360495a6eed8853b4eead04e163f3e5aa632f (diff)
downloadexternal_llvm-23cfda719e059ce7d761b08fbfb89e676d6c9737.zip
external_llvm-23cfda719e059ce7d761b08fbfb89e676d6c9737.tar.gz
external_llvm-23cfda719e059ce7d761b08fbfb89e676d6c9737.tar.bz2
contract movechild+checktype into a new checkchild node, shrinking the
x86 table by 1200 bytes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97053 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/CodeGen/DAGISelHeader.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/DAGISelHeader.h b/include/llvm/CodeGen/DAGISelHeader.h
index 88c1a66..4babed8 100644
--- a/include/llvm/CodeGen/DAGISelHeader.h
+++ b/include/llvm/CodeGen/DAGISelHeader.h
@@ -233,6 +233,9 @@ enum BuiltinOpcodes {
OPC_CheckOpcode,
OPC_CheckMultiOpcode,
OPC_CheckType,
+ OPC_CheckChild0Type, OPC_CheckChild1Type, OPC_CheckChild2Type,
+ OPC_CheckChild3Type, OPC_CheckChild4Type, OPC_CheckChild5Type,
+ OPC_CheckChild6Type, OPC_CheckChild7Type,
OPC_CheckInteger1, OPC_CheckInteger2, OPC_CheckInteger4, OPC_CheckInteger8,
OPC_CheckCondCode,
OPC_CheckValueType,
@@ -481,6 +484,23 @@ SDNode *SelectCodeCommon(SDNode *NodeToMatch, const unsigned char *MatcherTable,
}
continue;
}
+ case OPC_CheckChild0Type: case OPC_CheckChild1Type:
+ case OPC_CheckChild2Type: case OPC_CheckChild3Type:
+ case OPC_CheckChild4Type: case OPC_CheckChild5Type:
+ case OPC_CheckChild6Type: case OPC_CheckChild7Type: {
+ unsigned ChildNo = Opcode-OPC_CheckChild0Type;
+ if (ChildNo >= N.getNumOperands())
+ break; // Match fails if out of range child #.
+
+ MVT::SimpleValueType VT =
+ (MVT::SimpleValueType)MatcherTable[MatcherIndex++];
+ if (N.getOperand(ChildNo).getValueType() != VT) {
+ // Handle the case when VT is iPTR.
+ if (VT != MVT::iPTR || N.getValueType() != TLI.getPointerTy())
+ break;
+ }
+ continue;
+ }
case OPC_CheckCondCode:
if (cast<CondCodeSDNode>(N)->get() !=
(ISD::CondCode)MatcherTable[MatcherIndex++]) break;