1//===------- AMDILNIDevice.h - Define NI 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 _AMDILNIDEVICE_H_
18#define _AMDILNIDEVICE_H_
19#include "AMDILEvergreenDevice.h"
20#include "AMDGPUSubtarget.h"
21
22namespace llvm {
23  class AMDGPUSubtarget;
24//===---------------------------------------------------------------------===//
25// NI generation of devices and their respective sub classes
26//===---------------------------------------------------------------------===//
27
28// The AMDGPUNIDevice is the base class for all Northern Island series of
29// cards. It is very similiar to the AMDGPUEvergreenDevice, with the major
30// exception being differences in wavefront size and hardware capabilities.  The
31// NI devices are all 64 wide wavefronts and also add support for signed 24 bit
32// integer operations
33
34  class AMDGPUNIDevice : public AMDGPUEvergreenDevice {
35    public:
36      AMDGPUNIDevice(AMDGPUSubtarget*);
37      virtual ~AMDGPUNIDevice();
38      virtual size_t getMaxLDSSize() const;
39      virtual uint32_t getGeneration() const;
40    protected:
41  }; // AMDGPUNIDevice
42
43// Just as the AMDGPUCypressDevice is the double capable version of the
44// AMDGPUEvergreenDevice, the AMDGPUCaymanDevice is the double capable version of
45// the AMDGPUNIDevice.  The other major difference that is not as useful from
46// standpoint is that the Cayman Device has 4 wide ALU's, whereas the rest of the
47// NI family is a 5 wide.
48
49  class AMDGPUCaymanDevice: public AMDGPUNIDevice {
50    public:
51      AMDGPUCaymanDevice(AMDGPUSubtarget*);
52      virtual ~AMDGPUCaymanDevice();
53    private:
54      virtual void setCaps();
55  }; // AMDGPUCaymanDevice
56
57  static const unsigned int MAX_LDS_SIZE_900 = AMDGPUDevice::MAX_LDS_SIZE_800;
58} // namespace llvm
59#endif // _AMDILNIDEVICE_H_
60