radeon/llvm: Move lowering of SETCC node to R600ISelLowering
[mesa.git] / src / gallium / drivers / radeon / AMDILEvergreenDevice.cpp
1 //===-- 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 //==-----------------------------------------------------------------------===//
9 #include "AMDILEvergreenDevice.h"
10 #ifdef UPSTREAM_LLVM
11 #include "AMDILEGAsmPrinter.h"
12 #endif
13
14 using namespace llvm;
15
16 AMDILEvergreenDevice::AMDILEvergreenDevice(AMDILSubtarget *ST)
17 : AMDILDevice(ST) {
18 setCaps();
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;
26 } else {
27 mDeviceFlag = OCL_DEVICE_JUNIPER;
28 }
29 }
30
31 AMDILEvergreenDevice::~AMDILEvergreenDevice() {
32 }
33
34 size_t AMDILEvergreenDevice::getMaxLDSSize() const {
35 if (usesHardware(AMDILDeviceInfo::LocalMem)) {
36 return MAX_LDS_SIZE_800;
37 } else {
38 return 0;
39 }
40 }
41 size_t AMDILEvergreenDevice::getMaxGDSSize() const {
42 if (usesHardware(AMDILDeviceInfo::RegionMem)) {
43 return MAX_LDS_SIZE_800;
44 } else {
45 return 0;
46 }
47 }
48 uint32_t AMDILEvergreenDevice::getMaxNumUAVs() const {
49 return 12;
50 }
51
52 uint32_t AMDILEvergreenDevice::getResourceID(uint32_t id) const {
53 switch(id) {
54 default:
55 assert(0 && "ID type passed in is unknown!");
56 break;
57 case CONSTANT_ID:
58 case RAW_UAV_ID:
59 if (mSTM->calVersion() >= CAL_VERSION_GLOBAL_RETURN_BUFFER) {
60 return GLOBAL_RETURN_RAW_UAV_ID;
61 } else {
62 return DEFAULT_RAW_UAV_ID;
63 }
64 case GLOBAL_ID:
65 case ARENA_UAV_ID:
66 return DEFAULT_ARENA_UAV_ID;
67 case LDS_ID:
68 if (usesHardware(AMDILDeviceInfo::LocalMem)) {
69 return DEFAULT_LDS_ID;
70 } else {
71 return DEFAULT_ARENA_UAV_ID;
72 }
73 case GDS_ID:
74 if (usesHardware(AMDILDeviceInfo::RegionMem)) {
75 return DEFAULT_GDS_ID;
76 } else {
77 return DEFAULT_ARENA_UAV_ID;
78 }
79 case SCRATCH_ID:
80 if (usesHardware(AMDILDeviceInfo::PrivateMem)) {
81 return DEFAULT_SCRATCH_ID;
82 } else {
83 return DEFAULT_ARENA_UAV_ID;
84 }
85 };
86 return 0;
87 }
88
89 size_t AMDILEvergreenDevice::getWavefrontSize() const {
90 return AMDILDevice::WavefrontSize;
91 }
92
93 uint32_t AMDILEvergreenDevice::getGeneration() const {
94 return AMDILDeviceInfo::HD5XXX;
95 }
96
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);
103 }
104 mSWBits.set(AMDILDeviceInfo::Signed24BitOps);
105 if (mSTM->isOverride(AMDILDeviceInfo::ByteStores)) {
106 mHWBits.set(AMDILDeviceInfo::ByteStores);
107 }
108 if (mSTM->isOverride(AMDILDeviceInfo::Debug)) {
109 mSWBits.set(AMDILDeviceInfo::LocalMem);
110 mSWBits.set(AMDILDeviceInfo::RegionMem);
111 } else {
112 mHWBits.set(AMDILDeviceInfo::LocalMem);
113 mHWBits.set(AMDILDeviceInfo::RegionMem);
114 }
115 mHWBits.set(AMDILDeviceInfo::Images);
116 if (mSTM->isOverride(AMDILDeviceInfo::NoAlias)) {
117 mHWBits.set(AMDILDeviceInfo::NoAlias);
118 }
119 if (mSTM->calVersion() > CAL_VERSION_GLOBAL_RETURN_BUFFER) {
120 mHWBits.set(AMDILDeviceInfo::CachedMem);
121 }
122 if (mSTM->isOverride(AMDILDeviceInfo::MultiUAV)) {
123 mHWBits.set(AMDILDeviceInfo::MultiUAV);
124 }
125 if (mSTM->calVersion() > CAL_VERSION_SC_136) {
126 mHWBits.set(AMDILDeviceInfo::ByteLDSOps);
127 mSWBits.reset(AMDILDeviceInfo::ByteLDSOps);
128 mHWBits.set(AMDILDeviceInfo::ArenaVectors);
129 } else {
130 mSWBits.set(AMDILDeviceInfo::ArenaVectors);
131 }
132 if (mSTM->calVersion() > CAL_VERSION_SC_137) {
133 mHWBits.set(AMDILDeviceInfo::LongOps);
134 mSWBits.reset(AMDILDeviceInfo::LongOps);
135 }
136 mHWBits.set(AMDILDeviceInfo::TmrReg);
137 }
138
139 AsmPrinter*
140 AMDILEvergreenDevice::getAsmPrinter(TargetMachine& TM, MCStreamer &Streamer) const
141 {
142 #ifdef UPSTREAM_LLVM
143 return new AMDILEGAsmPrinter(TM, Streamer);
144 #else
145 return NULL;
146 #endif
147 }
148
149 AMDILCypressDevice::AMDILCypressDevice(AMDILSubtarget *ST)
150 : AMDILEvergreenDevice(ST) {
151 setCaps();
152 }
153
154 AMDILCypressDevice::~AMDILCypressDevice() {
155 }
156
157 void AMDILCypressDevice::setCaps() {
158 if (mSTM->isOverride(AMDILDeviceInfo::DoubleOps)) {
159 mHWBits.set(AMDILDeviceInfo::DoubleOps);
160 mHWBits.set(AMDILDeviceInfo::FMA);
161 }
162 }
163
164
165 AMDILCedarDevice::AMDILCedarDevice(AMDILSubtarget *ST)
166 : AMDILEvergreenDevice(ST) {
167 setCaps();
168 }
169
170 AMDILCedarDevice::~AMDILCedarDevice() {
171 }
172
173 void AMDILCedarDevice::setCaps() {
174 mSWBits.set(AMDILDeviceInfo::FMA);
175 }
176
177 size_t AMDILCedarDevice::getWavefrontSize() const {
178 return AMDILDevice::QuarterWavefrontSize;
179 }
180
181 AMDILRedwoodDevice::AMDILRedwoodDevice(AMDILSubtarget *ST)
182 : AMDILEvergreenDevice(ST) {
183 setCaps();
184 }
185
186 AMDILRedwoodDevice::~AMDILRedwoodDevice()
187 {
188 }
189
190 void AMDILRedwoodDevice::setCaps() {
191 mSWBits.set(AMDILDeviceInfo::FMA);
192 }
193
194 size_t AMDILRedwoodDevice::getWavefrontSize() const {
195 return AMDILDevice::HalfWavefrontSize;
196 }