From 3e77d6e44c08a1e7d24f51f2361c577295174ad6 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 6 Aug 2003 15:31:02 +0000 Subject: [PATCH] Start adding usefulness to the DAG node definitions, add a new Expander class git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7634 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Target.td | 65 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 14 deletions(-) diff --git a/lib/Target/Target.td b/lib/Target/Target.td index 0cdebcd7cd5..d7f7d7c41ba 100644 --- a/lib/Target/Target.td +++ b/lib/Target/Target.td @@ -18,12 +18,9 @@ def i8 : ValueType<8>; // 8-bit integer value def i16 : ValueType<16>; // 16-bit integer value def i32 : ValueType<32>; // 32-bit integer value def i64 : ValueType<64>; // 64-bit integer value -def i128 : ValueType<128>; // 128-bit integer value def f32 : ValueType<32>; // 32-bit floating point value def f64 : ValueType<64>; // 64-bit floating point value def f80 : ValueType<80>; // 80-bit floating point value -def f128 : ValueType<128>; // 128-bit floating point value - //===----------------------------------------------------------------------===// // Register file description - These classes are used to fill in the target @@ -109,6 +106,12 @@ class Instruction { dag Pattern; } +class Expander result> { + dag Pattern = pattern; + list Result = result; +} + + // InstrInfo - This class should only be instantiated once to provide parameters // which are global to the the target machine. // @@ -144,14 +147,48 @@ class Target { //===----------------------------------------------------------------------===// // DAG node definitions used by the instruction selector... // -def set; // FIXME: these are subject to substantial change -def plus; -def minus; -def mult; -def div; -def udiv; -def mod; -def umod; -def imm8; -def imm16; -def imm32; +class DagNodeResultType; +def DNRT_void : DagNodeResultType; // Tree node always returns void +def DNRT_val : DagNodeResultType; // A non-void type +def DNRT_arg0 : DagNodeResultType; // Tree node returns same type as Arg0 + +class DagNodeArgType; +def DNAT_val : DagNodeArgType; // Any value +def DNAT_arg0 : DagNodeArgType; // Same as for arg #0 +def DNAT_ptr : DagNodeArgType; // Returns the target pointer type + +class DagNode args> { + DagNodeResultType RetType = ret; + list ArgTypes = args; + string EnumName = ?; +} + +// BuiltinDagNodes are built into the instruction selector and correspond to +// enum values. +class BuiltinDagNode Args, + string Ename> : DagNode { + let EnumName = Ename; +} + +// Magic nodes... +def set : DagNode; + +// Terminals... +def imm : DagNode; + +// Arithmetic... +def plus : BuiltinDagNode; +def minus : BuiltinDagNode; +//def mult : DagNode<2, DNRT_arg0>; +//def div : DagNode<2, DNRT_arg0>; +//def udiv : DagNode<2, DNRT_arg0>; +//def mod : DagNode<2, DNRT_arg0>; +//def umod : DagNode<2, DNRT_arg0>; + +//def load : DagNode<1, DNRT_val>; +//def store : DagNode<2, DNRT_Void>; + +// Other... +def ret : BuiltinDagNode; +def retvoid : BuiltinDagNode; +