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