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 "AMDILSubtarget.h"
13 // Default implementation for all of the classes.
14 AMDILDevice::AMDILDevice(AMDILSubtarget
*ST
) : mSTM(ST
)
16 mHWBits
.resize(AMDILDeviceInfo::MaxNumberCapabilities
);
17 mSWBits
.resize(AMDILDeviceInfo::MaxNumberCapabilities
);
19 mDeviceFlag
= OCL_DEVICE_ALL
;
22 AMDILDevice::~AMDILDevice()
28 size_t AMDILDevice::getMaxGDSSize() const
34 AMDILDevice::getDeviceFlag() const
39 size_t AMDILDevice::getMaxNumCBs() const
41 if (usesHardware(AMDILDeviceInfo::ConstantMem
)) {
48 size_t AMDILDevice::getMaxCBSize() const
50 if (usesHardware(AMDILDeviceInfo::ConstantMem
)) {
57 size_t AMDILDevice::getMaxScratchSize() const
62 uint32_t AMDILDevice::getStackAlignment() const
67 void AMDILDevice::setCaps()
69 mSWBits
.set(AMDILDeviceInfo::HalfOps
);
70 mSWBits
.set(AMDILDeviceInfo::ByteOps
);
71 mSWBits
.set(AMDILDeviceInfo::ShortOps
);
72 mSWBits
.set(AMDILDeviceInfo::HW64BitDivMod
);
73 if (mSTM
->isOverride(AMDILDeviceInfo::NoInline
)) {
74 mSWBits
.set(AMDILDeviceInfo::NoInline
);
76 if (mSTM
->isOverride(AMDILDeviceInfo::MacroDB
)) {
77 mSWBits
.set(AMDILDeviceInfo::MacroDB
);
79 if (mSTM
->isOverride(AMDILDeviceInfo::Debug
)) {
80 mSWBits
.set(AMDILDeviceInfo::ConstantMem
);
82 mHWBits
.set(AMDILDeviceInfo::ConstantMem
);
84 if (mSTM
->isOverride(AMDILDeviceInfo::Debug
)) {
85 mSWBits
.set(AMDILDeviceInfo::PrivateMem
);
87 mHWBits
.set(AMDILDeviceInfo::PrivateMem
);
89 if (mSTM
->isOverride(AMDILDeviceInfo::BarrierDetect
)) {
90 mSWBits
.set(AMDILDeviceInfo::BarrierDetect
);
92 mSWBits
.set(AMDILDeviceInfo::ByteLDSOps
);
93 mSWBits
.set(AMDILDeviceInfo::LongOps
);
96 AMDILDeviceInfo::ExecutionMode
97 AMDILDevice::getExecutionMode(AMDILDeviceInfo::Caps Caps
) const
100 assert(!mSWBits
[Caps
] && "Cannot set both SW and HW caps");
101 return AMDILDeviceInfo::Hardware
;
105 assert(!mHWBits
[Caps
] && "Cannot set both SW and HW caps");
106 return AMDILDeviceInfo::Software
;
109 return AMDILDeviceInfo::Unsupported
;
113 bool AMDILDevice::isSupported(AMDILDeviceInfo::Caps Mode
) const
115 return getExecutionMode(Mode
) != AMDILDeviceInfo::Unsupported
;
118 bool AMDILDevice::usesHardware(AMDILDeviceInfo::Caps Mode
) const
120 return getExecutionMode(Mode
) == AMDILDeviceInfo::Hardware
;
123 bool AMDILDevice::usesSoftware(AMDILDeviceInfo::Caps Mode
) const
125 return getExecutionMode(Mode
) == AMDILDeviceInfo::Software
;
129 AMDILDevice::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"