1//===-- AMDIL7XXDevice.cpp - Device Info for 7XX GPUs ---------------------===// 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#include "AMDIL7XXDevice.h" 10#include "AMDGPUSubtarget.h" 11#include "AMDILDevice.h" 12 13using namespace llvm; 14 15AMDGPU7XXDevice::AMDGPU7XXDevice(AMDGPUSubtarget *ST) : AMDGPUDevice(ST) 16{ 17 setCaps(); 18 std::string name = mSTM->getDeviceName(); 19 if (name == "rv710") { 20 mDeviceFlag = OCL_DEVICE_RV710; 21 } else if (name == "rv730") { 22 mDeviceFlag = OCL_DEVICE_RV730; 23 } else { 24 mDeviceFlag = OCL_DEVICE_RV770; 25 } 26} 27 28AMDGPU7XXDevice::~AMDGPU7XXDevice() 29{ 30} 31 32void AMDGPU7XXDevice::setCaps() 33{ 34 mSWBits.set(AMDGPUDeviceInfo::LocalMem); 35} 36 37size_t AMDGPU7XXDevice::getMaxLDSSize() const 38{ 39 if (usesHardware(AMDGPUDeviceInfo::LocalMem)) { 40 return MAX_LDS_SIZE_700; 41 } 42 return 0; 43} 44 45size_t AMDGPU7XXDevice::getWavefrontSize() const 46{ 47 return AMDGPUDevice::HalfWavefrontSize; 48} 49 50uint32_t AMDGPU7XXDevice::getGeneration() const 51{ 52 return AMDGPUDeviceInfo::HD4XXX; 53} 54 55uint32_t AMDGPU7XXDevice::getResourceID(uint32_t DeviceID) const 56{ 57 switch (DeviceID) { 58 default: 59 assert(0 && "ID type passed in is unknown!"); 60 break; 61 case GLOBAL_ID: 62 case CONSTANT_ID: 63 case RAW_UAV_ID: 64 case ARENA_UAV_ID: 65 break; 66 case LDS_ID: 67 if (usesHardware(AMDGPUDeviceInfo::LocalMem)) { 68 return DEFAULT_LDS_ID; 69 } 70 break; 71 case SCRATCH_ID: 72 if (usesHardware(AMDGPUDeviceInfo::PrivateMem)) { 73 return DEFAULT_SCRATCH_ID; 74 } 75 break; 76 case GDS_ID: 77 assert(0 && "GDS UAV ID is not supported on this chip"); 78 if (usesHardware(AMDGPUDeviceInfo::RegionMem)) { 79 return DEFAULT_GDS_ID; 80 } 81 break; 82 }; 83 84 return 0; 85} 86 87uint32_t AMDGPU7XXDevice::getMaxNumUAVs() const 88{ 89 return 1; 90} 91 92AMDGPU770Device::AMDGPU770Device(AMDGPUSubtarget *ST): AMDGPU7XXDevice(ST) 93{ 94 setCaps(); 95} 96 97AMDGPU770Device::~AMDGPU770Device() 98{ 99} 100 101void AMDGPU770Device::setCaps() 102{ 103 if (mSTM->isOverride(AMDGPUDeviceInfo::DoubleOps)) { 104 mSWBits.set(AMDGPUDeviceInfo::FMA); 105 mHWBits.set(AMDGPUDeviceInfo::DoubleOps); 106 } 107 mSWBits.set(AMDGPUDeviceInfo::BarrierDetect); 108 mHWBits.reset(AMDGPUDeviceInfo::LongOps); 109 mSWBits.set(AMDGPUDeviceInfo::LongOps); 110 mSWBits.set(AMDGPUDeviceInfo::LocalMem); 111} 112 113size_t AMDGPU770Device::getWavefrontSize() const 114{ 115 return AMDGPUDevice::WavefrontSize; 116} 117 118AMDGPU710Device::AMDGPU710Device(AMDGPUSubtarget *ST) : AMDGPU7XXDevice(ST) 119{ 120} 121 122AMDGPU710Device::~AMDGPU710Device() 123{ 124} 125 126size_t AMDGPU710Device::getWavefrontSize() const 127{ 128 return AMDGPUDevice::QuarterWavefrontSize; 129} 130