1 //==- AMDILEvergreenDevice.h - Define Evergreen Device for AMDIL -*- C++ -*--=//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //==-----------------------------------------------------------------------===//
11 /// \brief Interface for the subtarget data classes.
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 "AMDGPUSubtarget.h"
20 #include "AMDILDevice.h"
23 class AMDGPUSubtarget;
24 //===----------------------------------------------------------------------===//
25 // Evergreen generation of devices and their respective sub classes
26 //===----------------------------------------------------------------------===//
29 /// \brief The AMDGPUEvergreenDevice is the base device class for all of the Evergreen
32 /// This class contains information required to differentiate
33 /// the Evergreen device from the generic AMDGPUDevice. This device represents
34 /// that capabilities of the 'Juniper' cards, also known as the HD57XX.
35 class AMDGPUEvergreenDevice : public AMDGPUDevice {
37 AMDGPUEvergreenDevice(AMDGPUSubtarget *ST);
38 virtual ~AMDGPUEvergreenDevice();
39 virtual size_t getMaxLDSSize() const;
40 virtual size_t getMaxGDSSize() const;
41 virtual size_t getWavefrontSize() const;
42 virtual uint32_t getGeneration() const;
43 virtual uint32_t getMaxNumUAVs() const;
44 virtual uint32_t getResourceID(uint32_t) const;
46 virtual void setCaps();
49 /// The AMDGPUCypressDevice is similiar to the AMDGPUEvergreenDevice, except it has
50 /// support for double precision operations. This device is used to represent
51 /// both the Cypress and Hemlock cards, which are commercially known as HD58XX
53 class AMDGPUCypressDevice : public AMDGPUEvergreenDevice {
55 AMDGPUCypressDevice(AMDGPUSubtarget *ST);
56 virtual ~AMDGPUCypressDevice();
58 virtual void setCaps();
62 /// \brief The AMDGPUCedarDevice is the class that represents all of the 'Cedar' based
65 /// This class differs from the base AMDGPUEvergreenDevice in that the
66 /// device is a ~quarter of the 'Juniper'. These are commercially known as the
67 /// HD54XX and HD53XX series of cards.
68 class AMDGPUCedarDevice : public AMDGPUEvergreenDevice {
70 AMDGPUCedarDevice(AMDGPUSubtarget *ST);
71 virtual ~AMDGPUCedarDevice();
72 virtual size_t getWavefrontSize() const;
74 virtual void setCaps();
77 /// \brief The AMDGPURedwoodDevice is the class the represents all of the 'Redwood' based
80 /// This class differs from the base class, in that these devices are
81 /// considered about half of a 'Juniper' device. These are commercially known as
82 /// the HD55XX and HD56XX series of cards.
83 class AMDGPURedwoodDevice : public AMDGPUEvergreenDevice {
85 AMDGPURedwoodDevice(AMDGPUSubtarget *ST);
86 virtual ~AMDGPURedwoodDevice();
87 virtual size_t getWavefrontSize() const;
89 virtual void setCaps();
93 #endif // AMDILEVERGREENDEVICE_H