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