//==- AMDILEvergreenDevice.h - Define Evergreen 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.
//
//==-----------------------------------------------------------------------===//
//
/// \file
/// \brief 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 AMDILEVERGREENDEVICE_H
#define AMDILEVERGREENDEVICE_H
#include "AMDGPUSubtarget.h"
#include "AMDILDevice.h"

namespace llvm {
  class AMDGPUSubtarget;
//===----------------------------------------------------------------------===//
// Evergreen generation of devices and their respective sub classes
//===----------------------------------------------------------------------===//


/// \brief The AMDGPUEvergreenDevice is the base device class for all of the Evergreen
/// series of cards.
///
/// This class contains information required to differentiate
/// the Evergreen device from the generic AMDGPUDevice. This device represents
/// that capabilities of the 'Juniper' cards, also known as the HD57XX.
class AMDGPUEvergreenDevice : public AMDGPUDevice {
public:
  AMDGPUEvergreenDevice(AMDGPUSubtarget *ST);
  virtual ~AMDGPUEvergreenDevice();
  virtual size_t getMaxLDSSize() const;
  virtual size_t getMaxGDSSize() const;
  virtual size_t getWavefrontSize() const;
  virtual uint32_t getGeneration() const;
  virtual uint32_t getMaxNumUAVs() const;
  virtual uint32_t getResourceID(uint32_t) const;
protected:
  virtual void setCaps();
};

/// The AMDGPUCypressDevice is similiar to the AMDGPUEvergreenDevice, except it has
/// support for double precision operations. This device is used to represent
/// both the Cypress and Hemlock cards, which are commercially known as HD58XX
/// and HD59XX cards.
class AMDGPUCypressDevice : public AMDGPUEvergreenDevice {
public:
  AMDGPUCypressDevice(AMDGPUSubtarget *ST);
  virtual ~AMDGPUCypressDevice();
private:
  virtual void setCaps();
};


/// \brief The AMDGPUCedarDevice is the class that represents all of the 'Cedar' based
/// devices.
///
/// This class differs from the base AMDGPUEvergreenDevice in that the
/// device is a ~quarter of the 'Juniper'. These are commercially known as the
/// HD54XX and HD53XX series of cards.
class AMDGPUCedarDevice : public AMDGPUEvergreenDevice {
public:
  AMDGPUCedarDevice(AMDGPUSubtarget *ST);
  virtual ~AMDGPUCedarDevice();
  virtual size_t getWavefrontSize() const;
private:
  virtual void setCaps();
};

/// \brief The AMDGPURedwoodDevice is the class the represents all of the 'Redwood' based
/// devices.
///
/// This class differs from the base class, in that these devices are
/// considered about half of a 'Juniper' device. These are commercially known as
/// the HD55XX and HD56XX series of cards.
class AMDGPURedwoodDevice : public AMDGPUEvergreenDevice {
public:
  AMDGPURedwoodDevice(AMDGPUSubtarget *ST);
  virtual ~AMDGPURedwoodDevice();
  virtual size_t getWavefrontSize() const;
private:
  virtual void setCaps();
};
  
} // namespace llvm
#endif // AMDILEVERGREENDEVICE_H
