//===-- AMDILDevice.cpp - Base class for AMDIL Devices --------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //==-----------------------------------------------------------------------===// #include "AMDILDevice.h" #include "AMDGPUSubtarget.h" using namespace llvm; // Default implementation for all of the classes. AMDGPUDevice::AMDGPUDevice(AMDGPUSubtarget *ST) : mSTM(ST) { mHWBits.resize(AMDGPUDeviceInfo::MaxNumberCapabilities); mSWBits.resize(AMDGPUDeviceInfo::MaxNumberCapabilities); setCaps(); mDeviceFlag = OCL_DEVICE_ALL; } AMDGPUDevice::~AMDGPUDevice() { mHWBits.clear(); mSWBits.clear(); } size_t AMDGPUDevice::getMaxGDSSize() const { return 0; } uint32_t AMDGPUDevice::getDeviceFlag() const { return mDeviceFlag; } size_t AMDGPUDevice::getMaxNumCBs() const { if (usesHardware(AMDGPUDeviceInfo::ConstantMem)) { return HW_MAX_NUM_CB; } return 0; } size_t AMDGPUDevice::getMaxCBSize() const { if (usesHardware(AMDGPUDeviceInfo::ConstantMem)) { return MAX_CB_SIZE; } return 0; } size_t AMDGPUDevice::getMaxScratchSize() const { return 65536; } uint32_t AMDGPUDevice::getStackAlignment() const { return 16; } void AMDGPUDevice::setCaps() { mSWBits.set(AMDGPUDeviceInfo::HalfOps); mSWBits.set(AMDGPUDeviceInfo::ByteOps); mSWBits.set(AMDGPUDeviceInfo::ShortOps); mSWBits.set(AMDGPUDeviceInfo::HW64BitDivMod); if (mSTM->isOverride(AMDGPUDeviceInfo::NoInline)) { mSWBits.set(AMDGPUDeviceInfo::NoInline); } if (mSTM->isOverride(AMDGPUDeviceInfo::MacroDB)) { mSWBits.set(AMDGPUDeviceInfo::MacroDB); } if (mSTM->isOverride(AMDGPUDeviceInfo::Debug)) { mSWBits.set(AMDGPUDeviceInfo::ConstantMem); } else { mHWBits.set(AMDGPUDeviceInfo::ConstantMem); } if (mSTM->isOverride(AMDGPUDeviceInfo::Debug)) { mSWBits.set(AMDGPUDeviceInfo::PrivateMem); } else { mHWBits.set(AMDGPUDeviceInfo::PrivateMem); } if (mSTM->isOverride(AMDGPUDeviceInfo::BarrierDetect)) { mSWBits.set(AMDGPUDeviceInfo::BarrierDetect); } mSWBits.set(AMDGPUDeviceInfo::ByteLDSOps); mSWBits.set(AMDGPUDeviceInfo::LongOps); } AMDGPUDeviceInfo::ExecutionMode AMDGPUDevice::getExecutionMode(AMDGPUDeviceInfo::Caps Caps) const { if (mHWBits[Caps]) { assert(!mSWBits[Caps] && "Cannot set both SW and HW caps"); return AMDGPUDeviceInfo::Hardware; } if (mSWBits[Caps]) { assert(!mHWBits[Caps] && "Cannot set both SW and HW caps"); return AMDGPUDeviceInfo::Software; } return AMDGPUDeviceInfo::Unsupported; } bool AMDGPUDevice::isSupported(AMDGPUDeviceInfo::Caps Mode) const { return getExecutionMode(Mode) != AMDGPUDeviceInfo::Unsupported; } bool AMDGPUDevice::usesHardware(AMDGPUDeviceInfo::Caps Mode) const { return getExecutionMode(Mode) == AMDGPUDeviceInfo::Hardware; } bool AMDGPUDevice::usesSoftware(AMDGPUDeviceInfo::Caps Mode) const { return getExecutionMode(Mode) == AMDGPUDeviceInfo::Software; } std::string AMDGPUDevice::getDataLayout() const { return std::string("e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16" "-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:32:32" "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64" "-v96:128:128-v128:128:128-v192:256:256-v256:256:256" "-v512:512:512-v1024:1024:1024-v2048:2048:2048" "-n8:16:32:64"); }