aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2005-12-08 04:28:48 +0000
committerEvan Cheng <evan.cheng@apple.com>2005-12-08 04:28:48 +0000
commitf20da7e1a76d785cd24bfe4928c460def84049a8 (patch)
treed0120d02208775dc83106f233d9377529097cb4e
parent670fd8f8dd19b238f8adda6a07091c37f99d9f90 (diff)
Added support for ComplexPattern.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24638 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/TargetSelectionDAG.td21
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/Target/TargetSelectionDAG.td b/lib/Target/TargetSelectionDAG.td
index 5be65e2933..996777f1ed 100644
--- a/lib/Target/TargetSelectionDAG.td
+++ b/lib/Target/TargetSelectionDAG.td
@@ -131,6 +131,10 @@ def SDTWritePort : SDTypeProfile<0, 2, [ // writeport
SDTCisInt<0>, SDTCisInt<1>
]>;
+def SDTLoad : SDTypeProfile<1, 1, [ // load
+ SDTCisInt<1>
+]>;
+
//===----------------------------------------------------------------------===//
// Selection DAG Node Properties.
//
@@ -220,6 +224,8 @@ def ret : SDNode<"ISD::RET" , SDTRet, [SDNPHasChain]>;
def writeport : SDNode<"ISD::WRITEPORT" , SDTWritePort, [SDNPHasChain]>;
+def load : SDNode<"ISD::LOAD" , SDTLoad, [SDNPHasChain]>;
+
//===----------------------------------------------------------------------===//
// Selection DAG Condition Codes
@@ -349,3 +355,18 @@ class Pattern<dag patternToMatch, list<dag> resultInstrs> {
// not needing a full list.
class Pat<dag pattern, dag result> : Pattern<pattern, [result]>;
+//===----------------------------------------------------------------------===//
+// Complex pattern definitions.
+//
+// Complex patterns, e.g. X86 addressing mode, requires pattern matching code
+// in C++. NumOperands is the number of operands returned by the select function;
+// SelectFunc is the name of the function used to pattern match the max. pattern;
+// RootNodes are the list of possible root nodes of the sub-dags to match.
+// e.g. X86 addressing mode - def addr : ComplexPattern<4, "SelectAddr", [add]>;
+//
+class ComplexPattern<ValueType ty, int numops, string fn, list<SDNode> roots = []> {
+ ValueType Ty = ty;
+ int NumOperands = numops;
+ string SelectFunc = fn;
+ list<SDNode> RootNodes = roots;
+}