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