1fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard//===-- AMDILEvergreenDevice.cpp - Device Info for Evergreen --------------===// 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 "AMDILEvergreenDevice.h" 10a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 11a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardusing namespace llvm; 12a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 132f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUEvergreenDevice::AMDGPUEvergreenDevice(AMDGPUSubtarget *ST) 142f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard: AMDGPUDevice(ST) { 15a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard setCaps(); 16a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard std::string name = ST->getDeviceName(); 17a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (name == "cedar") { 18a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard mDeviceFlag = OCL_DEVICE_CEDAR; 19a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else if (name == "redwood") { 20a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard mDeviceFlag = OCL_DEVICE_REDWOOD; 21a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else if (name == "cypress") { 22a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard mDeviceFlag = OCL_DEVICE_CYPRESS; 23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else { 24a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard mDeviceFlag = OCL_DEVICE_JUNIPER; 25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 26a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 27a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 282f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUEvergreenDevice::~AMDGPUEvergreenDevice() { 29a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 30a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 312f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPUEvergreenDevice::getMaxLDSSize() const { 322f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (usesHardware(AMDGPUDeviceInfo::LocalMem)) { 33a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return MAX_LDS_SIZE_800; 34a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else { 35a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 0; 36a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 37a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 382f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPUEvergreenDevice::getMaxGDSSize() const { 392f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (usesHardware(AMDGPUDeviceInfo::RegionMem)) { 40a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return MAX_LDS_SIZE_800; 41a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else { 42a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 0; 43a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 44a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 452f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellarduint32_t AMDGPUEvergreenDevice::getMaxNumUAVs() const { 46a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 12; 47a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 48a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 492f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellarduint32_t AMDGPUEvergreenDevice::getResourceID(uint32_t id) const { 50a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard switch(id) { 51a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard default: 52a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(0 && "ID type passed in is unknown!"); 53a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard break; 54a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case CONSTANT_ID: 55a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case RAW_UAV_ID: 56b72ab79d73b29ec087d90cf2c698adbab4db5defTom Stellard return GLOBAL_RETURN_RAW_UAV_ID; 57a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case GLOBAL_ID: 58a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case ARENA_UAV_ID: 59a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return DEFAULT_ARENA_UAV_ID; 60a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case LDS_ID: 612f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (usesHardware(AMDGPUDeviceInfo::LocalMem)) { 62a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return DEFAULT_LDS_ID; 63a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else { 64a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return DEFAULT_ARENA_UAV_ID; 65a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 66a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case GDS_ID: 672f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (usesHardware(AMDGPUDeviceInfo::RegionMem)) { 68a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return DEFAULT_GDS_ID; 69a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else { 70a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return DEFAULT_ARENA_UAV_ID; 71a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 72a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard case SCRATCH_ID: 732f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (usesHardware(AMDGPUDeviceInfo::PrivateMem)) { 74a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return DEFAULT_SCRATCH_ID; 75a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else { 76a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return DEFAULT_ARENA_UAV_ID; 77a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 78a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard }; 79a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 0; 80a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 81a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 822f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPUEvergreenDevice::getWavefrontSize() const { 832f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return AMDGPUDevice::WavefrontSize; 84a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 85a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 862f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellarduint32_t AMDGPUEvergreenDevice::getGeneration() const { 872f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return AMDGPUDeviceInfo::HD5XXX; 88a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 89a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 902f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardvoid AMDGPUEvergreenDevice::setCaps() { 912f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::ArenaSegment); 922f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::ArenaUAV); 932f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::HW64BitDivMod); 942f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.reset(AMDGPUDeviceInfo::HW64BitDivMod); 952f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::Signed24BitOps); 962f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (mSTM->isOverride(AMDGPUDeviceInfo::ByteStores)) { 972f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::ByteStores); 98a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 992f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (mSTM->isOverride(AMDGPUDeviceInfo::Debug)) { 1002f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::LocalMem); 1012f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::RegionMem); 102a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else { 1032f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::LocalMem); 1042f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::RegionMem); 105a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 1062f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::Images); 1072f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (mSTM->isOverride(AMDGPUDeviceInfo::NoAlias)) { 1082f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::NoAlias); 109a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 1102f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::CachedMem); 1112f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (mSTM->isOverride(AMDGPUDeviceInfo::MultiUAV)) { 1122f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::MultiUAV); 113a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 1142f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::ByteLDSOps); 1152f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.reset(AMDGPUDeviceInfo::ByteLDSOps); 1162f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::ArenaVectors); 1172f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::LongOps); 1182f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.reset(AMDGPUDeviceInfo::LongOps); 1192f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::TmrReg); 120a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 121a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1222f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUCypressDevice::AMDGPUCypressDevice(AMDGPUSubtarget *ST) 1232f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard : AMDGPUEvergreenDevice(ST) { 124a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard setCaps(); 125a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 126a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1272f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUCypressDevice::~AMDGPUCypressDevice() { 128a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 129a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1302f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardvoid AMDGPUCypressDevice::setCaps() { 1312f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (mSTM->isOverride(AMDGPUDeviceInfo::DoubleOps)) { 1322f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::DoubleOps); 1332f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::FMA); 134a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 135a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 136a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 137a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1382f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUCedarDevice::AMDGPUCedarDevice(AMDGPUSubtarget *ST) 1392f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard : AMDGPUEvergreenDevice(ST) { 140a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard setCaps(); 141a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 142a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1432f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUCedarDevice::~AMDGPUCedarDevice() { 144a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 145a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1462f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardvoid AMDGPUCedarDevice::setCaps() { 1472f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::FMA); 148a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 149a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1502f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPUCedarDevice::getWavefrontSize() const { 1512f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return AMDGPUDevice::QuarterWavefrontSize; 152a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 153a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1542f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPURedwoodDevice::AMDGPURedwoodDevice(AMDGPUSubtarget *ST) 1552f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard : AMDGPUEvergreenDevice(ST) { 156a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard setCaps(); 157a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 158a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1592f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPURedwoodDevice::~AMDGPURedwoodDevice() 160a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 161a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 162a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1632f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardvoid AMDGPURedwoodDevice::setCaps() { 1642f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::FMA); 165a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 166a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1672f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPURedwoodDevice::getWavefrontSize() const { 1682f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return AMDGPUDevice::HalfWavefrontSize; 169a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 170