Home | History | Annotate | Download | only in radeon
      1 //===------- AMDILNIDevice.h - Define NI Device for AMDIL -*- C++ -*------===//
      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 // Interface for the subtarget data classes.
     11 //
     12 //===---------------------------------------------------------------------===//
     13 // This file will define the interface that each generation needs to
     14 // implement in order to correctly answer queries on the capabilities of the
     15 // specific hardware.
     16 //===---------------------------------------------------------------------===//
     17 #ifndef _AMDILNIDEVICE_H_
     18 #define _AMDILNIDEVICE_H_
     19 #include "AMDILEvergreenDevice.h"
     20 #include "AMDGPUSubtarget.h"
     21 
     22 namespace llvm {
     23   class AMDGPUSubtarget;
     24 //===---------------------------------------------------------------------===//
     25 // NI generation of devices and their respective sub classes
     26 //===---------------------------------------------------------------------===//
     27 
     28 // The AMDGPUNIDevice is the base class for all Northern Island series of
     29 // cards. It is very similiar to the AMDGPUEvergreenDevice, with the major
     30 // exception being differences in wavefront size and hardware capabilities.  The
     31 // NI devices are all 64 wide wavefronts and also add support for signed 24 bit
     32 // integer operations
     33 
     34   class AMDGPUNIDevice : public AMDGPUEvergreenDevice {
     35     public:
     36       AMDGPUNIDevice(AMDGPUSubtarget*);
     37       virtual ~AMDGPUNIDevice();
     38       virtual size_t getMaxLDSSize() const;
     39       virtual uint32_t getGeneration() const;
     40     protected:
     41   }; // AMDGPUNIDevice
     42 
     43 // Just as the AMDGPUCypressDevice is the double capable version of the
     44 // AMDGPUEvergreenDevice, the AMDGPUCaymanDevice is the double capable version of
     45 // the AMDGPUNIDevice.  The other major difference that is not as useful from
     46 // standpoint is that the Cayman Device has 4 wide ALU's, whereas the rest of the
     47 // NI family is a 5 wide.
     48 
     49   class AMDGPUCaymanDevice: public AMDGPUNIDevice {
     50     public:
     51       AMDGPUCaymanDevice(AMDGPUSubtarget*);
     52       virtual ~AMDGPUCaymanDevice();
     53     private:
     54       virtual void setCaps();
     55   }; // AMDGPUCaymanDevice
     56 
     57   static const unsigned int MAX_LDS_SIZE_900 = AMDGPUDevice::MAX_LDS_SIZE_800;
     58 } // namespace llvm
     59 #endif // _AMDILNIDEVICE_H_
     60