1fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard//===-- AMDILDevice.cpp - Base class for AMDIL Devices --------------------===// 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 "AMDILDevice.h" 10b72ab79d73b29ec087d90cf2c698adbab4db5defTom Stellard#include "AMDGPUSubtarget.h" 11a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 12a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardusing namespace llvm; 13a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// Default implementation for all of the classes. 142f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUDevice::AMDGPUDevice(AMDGPUSubtarget *ST) : mSTM(ST) 15a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 162f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.resize(AMDGPUDeviceInfo::MaxNumberCapabilities); 172f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.resize(AMDGPUDeviceInfo::MaxNumberCapabilities); 18a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard setCaps(); 19a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard mDeviceFlag = OCL_DEVICE_ALL; 20a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 21a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 222f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUDevice::~AMDGPUDevice() 23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 24a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard mHWBits.clear(); 25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard mSWBits.clear(); 26a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 27a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 282f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPUDevice::getMaxGDSSize() const 29a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 30a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 0; 31a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 32a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 33a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellarduint32_t 342f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUDevice::getDeviceFlag() const 35a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 36a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return mDeviceFlag; 37a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 38a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 392f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPUDevice::getMaxNumCBs() const 40a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 412f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (usesHardware(AMDGPUDeviceInfo::ConstantMem)) { 42a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return HW_MAX_NUM_CB; 43a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 44a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 45a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 0; 46a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 47a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 482f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPUDevice::getMaxCBSize() const 49a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 502f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (usesHardware(AMDGPUDeviceInfo::ConstantMem)) { 51a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return MAX_CB_SIZE; 52a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 53a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 54a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 0; 55a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 56a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 572f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPUDevice::getMaxScratchSize() const 58a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 59a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 65536; 60a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 61a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 622f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellarduint32_t AMDGPUDevice::getStackAlignment() const 63a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 64a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return 16; 65a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 66a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 672f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardvoid AMDGPUDevice::setCaps() 68a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 692f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::HalfOps); 702f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::ByteOps); 712f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::ShortOps); 722f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::HW64BitDivMod); 732f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (mSTM->isOverride(AMDGPUDeviceInfo::NoInline)) { 742f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::NoInline); 75a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 762f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (mSTM->isOverride(AMDGPUDeviceInfo::MacroDB)) { 772f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::MacroDB); 78a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 792f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (mSTM->isOverride(AMDGPUDeviceInfo::Debug)) { 802f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::ConstantMem); 81a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else { 822f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::ConstantMem); 83a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 842f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (mSTM->isOverride(AMDGPUDeviceInfo::Debug)) { 852f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::PrivateMem); 86a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } else { 872f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mHWBits.set(AMDGPUDeviceInfo::PrivateMem); 88a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 892f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard if (mSTM->isOverride(AMDGPUDeviceInfo::BarrierDetect)) { 902f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::BarrierDetect); 91a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 922f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::ByteLDSOps); 932f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard mSWBits.set(AMDGPUDeviceInfo::LongOps); 94a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 95a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 962f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUDeviceInfo::ExecutionMode 972f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUDevice::getExecutionMode(AMDGPUDeviceInfo::Caps Caps) const 98a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 99a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (mHWBits[Caps]) { 100a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!mSWBits[Caps] && "Cannot set both SW and HW caps"); 1012f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return AMDGPUDeviceInfo::Hardware; 102a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 103a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 104a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard if (mSWBits[Caps]) { 105a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard assert(!mHWBits[Caps] && "Cannot set both SW and HW caps"); 1062f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return AMDGPUDeviceInfo::Software; 107a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard } 108a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1092f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return AMDGPUDeviceInfo::Unsupported; 110a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 111a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 112a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1132f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardbool AMDGPUDevice::isSupported(AMDGPUDeviceInfo::Caps Mode) const 114a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 1152f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return getExecutionMode(Mode) != AMDGPUDeviceInfo::Unsupported; 116a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 117a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1182f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardbool AMDGPUDevice::usesHardware(AMDGPUDeviceInfo::Caps Mode) const 119a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 1202f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return getExecutionMode(Mode) == AMDGPUDeviceInfo::Hardware; 121a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 122a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1232f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardbool AMDGPUDevice::usesSoftware(AMDGPUDeviceInfo::Caps Mode) const 124a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 1252f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard return getExecutionMode(Mode) == AMDGPUDeviceInfo::Software; 126a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 127a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 128a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstd::string 1292f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPUDevice::getDataLayout() const 130a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{ 131a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return std::string("e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16" 132a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard "-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:32:32" 133a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64" 134a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard "-v96:128:128-v128:128:128-v192:256:256-v256:256:256" 135a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard "-v512:512:512-v1024:1024:1024-v2048:2048:2048" 136a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard "-n8:16:32:64"); 137a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 138