1a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//==-- AMDIL7XXDevice.h - Define 7XX Device Device for AMDIL ---*- C++ -*--===//
2a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
3a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//                     The LLVM Compiler Infrastructure
4a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
5a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// This file is distributed under the University of Illinois Open Source
6a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// License. See LICENSE.TXT for details.
7a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
8a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//==-----------------------------------------------------------------------===//
9a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
10a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// Interface for the subtarget data classes.
11a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
12a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//===----------------------------------------------------------------------===//
13a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// This file will define the interface that each generation needs to
14a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// implement in order to correctly answer queries on the capabilities of the
15a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// specific hardware.
16a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//===----------------------------------------------------------------------===//
17a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#ifndef _AMDIL7XXDEVICEIMPL_H_
18a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define _AMDIL7XXDEVICEIMPL_H_
19a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "AMDILDevice.h"
20a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
21a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardnamespace llvm {
22b72ab79d73b29ec087d90cf2c698adbab4db5defTom Stellardclass AMDGPUSubtarget;
23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
24a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//===----------------------------------------------------------------------===//
25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// 7XX generation of devices and their respective sub classes
26a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//===----------------------------------------------------------------------===//
27a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
282f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard// The AMDGPU7XXDevice class represents the generic 7XX device. All 7XX
292f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard// devices are derived from this class. The AMDGPU7XX device will only
30a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// support the minimal features that are required to be considered OpenCL 1.0
31a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// compliant and nothing more.
322f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardclass AMDGPU7XXDevice : public AMDGPUDevice {
33a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardpublic:
342f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  AMDGPU7XXDevice(AMDGPUSubtarget *ST);
352f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  virtual ~AMDGPU7XXDevice();
36a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  virtual size_t getMaxLDSSize() const;
37a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  virtual size_t getWavefrontSize() const;
38a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  virtual uint32_t getGeneration() const;
39a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  virtual uint32_t getResourceID(uint32_t DeviceID) const;
40a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  virtual uint32_t getMaxNumUAVs() const;
41a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
42a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardprotected:
43a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  virtual void setCaps();
442f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard}; // AMDGPU7XXDevice
45a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
462f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard// The AMDGPU770Device class represents the RV770 chip and it's
47a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// derivative cards. The difference between this device and the base
48a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// class is this device device adds support for double precision
49a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// and has a larger wavefront size.
502f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardclass AMDGPU770Device : public AMDGPU7XXDevice {
51a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardpublic:
522f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  AMDGPU770Device(AMDGPUSubtarget *ST);
532f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  virtual ~AMDGPU770Device();
54a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  virtual size_t getWavefrontSize() const;
55a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardprivate:
56a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  virtual void setCaps();
572f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard}; // AMDGPU770Device
58a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
592f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard// The AMDGPU710Device class derives from the 7XX base class, but this
60a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// class is a smaller derivative, so we need to overload some of the
61a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// functions in order to correctly specify this information.
622f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardclass AMDGPU710Device : public AMDGPU7XXDevice {
63a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardpublic:
642f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  AMDGPU710Device(AMDGPUSubtarget *ST);
652f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  virtual ~AMDGPU710Device();
66a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  virtual size_t getWavefrontSize() const;
672f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard}; // AMDGPU710Device
68a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
69a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} // namespace llvm
70a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif // _AMDILDEVICEIMPL_H_
71