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