1 //===-- AMDILDevice.cpp - Base class for AMDIL Devices --------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //==-----------------------------------------------------------------------===//
9 #include "AMDILDevice.h"
10 #include "AMDGPUSubtarget.h"
13 // Default implementation for all of the classes.
14 AMDGPUDevice::AMDGPUDevice(AMDGPUSubtarget
*ST
) : mSTM(ST
)
16 mHWBits
.resize(AMDGPUDeviceInfo::MaxNumberCapabilities
);
17 mSWBits
.resize(AMDGPUDeviceInfo::MaxNumberCapabilities
);
19 mDeviceFlag
= OCL_DEVICE_ALL
;
22 AMDGPUDevice::~AMDGPUDevice()
28 size_t AMDGPUDevice::getMaxGDSSize() const
34 AMDGPUDevice::getDeviceFlag() const
39 size_t AMDGPUDevice::getMaxNumCBs() const
41 if (usesHardware(AMDGPUDeviceInfo::ConstantMem
)) {
48 size_t AMDGPUDevice::getMaxCBSize() const
50 if (usesHardware(AMDGPUDeviceInfo::ConstantMem
)) {
57 size_t AMDGPUDevice::getMaxScratchSize() const
62 uint32_t AMDGPUDevice::getStackAlignment() const
67 void AMDGPUDevice::setCaps()
69 mSWBits
.set(AMDGPUDeviceInfo::HalfOps
);
70 mSWBits
.set(AMDGPUDeviceInfo::ByteOps
);
71 mSWBits
.set(AMDGPUDeviceInfo::ShortOps
);
72 mSWBits
.set(AMDGPUDeviceInfo::HW64BitDivMod
);
73 if (mSTM
->isOverride(AMDGPUDeviceInfo::NoInline
)) {
74 mSWBits
.set(AMDGPUDeviceInfo::NoInline
);
76 if (mSTM
->isOverride(AMDGPUDeviceInfo::MacroDB
)) {
77 mSWBits
.set(AMDGPUDeviceInfo::MacroDB
);
79 if (mSTM
->isOverride(AMDGPUDeviceInfo::Debug
)) {
80 mSWBits
.set(AMDGPUDeviceInfo::ConstantMem
);
82 mHWBits
.set(AMDGPUDeviceInfo::ConstantMem
);
84 if (mSTM
->isOverride(AMDGPUDeviceInfo::Debug
)) {
85 mSWBits
.set(AMDGPUDeviceInfo::PrivateMem
);
87 mHWBits
.set(AMDGPUDeviceInfo::PrivateMem
);
89 if (mSTM
->isOverride(AMDGPUDeviceInfo::BarrierDetect
)) {
90 mSWBits
.set(AMDGPUDeviceInfo::BarrierDetect
);
92 mSWBits
.set(AMDGPUDeviceInfo::ByteLDSOps
);
93 mSWBits
.set(AMDGPUDeviceInfo::LongOps
);
96 AMDGPUDeviceInfo::ExecutionMode
97 AMDGPUDevice::getExecutionMode(AMDGPUDeviceInfo::Caps Caps
) const
100 assert(!mSWBits
[Caps
] && "Cannot set both SW and HW caps");
101 return AMDGPUDeviceInfo::Hardware
;
105 assert(!mHWBits
[Caps
] && "Cannot set both SW and HW caps");
106 return AMDGPUDeviceInfo::Software
;
109 return AMDGPUDeviceInfo::Unsupported
;
113 bool AMDGPUDevice::isSupported(AMDGPUDeviceInfo::Caps Mode
) const
115 return getExecutionMode(Mode
) != AMDGPUDeviceInfo::Unsupported
;
118 bool AMDGPUDevice::usesHardware(AMDGPUDeviceInfo::Caps Mode
) const
120 return getExecutionMode(Mode
) == AMDGPUDeviceInfo::Hardware
;
123 bool AMDGPUDevice::usesSoftware(AMDGPUDeviceInfo::Caps Mode
) const
125 return getExecutionMode(Mode
) == AMDGPUDeviceInfo::Software
;
129 AMDGPUDevice::getDataLayout() const
131 return std::string("e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16"
132 "-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:32:32"
133 "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64"
134 "-v96:128:128-v128:128:128-v192:256:256-v256:256:256"
135 "-v512:512:512-v1024:1024:1024-v2048:2048:2048"