1fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard//===-- AMDIL7XXDevice.cpp - Device Info for 7XX GPUs ---------------------===// 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#include "AMDIL7XXDevice.h" 10b72ab79d73b29ec087d90cf2c698adbab4db5defTom Stellard#include "AMDGPUSubtarget.h" 11a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "AMDILDevice.h" 12a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 13a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardusing namespace llvm; 14a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 152f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPU7XXDevice::AMDGPU7XXDevice(AMDGPUSubtarget *ST) : AMDGPUDevice(ST) 16a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 17a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard setCaps(); 18a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard std::string name = mSTM->getDeviceName(); 19a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (name == "rv710") { 20a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard mDeviceFlag = OCL_DEVICE_RV710; 21a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else if (name == "rv730") { 22a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard mDeviceFlag = OCL_DEVICE_RV730; 23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else { 24a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard mDeviceFlag = OCL_DEVICE_RV770; 25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 26a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 27a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 282f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPU7XXDevice::~AMDGPU7XXDevice() 29a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 30a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 31a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 322f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardvoid AMDGPU7XXDevice::setCaps() 33a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 342f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::LocalMem); 35a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 36a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 372f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPU7XXDevice::getMaxLDSSize() const 38a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 392f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (usesHardware(AMDGPUDeviceInfo::LocalMem)) { 40a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return MAX_LDS_SIZE_700; 41a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 42a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 0; 43a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 44a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 452f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPU7XXDevice::getWavefrontSize() const 46a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 472f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return AMDGPUDevice::HalfWavefrontSize; 48a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 49a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 502f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellarduint32_t AMDGPU7XXDevice::getGeneration() const 51a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 522f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return AMDGPUDeviceInfo::HD4XXX; 53a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 54a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 552f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellarduint32_t AMDGPU7XXDevice::getResourceID(uint32_t DeviceID) const 56a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 57a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard switch (DeviceID) { 58a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard default: 59a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(0 && "ID type passed in is unknown!"); 60a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard break; 61a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case GLOBAL_ID: 62a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case CONSTANT_ID: 63a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case RAW_UAV_ID: 64a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case ARENA_UAV_ID: 65a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard break; 66a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case LDS_ID: 672f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (usesHardware(AMDGPUDeviceInfo::LocalMem)) { 68a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return DEFAULT_LDS_ID; 69a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 70a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard break; 71a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case SCRATCH_ID: 722f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (usesHardware(AMDGPUDeviceInfo::PrivateMem)) { 73a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return DEFAULT_SCRATCH_ID; 74a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 75a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard break; 76a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case GDS_ID: 77a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(0 && "GDS UAV ID is not supported on this chip"); 782f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (usesHardware(AMDGPUDeviceInfo::RegionMem)) { 79a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return DEFAULT_GDS_ID; 80a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 81a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard break; 82a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard }; 83a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 84a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 0; 85a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 86a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 872f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellarduint32_t AMDGPU7XXDevice::getMaxNumUAVs() const 88a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 89a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 1; 90a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 91a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 922f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPU770Device::AMDGPU770Device(AMDGPUSubtarget *ST): AMDGPU7XXDevice(ST) 93a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 94a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard setCaps(); 95a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 96a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 972f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPU770Device::~AMDGPU770Device() 98a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 99a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 100a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1012f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardvoid AMDGPU770Device::setCaps() 102a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 1032f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (mSTM->isOverride(AMDGPUDeviceInfo::DoubleOps)) { 1042f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::FMA); 1052f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::DoubleOps); 106a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 1072f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::BarrierDetect); 1082f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.reset(AMDGPUDeviceInfo::LongOps); 1092f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::LongOps); 1102f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::LocalMem); 111a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 112a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1132f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPU770Device::getWavefrontSize() const 114a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 1152f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return AMDGPUDevice::WavefrontSize; 116a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 117a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1182f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPU710Device::AMDGPU710Device(AMDGPUSubtarget *ST) : AMDGPU7XXDevice(ST) 119a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 120a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 121a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1222f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPU710Device::~AMDGPU710Device() 123a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 124a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 125a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1262f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPU710Device::getWavefrontSize() const 127a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 1282f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return AMDGPUDevice::QuarterWavefrontSize; 129a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 130