1 //===-- AMDILEvergreenDevice.cpp - Device Info for Evergreen --------------===//
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 "AMDILEvergreenDevice.h"
11 #include "AMDILEGAsmPrinter.h"
16 AMDILEvergreenDevice::AMDILEvergreenDevice(AMDILSubtarget
*ST
)
19 std::string name
= ST
->getDeviceName();
20 if (name
== "cedar") {
21 mDeviceFlag
= OCL_DEVICE_CEDAR
;
22 } else if (name
== "redwood") {
23 mDeviceFlag
= OCL_DEVICE_REDWOOD
;
24 } else if (name
== "cypress") {
25 mDeviceFlag
= OCL_DEVICE_CYPRESS
;
27 mDeviceFlag
= OCL_DEVICE_JUNIPER
;
31 AMDILEvergreenDevice::~AMDILEvergreenDevice() {
34 size_t AMDILEvergreenDevice::getMaxLDSSize() const {
35 if (usesHardware(AMDILDeviceInfo::LocalMem
)) {
36 return MAX_LDS_SIZE_800
;
41 size_t AMDILEvergreenDevice::getMaxGDSSize() const {
42 if (usesHardware(AMDILDeviceInfo::RegionMem
)) {
43 return MAX_LDS_SIZE_800
;
48 uint32_t AMDILEvergreenDevice::getMaxNumUAVs() const {
52 uint32_t AMDILEvergreenDevice::getResourceID(uint32_t id
) const {
55 assert(0 && "ID type passed in is unknown!");
59 if (mSTM
->calVersion() >= CAL_VERSION_GLOBAL_RETURN_BUFFER
) {
60 return GLOBAL_RETURN_RAW_UAV_ID
;
62 return DEFAULT_RAW_UAV_ID
;
66 return DEFAULT_ARENA_UAV_ID
;
68 if (usesHardware(AMDILDeviceInfo::LocalMem
)) {
69 return DEFAULT_LDS_ID
;
71 return DEFAULT_ARENA_UAV_ID
;
74 if (usesHardware(AMDILDeviceInfo::RegionMem
)) {
75 return DEFAULT_GDS_ID
;
77 return DEFAULT_ARENA_UAV_ID
;
80 if (usesHardware(AMDILDeviceInfo::PrivateMem
)) {
81 return DEFAULT_SCRATCH_ID
;
83 return DEFAULT_ARENA_UAV_ID
;
89 size_t AMDILEvergreenDevice::getWavefrontSize() const {
90 return AMDILDevice::WavefrontSize
;
93 uint32_t AMDILEvergreenDevice::getGeneration() const {
94 return AMDILDeviceInfo::HD5XXX
;
97 void AMDILEvergreenDevice::setCaps() {
98 mSWBits
.set(AMDILDeviceInfo::ArenaSegment
);
99 mHWBits
.set(AMDILDeviceInfo::ArenaUAV
);
100 if (mSTM
->calVersion() >= CAL_VERSION_SC_140
) {
101 mHWBits
.set(AMDILDeviceInfo::HW64BitDivMod
);
102 mSWBits
.reset(AMDILDeviceInfo::HW64BitDivMod
);
104 mSWBits
.set(AMDILDeviceInfo::Signed24BitOps
);
105 if (mSTM
->isOverride(AMDILDeviceInfo::ByteStores
)) {
106 mHWBits
.set(AMDILDeviceInfo::ByteStores
);
108 if (mSTM
->isOverride(AMDILDeviceInfo::Debug
)) {
109 mSWBits
.set(AMDILDeviceInfo::LocalMem
);
110 mSWBits
.set(AMDILDeviceInfo::RegionMem
);
112 mHWBits
.set(AMDILDeviceInfo::LocalMem
);
113 mHWBits
.set(AMDILDeviceInfo::RegionMem
);
115 mHWBits
.set(AMDILDeviceInfo::Images
);
116 if (mSTM
->isOverride(AMDILDeviceInfo::NoAlias
)) {
117 mHWBits
.set(AMDILDeviceInfo::NoAlias
);
119 if (mSTM
->calVersion() > CAL_VERSION_GLOBAL_RETURN_BUFFER
) {
120 mHWBits
.set(AMDILDeviceInfo::CachedMem
);
122 if (mSTM
->isOverride(AMDILDeviceInfo::MultiUAV
)) {
123 mHWBits
.set(AMDILDeviceInfo::MultiUAV
);
125 if (mSTM
->calVersion() > CAL_VERSION_SC_136
) {
126 mHWBits
.set(AMDILDeviceInfo::ByteLDSOps
);
127 mSWBits
.reset(AMDILDeviceInfo::ByteLDSOps
);
128 mHWBits
.set(AMDILDeviceInfo::ArenaVectors
);
130 mSWBits
.set(AMDILDeviceInfo::ArenaVectors
);
132 if (mSTM
->calVersion() > CAL_VERSION_SC_137
) {
133 mHWBits
.set(AMDILDeviceInfo::LongOps
);
134 mSWBits
.reset(AMDILDeviceInfo::LongOps
);
136 mHWBits
.set(AMDILDeviceInfo::TmrReg
);
140 AMDILEvergreenDevice::getAsmPrinter(TargetMachine
& TM
, MCStreamer
&Streamer
) const
143 return new AMDILEGAsmPrinter(TM
, Streamer
);
149 AMDILCypressDevice::AMDILCypressDevice(AMDILSubtarget
*ST
)
150 : AMDILEvergreenDevice(ST
) {
154 AMDILCypressDevice::~AMDILCypressDevice() {
157 void AMDILCypressDevice::setCaps() {
158 if (mSTM
->isOverride(AMDILDeviceInfo::DoubleOps
)) {
159 mHWBits
.set(AMDILDeviceInfo::DoubleOps
);
160 mHWBits
.set(AMDILDeviceInfo::FMA
);
165 AMDILCedarDevice::AMDILCedarDevice(AMDILSubtarget
*ST
)
166 : AMDILEvergreenDevice(ST
) {
170 AMDILCedarDevice::~AMDILCedarDevice() {
173 void AMDILCedarDevice::setCaps() {
174 mSWBits
.set(AMDILDeviceInfo::FMA
);
177 size_t AMDILCedarDevice::getWavefrontSize() const {
178 return AMDILDevice::QuarterWavefrontSize
;
181 AMDILRedwoodDevice::AMDILRedwoodDevice(AMDILSubtarget
*ST
)
182 : AMDILEvergreenDevice(ST
) {
186 AMDILRedwoodDevice::~AMDILRedwoodDevice()
190 void AMDILRedwoodDevice::setCaps() {
191 mSWBits
.set(AMDILDeviceInfo::FMA
);
194 size_t AMDILRedwoodDevice::getWavefrontSize() const {
195 return AMDILDevice::HalfWavefrontSize
;