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 
21 namespace llvm {
22 class 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.
32 class AMDGPU7XXDevice : public AMDGPUDevice {
33 public:
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 
42 protected:
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.
50 class AMDGPU770Device : public AMDGPU7XXDevice {
51 public:
52   AMDGPU770Device(AMDGPUSubtarget *ST);
53   virtual ~AMDGPU770Device();
54   virtual size_t getWavefrontSize() const;
55 private:
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.
62 class AMDGPU710Device : public AMDGPU7XXDevice {
63 public:
64   AMDGPU710Device(AMDGPUSubtarget *ST);
65   virtual ~AMDGPU710Device();
66   virtual size_t getWavefrontSize() const;
67 }; // AMDGPU710Device
68 
69 } // namespace llvm
70 #endif // _AMDILDEVICEIMPL_H_
71