//===------- AMDILNIDevice.h - Define NI Device for AMDIL -*- C++ -*------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //==-----------------------------------------------------------------------===// /// \file /// \brief Interface for the subtarget data classes. /// /// This file will define the interface that each generation needs to /// implement in order to correctly answer queries on the capabilities of the /// specific hardware. //===---------------------------------------------------------------------===// #ifndef AMDILNIDEVICE_H #define AMDILNIDEVICE_H #include "AMDGPUSubtarget.h" #include "AMDILEvergreenDevice.h" namespace llvm { class AMDGPUSubtarget; //===---------------------------------------------------------------------===// // NI generation of devices and their respective sub classes //===---------------------------------------------------------------------===// /// \brief The AMDGPUNIDevice is the base class for all Northern Island series of /// cards. /// /// It is very similiar to the AMDGPUEvergreenDevice, with the major /// exception being differences in wavefront size and hardware capabilities. The /// NI devices are all 64 wide wavefronts and also add support for signed 24 bit /// integer operations class AMDGPUNIDevice : public AMDGPUEvergreenDevice { public: AMDGPUNIDevice(AMDGPUSubtarget*); virtual ~AMDGPUNIDevice(); virtual size_t getMaxLDSSize() const; virtual uint32_t getGeneration() const; }; /// Just as the AMDGPUCypressDevice is the double capable version of the /// AMDGPUEvergreenDevice, the AMDGPUCaymanDevice is the double capable version /// of the AMDGPUNIDevice. The other major difference is that the Cayman Device /// has 4 wide ALU's, whereas the rest of the NI family is a 5 wide. class AMDGPUCaymanDevice: public AMDGPUNIDevice { public: AMDGPUCaymanDevice(AMDGPUSubtarget*); virtual ~AMDGPUCaymanDevice(); private: virtual void setCaps(); }; static const unsigned int MAX_LDS_SIZE_900 = AMDGPUDevice::MAX_LDS_SIZE_800; } // namespace llvm #endif // AMDILNIDEVICE_H