summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/Target.td17
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/Target/Target.td b/lib/Target/Target.td
index b55f174314..fa040efb8a 100644
--- a/lib/Target/Target.td
+++ b/lib/Target/Target.td
@@ -86,6 +86,10 @@ class RegisterClass<ValueType regType, int alignment, list<Register> regList> {
// Methods - This member can be used to insert arbitrary code into a generated
// register class. The normal usage of this is to overload virtual methods.
code Methods = [{}];
+
+ // isDummyClass - If this is set to true, this register class is not really
+ // part of the target, it is just used for other purposes.
+ bit isDummyClass = 0;
}
@@ -156,6 +160,7 @@ class Target {
// DAG node definitions used by the instruction selector...
//
class DagNodeValType;
+def DNVT_any : DagNodeValType; // No constraint on tree node
def DNVT_void : DagNodeValType; // Tree node always returns void
def DNVT_val : DagNodeValType; // A non-void type
def DNVT_arg0 : DagNodeValType; // Tree node returns same type as Arg0
@@ -177,7 +182,14 @@ class BuiltinDagNode<DagNodeValType Ret, list<DagNodeValType> Args,
}
// Magic nodes...
-def set : DagNode<DNVT_void, [DNVT_val, DNVT_arg0]>;
+def Void : RegisterClass<isVoid,0,[]> { let isDummyClass = 1; }
+def set : DagNode<DNVT_void, [DNVT_val, DNVT_arg0]>;
+def chain : BuiltinDagNode<DNVT_void, [DNVT_void, DNVT_void], "ChainNode">;
+def blockchain : BuiltinDagNode<DNVT_void, [DNVT_void, DNVT_void],
+ "BlockChainNode">;
+def ChainExpander : Expander<(chain Void, Void), []>;
+def BlockChainExpander : Expander<(blockchain Void, Void), []>;
+
// Terminals...
def imm : BuiltinDagNode<DNVT_val, [], "Constant">;
@@ -214,6 +226,9 @@ def br : BuiltinDagNode<DNVT_void, [DNVT_ptr], "Br">;
def brcond : BuiltinDagNode<DNVT_void, [DNVT_i8, DNVT_ptr, DNVT_ptr],
"BrCond">;
+def unspec1 : BuiltinDagNode<DNVT_any , [DNVT_val], "Unspec1">;
+def unspec2 : BuiltinDagNode<DNVT_any , [DNVT_val, DNVT_val], "Unspec2">;
+
//===----------------------------------------------------------------------===//
// DAG nonterminals definitions used by the instruction selector...
//