Home | History | Annotate | Download | only in R600
      1 //===-- AMDGPUInstrInfo.td - AMDGPU DAG nodes --------------*- tablegen -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file contains DAG node defintions for the AMDGPU target.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 //===----------------------------------------------------------------------===//
     15 // AMDGPU DAG Profiles
     16 //===----------------------------------------------------------------------===//
     17 
     18 def AMDGPUDTIntTernaryOp : SDTypeProfile<1, 3, [
     19   SDTCisSameAs<0, 1>, SDTCisSameAs<0, 2>, SDTCisInt<0>, SDTCisInt<3>
     20 ]>;
     21 
     22 //===----------------------------------------------------------------------===//
     23 // AMDGPU DAG Nodes
     24 //
     25 
     26 // This argument to this node is a dword address.
     27 def AMDGPUdwordaddr : SDNode<"AMDGPUISD::DWORDADDR", SDTIntUnaryOp>;
     28 
     29 // out = a - floor(a)
     30 def AMDGPUfract : SDNode<"AMDGPUISD::FRACT", SDTFPUnaryOp>;
     31 
     32 // out = max(a, b) a and b are floats
     33 def AMDGPUfmax : SDNode<"AMDGPUISD::FMAX", SDTFPBinOp,
     34   [SDNPCommutative, SDNPAssociative]
     35 >;
     36 
     37 // out = max(a, b) a and b are signed ints
     38 def AMDGPUsmax : SDNode<"AMDGPUISD::SMAX", SDTIntBinOp,
     39   [SDNPCommutative, SDNPAssociative]
     40 >;
     41 
     42 // out = max(a, b) a and b are unsigned ints
     43 def AMDGPUumax : SDNode<"AMDGPUISD::UMAX", SDTIntBinOp,
     44   [SDNPCommutative, SDNPAssociative]
     45 >;
     46 
     47 // out = min(a, b) a and b are floats
     48 def AMDGPUfmin : SDNode<"AMDGPUISD::FMIN", SDTFPBinOp,
     49   [SDNPCommutative, SDNPAssociative]
     50 >;
     51 
     52 // out = min(a, b) a snd b are signed ints
     53 def AMDGPUsmin : SDNode<"AMDGPUISD::SMIN", SDTIntBinOp,
     54   [SDNPCommutative, SDNPAssociative]
     55 >;
     56 
     57 // out = min(a, b) a and b are unsigned ints
     58 def AMDGPUumin : SDNode<"AMDGPUISD::UMIN", SDTIntBinOp,
     59   [SDNPCommutative, SDNPAssociative]
     60 >;
     61 
     62 // urecip - This operation is a helper for integer division, it returns the
     63 // result of 1 / a as a fractional unsigned integer.
     64 // out = (2^32 / a) + e
     65 // e is rounding error
     66 def AMDGPUurecip : SDNode<"AMDGPUISD::URECIP", SDTIntUnaryOp>;
     67 
     68 def AMDGPUregister_load : SDNode<"AMDGPUISD::REGISTER_LOAD",
     69                           SDTypeProfile<1, 2, [SDTCisPtrTy<1>, SDTCisInt<2>]>,
     70                           [SDNPHasChain, SDNPMayLoad]>;
     71 
     72 def AMDGPUregister_store : SDNode<"AMDGPUISD::REGISTER_STORE",
     73                            SDTypeProfile<0, 3, [SDTCisPtrTy<1>, SDTCisInt<2>]>,
     74                            [SDNPHasChain, SDNPMayStore]>;
     75