OSDN Git Service

Add a bunch of new node types, including a new Void dummy register class
authorChris Lattner <sabre@nondot.org>
Fri, 15 Aug 2003 04:35:14 +0000 (04:35 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 15 Aug 2003 04:35:14 +0000 (04:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7870 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Target.td

index b55f174..fa040ef 100644 (file)
@@ -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...
 //