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 AMDGPUEvergreenDevice::AMDGPUEvergreenDevice(AMDGPUSubtarget
*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 AMDGPUEvergreenDevice::~AMDGPUEvergreenDevice() {
34 size_t AMDGPUEvergreenDevice::getMaxLDSSize() const {
35 if (usesHardware(AMDGPUDeviceInfo::LocalMem
)) {
36 return MAX_LDS_SIZE_800
;
41 size_t AMDGPUEvergreenDevice::getMaxGDSSize() const {
42 if (usesHardware(AMDGPUDeviceInfo::RegionMem
)) {
43 return MAX_LDS_SIZE_800
;
48 uint32_t AMDGPUEvergreenDevice::getMaxNumUAVs() const {
52 uint32_t AMDGPUEvergreenDevice::getResourceID(uint32_t id
) const {
55 assert(0 && "ID type passed in is unknown!");
59 return GLOBAL_RETURN_RAW_UAV_ID
;
62 return DEFAULT_ARENA_UAV_ID
;
64 if (usesHardware(AMDGPUDeviceInfo::LocalMem
)) {
65 return DEFAULT_LDS_ID
;
67 return DEFAULT_ARENA_UAV_ID
;
70 if (usesHardware(AMDGPUDeviceInfo::RegionMem
)) {
71 return DEFAULT_GDS_ID
;
73 return DEFAULT_ARENA_UAV_ID
;
76 if (usesHardware(AMDGPUDeviceInfo::PrivateMem
)) {
77 return DEFAULT_SCRATCH_ID
;
79 return DEFAULT_ARENA_UAV_ID
;
85 size_t AMDGPUEvergreenDevice::getWavefrontSize() const {
86 return AMDGPUDevice::WavefrontSize
;
89 uint32_t AMDGPUEvergreenDevice::getGeneration() const {
90 return AMDGPUDeviceInfo::HD5XXX
;
93 void AMDGPUEvergreenDevice::setCaps() {
94 mSWBits
.set(AMDGPUDeviceInfo::ArenaSegment
);
95 mHWBits
.set(AMDGPUDeviceInfo::ArenaUAV
);
96 mHWBits
.set(AMDGPUDeviceInfo::HW64BitDivMod
);
97 mSWBits
.reset(AMDGPUDeviceInfo::HW64BitDivMod
);
98 mSWBits
.set(AMDGPUDeviceInfo::Signed24BitOps
);
99 if (mSTM
->isOverride(AMDGPUDeviceInfo::ByteStores
)) {
100 mHWBits
.set(AMDGPUDeviceInfo::ByteStores
);
102 if (mSTM
->isOverride(AMDGPUDeviceInfo::Debug
)) {
103 mSWBits
.set(AMDGPUDeviceInfo::LocalMem
);
104 mSWBits
.set(AMDGPUDeviceInfo::RegionMem
);
106 mHWBits
.set(AMDGPUDeviceInfo::LocalMem
);
107 mHWBits
.set(AMDGPUDeviceInfo::RegionMem
);
109 mHWBits
.set(AMDGPUDeviceInfo::Images
);
110 if (mSTM
->isOverride(AMDGPUDeviceInfo::NoAlias
)) {
111 mHWBits
.set(AMDGPUDeviceInfo::NoAlias
);
113 mHWBits
.set(AMDGPUDeviceInfo::CachedMem
);
114 if (mSTM
->isOverride(AMDGPUDeviceInfo::MultiUAV
)) {
115 mHWBits
.set(AMDGPUDeviceInfo::MultiUAV
);
117 mHWBits
.set(AMDGPUDeviceInfo::ByteLDSOps
);
118 mSWBits
.reset(AMDGPUDeviceInfo::ByteLDSOps
);
119 mHWBits
.set(AMDGPUDeviceInfo::ArenaVectors
);
120 mHWBits
.set(AMDGPUDeviceInfo::LongOps
);
121 mSWBits
.reset(AMDGPUDeviceInfo::LongOps
);
122 mHWBits
.set(AMDGPUDeviceInfo::TmrReg
);
126 AMDGPUEvergreenDevice::getAsmPrinter(TargetMachine
& TM
, MCStreamer
&Streamer
) const
129 return new AMDGPUEGAsmPrinter(TM
, Streamer
);
135 AMDGPUCypressDevice::AMDGPUCypressDevice(AMDGPUSubtarget
*ST
)
136 : AMDGPUEvergreenDevice(ST
) {
140 AMDGPUCypressDevice::~AMDGPUCypressDevice() {
143 void AMDGPUCypressDevice::setCaps() {
144 if (mSTM
->isOverride(AMDGPUDeviceInfo::DoubleOps
)) {
145 mHWBits
.set(AMDGPUDeviceInfo::DoubleOps
);
146 mHWBits
.set(AMDGPUDeviceInfo::FMA
);
151 AMDGPUCedarDevice::AMDGPUCedarDevice(AMDGPUSubtarget
*ST
)
152 : AMDGPUEvergreenDevice(ST
) {
156 AMDGPUCedarDevice::~AMDGPUCedarDevice() {
159 void AMDGPUCedarDevice::setCaps() {
160 mSWBits
.set(AMDGPUDeviceInfo::FMA
);
163 size_t AMDGPUCedarDevice::getWavefrontSize() const {
164 return AMDGPUDevice::QuarterWavefrontSize
;
167 AMDGPURedwoodDevice::AMDGPURedwoodDevice(AMDGPUSubtarget
*ST
)
168 : AMDGPUEvergreenDevice(ST
) {
172 AMDGPURedwoodDevice::~AMDGPURedwoodDevice()
176 void AMDGPURedwoodDevice::setCaps() {
177 mSWBits
.set(AMDGPUDeviceInfo::FMA
);
180 size_t AMDGPURedwoodDevice::getWavefrontSize() const {
181 return AMDGPUDevice::HalfWavefrontSize
;