//==-- AMDIL7XXDevice.h - Define 7XX Device Device for AMDIL ---*- C++ -*--===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//==-----------------------------------------------------------------------===//
//
// Interface for the subtarget data classes.
//
//===----------------------------------------------------------------------===//
// This file will define the interface that each generation needs to
// implement in order to correctly answer queries on the capabilities of the
// specific hardware.
//===----------------------------------------------------------------------===//
#ifndef _AMDIL7XXDEVICEIMPL_H_
#define _AMDIL7XXDEVICEIMPL_H_
#include "AMDILDevice.h"

namespace llvm {
class AMDGPUSubtarget;

//===----------------------------------------------------------------------===//
// 7XX generation of devices and their respective sub classes
//===----------------------------------------------------------------------===//

// The AMDGPU7XXDevice class represents the generic 7XX device. All 7XX
// devices are derived from this class. The AMDGPU7XX device will only
// support the minimal features that are required to be considered OpenCL 1.0
// compliant and nothing more.
class AMDGPU7XXDevice : public AMDGPUDevice {
public:
  AMDGPU7XXDevice(AMDGPUSubtarget *ST);
  virtual ~AMDGPU7XXDevice();
  virtual size_t getMaxLDSSize() const;
  virtual size_t getWavefrontSize() const;
  virtual uint32_t getGeneration() const;
  virtual uint32_t getResourceID(uint32_t DeviceID) const;
  virtual uint32_t getMaxNumUAVs() const;

protected:
  virtual void setCaps();
}; // AMDGPU7XXDevice

// The AMDGPU770Device class represents the RV770 chip and it's
// derivative cards. The difference between this device and the base
// class is this device device adds support for double precision
// and has a larger wavefront size.
class AMDGPU770Device : public AMDGPU7XXDevice {
public:
  AMDGPU770Device(AMDGPUSubtarget *ST);
  virtual ~AMDGPU770Device();
  virtual size_t getWavefrontSize() const;
private:
  virtual void setCaps();
}; // AMDGPU770Device

// The AMDGPU710Device class derives from the 7XX base class, but this
// class is a smaller derivative, so we need to overload some of the
// functions in order to correctly specify this information.
class AMDGPU710Device : public AMDGPU7XXDevice {
public:
  AMDGPU710Device(AMDGPUSubtarget *ST);
  virtual ~AMDGPU710Device();
  virtual size_t getWavefrontSize() const;
}; // AMDGPU710Device

} // namespace llvm
#endif // _AMDILDEVICEIMPL_H_
