1 //===-- AMDILEvergreenDevice.cpp - TODO: Add brief description -------===//
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"
13 #include "AMDILIOExpansion.h"
17 AMDILEvergreenDevice::AMDILEvergreenDevice(AMDILSubtarget
*ST
)
20 std::string name
= ST
->getDeviceName();
21 if (name
== "cedar") {
22 mDeviceFlag
= OCL_DEVICE_CEDAR
;
23 } else if (name
== "redwood") {
24 mDeviceFlag
= OCL_DEVICE_REDWOOD
;
25 } else if (name
== "cypress") {
26 mDeviceFlag
= OCL_DEVICE_CYPRESS
;
28 mDeviceFlag
= OCL_DEVICE_JUNIPER
;
32 AMDILEvergreenDevice::~AMDILEvergreenDevice() {
35 size_t AMDILEvergreenDevice::getMaxLDSSize() const {
36 if (usesHardware(AMDILDeviceInfo::LocalMem
)) {
37 return MAX_LDS_SIZE_800
;
42 size_t AMDILEvergreenDevice::getMaxGDSSize() const {
43 if (usesHardware(AMDILDeviceInfo::RegionMem
)) {
44 return MAX_LDS_SIZE_800
;
49 uint32_t AMDILEvergreenDevice::getMaxNumUAVs() const {
53 uint32_t AMDILEvergreenDevice::getResourceID(uint32_t id
) const {
56 assert(0 && "ID type passed in is unknown!");
60 if (mSTM
->calVersion() >= CAL_VERSION_GLOBAL_RETURN_BUFFER
) {
61 return GLOBAL_RETURN_RAW_UAV_ID
;
63 return DEFAULT_RAW_UAV_ID
;
67 return DEFAULT_ARENA_UAV_ID
;
69 if (usesHardware(AMDILDeviceInfo::LocalMem
)) {
70 return DEFAULT_LDS_ID
;
72 return DEFAULT_ARENA_UAV_ID
;
75 if (usesHardware(AMDILDeviceInfo::RegionMem
)) {
76 return DEFAULT_GDS_ID
;
78 return DEFAULT_ARENA_UAV_ID
;
81 if (usesHardware(AMDILDeviceInfo::PrivateMem
)) {
82 return DEFAULT_SCRATCH_ID
;
84 return DEFAULT_ARENA_UAV_ID
;
90 size_t AMDILEvergreenDevice::getWavefrontSize() const {
91 return AMDILDevice::WavefrontSize
;
94 uint32_t AMDILEvergreenDevice::getGeneration() const {
95 return AMDILDeviceInfo::HD5XXX
;
98 void AMDILEvergreenDevice::setCaps() {
99 mSWBits
.set(AMDILDeviceInfo::ArenaSegment
);
100 mHWBits
.set(AMDILDeviceInfo::ArenaUAV
);
101 if (mSTM
->calVersion() >= CAL_VERSION_SC_140
) {
102 mHWBits
.set(AMDILDeviceInfo::HW64BitDivMod
);
103 mSWBits
.reset(AMDILDeviceInfo::HW64BitDivMod
);
105 mSWBits
.set(AMDILDeviceInfo::Signed24BitOps
);
106 if (mSTM
->isOverride(AMDILDeviceInfo::ByteStores
)) {
107 mHWBits
.set(AMDILDeviceInfo::ByteStores
);
109 if (mSTM
->isOverride(AMDILDeviceInfo::Debug
)) {
110 mSWBits
.set(AMDILDeviceInfo::LocalMem
);
111 mSWBits
.set(AMDILDeviceInfo::RegionMem
);
113 mHWBits
.set(AMDILDeviceInfo::LocalMem
);
114 mHWBits
.set(AMDILDeviceInfo::RegionMem
);
116 mHWBits
.set(AMDILDeviceInfo::Images
);
117 if (mSTM
->isOverride(AMDILDeviceInfo::NoAlias
)) {
118 mHWBits
.set(AMDILDeviceInfo::NoAlias
);
120 if (mSTM
->calVersion() > CAL_VERSION_GLOBAL_RETURN_BUFFER
) {
121 mHWBits
.set(AMDILDeviceInfo::CachedMem
);
123 if (mSTM
->isOverride(AMDILDeviceInfo::MultiUAV
)) {
124 mHWBits
.set(AMDILDeviceInfo::MultiUAV
);
126 if (mSTM
->calVersion() > CAL_VERSION_SC_136
) {
127 mHWBits
.set(AMDILDeviceInfo::ByteLDSOps
);
128 mSWBits
.reset(AMDILDeviceInfo::ByteLDSOps
);
129 mHWBits
.set(AMDILDeviceInfo::ArenaVectors
);
131 mSWBits
.set(AMDILDeviceInfo::ArenaVectors
);
133 if (mSTM
->calVersion() > CAL_VERSION_SC_137
) {
134 mHWBits
.set(AMDILDeviceInfo::LongOps
);
135 mSWBits
.reset(AMDILDeviceInfo::LongOps
);
137 mHWBits
.set(AMDILDeviceInfo::TmrReg
);
140 AMDILEvergreenDevice::getIOExpansion(
141 TargetMachine
& TM AMDIL_OPT_LEVEL_DECL
) const
143 return new AMDILEGIOExpansion(TM AMDIL_OPT_LEVEL_VAR
);
147 AMDILEvergreenDevice::getAsmPrinter(TargetMachine
& TM
, MCStreamer
&Streamer
) const
150 return new AMDILEGAsmPrinter(TM
, Streamer
);
156 AMDILCypressDevice::AMDILCypressDevice(AMDILSubtarget
*ST
)
157 : AMDILEvergreenDevice(ST
) {
161 AMDILCypressDevice::~AMDILCypressDevice() {
164 void AMDILCypressDevice::setCaps() {
165 if (mSTM
->isOverride(AMDILDeviceInfo::DoubleOps
)) {
166 mHWBits
.set(AMDILDeviceInfo::DoubleOps
);
167 mHWBits
.set(AMDILDeviceInfo::FMA
);
172 AMDILCedarDevice::AMDILCedarDevice(AMDILSubtarget
*ST
)
173 : AMDILEvergreenDevice(ST
) {
177 AMDILCedarDevice::~AMDILCedarDevice() {
180 void AMDILCedarDevice::setCaps() {
181 mSWBits
.set(AMDILDeviceInfo::FMA
);
184 size_t AMDILCedarDevice::getWavefrontSize() const {
185 return AMDILDevice::QuarterWavefrontSize
;
188 AMDILRedwoodDevice::AMDILRedwoodDevice(AMDILSubtarget
*ST
)
189 : AMDILEvergreenDevice(ST
) {
193 AMDILRedwoodDevice::~AMDILRedwoodDevice()
197 void AMDILRedwoodDevice::setCaps() {
198 mSWBits
.set(AMDILDeviceInfo::FMA
);
201 size_t AMDILRedwoodDevice::getWavefrontSize() const {
202 return AMDILDevice::HalfWavefrontSize
;