blob: c5213a04100578c44c9a30273df4016ad5bd03e2 [file] [log] [blame]
Tom Stellardf98f2ce2012-12-11 21:25:42 +00001//===-- AMDILEvergreenDevice.cpp - Device Info for Evergreen --------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8/// \file
9//==-----------------------------------------------------------------------===//
10#include "AMDILEvergreenDevice.h"
11
12using namespace llvm;
13
14AMDGPUEvergreenDevice::AMDGPUEvergreenDevice(AMDGPUSubtarget *ST)
15: AMDGPUDevice(ST) {
16 setCaps();
17 std::string name = ST->getDeviceName();
18 if (name == "cedar") {
19 DeviceFlag = OCL_DEVICE_CEDAR;
20 } else if (name == "redwood") {
21 DeviceFlag = OCL_DEVICE_REDWOOD;
22 } else if (name == "cypress") {
23 DeviceFlag = OCL_DEVICE_CYPRESS;
24 } else {
25 DeviceFlag = OCL_DEVICE_JUNIPER;
26 }
27}
28
29AMDGPUEvergreenDevice::~AMDGPUEvergreenDevice() {
30}
31
32size_t AMDGPUEvergreenDevice::getMaxLDSSize() const {
33 if (usesHardware(AMDGPUDeviceInfo::LocalMem)) {
34 return MAX_LDS_SIZE_800;
35 } else {
36 return 0;
37 }
38}
39size_t AMDGPUEvergreenDevice::getMaxGDSSize() const {
40 if (usesHardware(AMDGPUDeviceInfo::RegionMem)) {
41 return MAX_LDS_SIZE_800;
42 } else {
43 return 0;
44 }
45}
46uint32_t AMDGPUEvergreenDevice::getMaxNumUAVs() const {
47 return 12;
48}
49
50uint32_t AMDGPUEvergreenDevice::getResourceID(uint32_t id) const {
51 switch(id) {
52 default:
53 assert(0 && "ID type passed in is unknown!");
54 break;
55 case CONSTANT_ID:
56 case RAW_UAV_ID:
57 return GLOBAL_RETURN_RAW_UAV_ID;
58 case GLOBAL_ID:
59 case ARENA_UAV_ID:
60 return DEFAULT_ARENA_UAV_ID;
61 case LDS_ID:
62 if (usesHardware(AMDGPUDeviceInfo::LocalMem)) {
63 return DEFAULT_LDS_ID;
64 } else {
65 return DEFAULT_ARENA_UAV_ID;
66 }
67 case GDS_ID:
68 if (usesHardware(AMDGPUDeviceInfo::RegionMem)) {
69 return DEFAULT_GDS_ID;
70 } else {
71 return DEFAULT_ARENA_UAV_ID;
72 }
73 case SCRATCH_ID:
74 if (usesHardware(AMDGPUDeviceInfo::PrivateMem)) {
75 return DEFAULT_SCRATCH_ID;
76 } else {
77 return DEFAULT_ARENA_UAV_ID;
78 }
79 };
80 return 0;
81}
82
83size_t AMDGPUEvergreenDevice::getWavefrontSize() const {
84 return AMDGPUDevice::WavefrontSize;
85}
86
87uint32_t AMDGPUEvergreenDevice::getGeneration() const {
88 return AMDGPUDeviceInfo::HD5XXX;
89}
90
91void AMDGPUEvergreenDevice::setCaps() {
92 mSWBits.set(AMDGPUDeviceInfo::ArenaSegment);
93 mHWBits.set(AMDGPUDeviceInfo::ArenaUAV);
94 mHWBits.set(AMDGPUDeviceInfo::HW64BitDivMod);
95 mSWBits.reset(AMDGPUDeviceInfo::HW64BitDivMod);
96 mSWBits.set(AMDGPUDeviceInfo::Signed24BitOps);
97 if (mSTM->isOverride(AMDGPUDeviceInfo::ByteStores)) {
98 mHWBits.set(AMDGPUDeviceInfo::ByteStores);
99 }
100 if (mSTM->isOverride(AMDGPUDeviceInfo::Debug)) {
101 mSWBits.set(AMDGPUDeviceInfo::LocalMem);
102 mSWBits.set(AMDGPUDeviceInfo::RegionMem);
103 } else {
104 mHWBits.set(AMDGPUDeviceInfo::LocalMem);
105 mHWBits.set(AMDGPUDeviceInfo::RegionMem);
106 }
107 mHWBits.set(AMDGPUDeviceInfo::Images);
108 if (mSTM->isOverride(AMDGPUDeviceInfo::NoAlias)) {
109 mHWBits.set(AMDGPUDeviceInfo::NoAlias);
110 }
111 mHWBits.set(AMDGPUDeviceInfo::CachedMem);
112 if (mSTM->isOverride(AMDGPUDeviceInfo::MultiUAV)) {
113 mHWBits.set(AMDGPUDeviceInfo::MultiUAV);
114 }
115 mHWBits.set(AMDGPUDeviceInfo::ByteLDSOps);
116 mSWBits.reset(AMDGPUDeviceInfo::ByteLDSOps);
117 mHWBits.set(AMDGPUDeviceInfo::ArenaVectors);
118 mHWBits.set(AMDGPUDeviceInfo::LongOps);
119 mSWBits.reset(AMDGPUDeviceInfo::LongOps);
120 mHWBits.set(AMDGPUDeviceInfo::TmrReg);
121}
122
123AMDGPUCypressDevice::AMDGPUCypressDevice(AMDGPUSubtarget *ST)
124 : AMDGPUEvergreenDevice(ST) {
125 setCaps();
126}
127
128AMDGPUCypressDevice::~AMDGPUCypressDevice() {
129}
130
131void AMDGPUCypressDevice::setCaps() {
132 if (mSTM->isOverride(AMDGPUDeviceInfo::DoubleOps)) {
133 mHWBits.set(AMDGPUDeviceInfo::DoubleOps);
134 mHWBits.set(AMDGPUDeviceInfo::FMA);
135 }
136}
137
138
139AMDGPUCedarDevice::AMDGPUCedarDevice(AMDGPUSubtarget *ST)
140 : AMDGPUEvergreenDevice(ST) {
141 setCaps();
142}
143
144AMDGPUCedarDevice::~AMDGPUCedarDevice() {
145}
146
147void AMDGPUCedarDevice::setCaps() {
148 mSWBits.set(AMDGPUDeviceInfo::FMA);
149}
150
151size_t AMDGPUCedarDevice::getWavefrontSize() const {
152 return AMDGPUDevice::QuarterWavefrontSize;
153}
154
155AMDGPURedwoodDevice::AMDGPURedwoodDevice(AMDGPUSubtarget *ST)
156 : AMDGPUEvergreenDevice(ST) {
157 setCaps();
158}
159
160AMDGPURedwoodDevice::~AMDGPURedwoodDevice() {
161}
162
163void AMDGPURedwoodDevice::setCaps() {
164 mSWBits.set(AMDGPUDeviceInfo::FMA);
165}
166
167size_t AMDGPURedwoodDevice::getWavefrontSize() const {
168 return AMDGPUDevice::HalfWavefrontSize;
169}