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