1 //==- AMDILEvergreenDevice.h - Define Evergreen 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 _AMDILEVERGREENDEVICE_H_ 18 #define _AMDILEVERGREENDEVICE_H_ 19 #include "AMDILDevice.h" 20 #include "AMDGPUSubtarget.h" 21 22 namespace llvm { 23 class AMDGPUSubtarget; 24 //===----------------------------------------------------------------------===// 25 // Evergreen generation of devices and their respective sub classes 26 //===----------------------------------------------------------------------===// 27 28 29 // The AMDGPUEvergreenDevice is the base device class for all of the Evergreen 30 // series of cards. This class contains information required to differentiate 31 // the Evergreen device from the generic AMDGPUDevice. This device represents 32 // that capabilities of the 'Juniper' cards, also known as the HD57XX. 33 class AMDGPUEvergreenDevice : public AMDGPUDevice { 34 public: 35 AMDGPUEvergreenDevice(AMDGPUSubtarget *ST); 36 virtual ~AMDGPUEvergreenDevice(); 37 virtual size_t getMaxLDSSize() const; 38 virtual size_t getMaxGDSSize() const; 39 virtual size_t getWavefrontSize() const; 40 virtual uint32_t getGeneration() const; 41 virtual uint32_t getMaxNumUAVs() const; 42 virtual uint32_t getResourceID(uint32_t) const; 43 protected: 44 virtual void setCaps(); 45 }; // AMDGPUEvergreenDevice 46 47 // The AMDGPUCypressDevice is similiar to the AMDGPUEvergreenDevice, except it has 48 // support for double precision operations. This device is used to represent 49 // both the Cypress and Hemlock cards, which are commercially known as HD58XX 50 // and HD59XX cards. 51 class AMDGPUCypressDevice : public AMDGPUEvergreenDevice { 52 public: 53 AMDGPUCypressDevice(AMDGPUSubtarget *ST); 54 virtual ~AMDGPUCypressDevice(); 55 private: 56 virtual void setCaps(); 57 }; // AMDGPUCypressDevice 58 59 60 // The AMDGPUCedarDevice is the class that represents all of the 'Cedar' based 61 // devices. This class differs from the base AMDGPUEvergreenDevice in that the 62 // device is a ~quarter of the 'Juniper'. These are commercially known as the 63 // HD54XX and HD53XX series of cards. 64 class AMDGPUCedarDevice : public AMDGPUEvergreenDevice { 65 public: 66 AMDGPUCedarDevice(AMDGPUSubtarget *ST); 67 virtual ~AMDGPUCedarDevice(); 68 virtual size_t getWavefrontSize() const; 69 private: 70 virtual void setCaps(); 71 }; // AMDGPUCedarDevice 72 73 // The AMDGPURedwoodDevice is the class the represents all of the 'Redwood' based 74 // devices. This class differs from the base class, in that these devices are 75 // considered about half of a 'Juniper' device. These are commercially known as 76 // the HD55XX and HD56XX series of cards. 77 class AMDGPURedwoodDevice : public AMDGPUEvergreenDevice { 78 public: 79 AMDGPURedwoodDevice(AMDGPUSubtarget *ST); 80 virtual ~AMDGPURedwoodDevice(); 81 virtual size_t getWavefrontSize() const; 82 private: 83 virtual void setCaps(); 84 }; // AMDGPURedwoodDevice 85 86 } // namespace llvm 87 #endif // _AMDGPUEVERGREENDEVICE_H_ 88