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 22namespace 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. 33class AMDGPUEvergreenDevice : public AMDGPUDevice { 34public: 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; 43protected: 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. 51class AMDGPUCypressDevice : public AMDGPUEvergreenDevice { 52public: 53 AMDGPUCypressDevice(AMDGPUSubtarget *ST); 54 virtual ~AMDGPUCypressDevice(); 55private: 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. 64class AMDGPUCedarDevice : public AMDGPUEvergreenDevice { 65public: 66 AMDGPUCedarDevice(AMDGPUSubtarget *ST); 67 virtual ~AMDGPUCedarDevice(); 68 virtual size_t getWavefrontSize() const; 69private: 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. 77class AMDGPURedwoodDevice : public AMDGPUEvergreenDevice { 78public: 79 AMDGPURedwoodDevice(AMDGPUSubtarget *ST); 80 virtual ~AMDGPURedwoodDevice(); 81 virtual size_t getWavefrontSize() const; 82private: 83 virtual void setCaps(); 84}; // AMDGPURedwoodDevice 85 86} // namespace llvm 87#endif // _AMDGPUEVERGREENDEVICE_H_ 88