1//==-- AMDIL7XXDevice.h - Define 7XX Device 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 _AMDIL7XXDEVICEIMPL_H_
18#define _AMDIL7XXDEVICEIMPL_H_
19#include "AMDILDevice.h"
20
21namespace llvm {
22class AMDGPUSubtarget;
23
24//===----------------------------------------------------------------------===//
25// 7XX generation of devices and their respective sub classes
26//===----------------------------------------------------------------------===//
27
28// The AMDGPU7XXDevice class represents the generic 7XX device. All 7XX
29// devices are derived from this class. The AMDGPU7XX device will only
30// support the minimal features that are required to be considered OpenCL 1.0
31// compliant and nothing more.
32class AMDGPU7XXDevice : public AMDGPUDevice {
33public:
34  AMDGPU7XXDevice(AMDGPUSubtarget *ST);
35  virtual ~AMDGPU7XXDevice();
36  virtual size_t getMaxLDSSize() const;
37  virtual size_t getWavefrontSize() const;
38  virtual uint32_t getGeneration() const;
39  virtual uint32_t getResourceID(uint32_t DeviceID) const;
40  virtual uint32_t getMaxNumUAVs() const;
41
42protected:
43  virtual void setCaps();
44}; // AMDGPU7XXDevice
45
46// The AMDGPU770Device class represents the RV770 chip and it's
47// derivative cards. The difference between this device and the base
48// class is this device device adds support for double precision
49// and has a larger wavefront size.
50class AMDGPU770Device : public AMDGPU7XXDevice {
51public:
52  AMDGPU770Device(AMDGPUSubtarget *ST);
53  virtual ~AMDGPU770Device();
54  virtual size_t getWavefrontSize() const;
55private:
56  virtual void setCaps();
57}; // AMDGPU770Device
58
59// The AMDGPU710Device class derives from the 7XX base class, but this
60// class is a smaller derivative, so we need to overload some of the
61// functions in order to correctly specify this information.
62class AMDGPU710Device : public AMDGPU7XXDevice {
63public:
64  AMDGPU710Device(AMDGPUSubtarget *ST);
65  virtual ~AMDGPU710Device();
66  virtual size_t getWavefrontSize() const;
67}; // AMDGPU710Device
68
69} // namespace llvm
70#endif // _AMDILDEVICEIMPL_H_
71