3f2f8211f12f129f24f63ebd8fe598968e20b0b3
[oota-llvm.git] / lib / Target / AMDGPU / AMDIL7XXDevice.cpp
1 //===-- AMDIL7XXDevice.cpp - Device Info for 7XX GPUs ---------------------===//
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 "AMDIL7XXDevice.h"
10 #include "AMDILDevice.h"
11
12 using namespace llvm;
13
14 AMDIL7XXDevice::AMDIL7XXDevice(AMDILSubtarget *ST) : AMDILDevice(ST)
15 {
16   setCaps();
17   std::string name = mSTM->getDeviceName();
18   if (name == "rv710") {
19     mDeviceFlag = OCL_DEVICE_RV710;
20   } else if (name == "rv730") {
21     mDeviceFlag = OCL_DEVICE_RV730;
22   } else {
23     mDeviceFlag = OCL_DEVICE_RV770;
24   }
25 }
26
27 AMDIL7XXDevice::~AMDIL7XXDevice()
28 {
29 }
30
31 void AMDIL7XXDevice::setCaps()
32 {
33   mSWBits.set(AMDILDeviceInfo::LocalMem);
34 }
35
36 size_t AMDIL7XXDevice::getMaxLDSSize() const
37 {
38   if (usesHardware(AMDILDeviceInfo::LocalMem)) {
39     return MAX_LDS_SIZE_700;
40   }
41   return 0;
42 }
43
44 size_t AMDIL7XXDevice::getWavefrontSize() const
45 {
46   return AMDILDevice::HalfWavefrontSize;
47 }
48
49 uint32_t AMDIL7XXDevice::getGeneration() const
50 {
51   return AMDILDeviceInfo::HD4XXX;
52 }
53
54 uint32_t AMDIL7XXDevice::getResourceID(uint32_t DeviceID) const
55 {
56   switch (DeviceID) {
57   default:
58     assert(0 && "ID type passed in is unknown!");
59     break;
60   case GLOBAL_ID:
61   case CONSTANT_ID:
62   case RAW_UAV_ID:
63   case ARENA_UAV_ID:
64     break;
65   case LDS_ID:
66     if (usesHardware(AMDILDeviceInfo::LocalMem)) {
67       return DEFAULT_LDS_ID;
68     }
69     break;
70   case SCRATCH_ID:
71     if (usesHardware(AMDILDeviceInfo::PrivateMem)) {
72       return DEFAULT_SCRATCH_ID;
73     }
74     break;
75   case GDS_ID:
76     assert(0 && "GDS UAV ID is not supported on this chip");
77     if (usesHardware(AMDILDeviceInfo::RegionMem)) {
78       return DEFAULT_GDS_ID;
79     }
80     break;
81   };
82
83   return 0;
84 }
85
86 uint32_t AMDIL7XXDevice::getMaxNumUAVs() const
87 {
88   return 1;
89 }
90
91 AMDIL770Device::AMDIL770Device(AMDILSubtarget *ST): AMDIL7XXDevice(ST)
92 {
93   setCaps();
94 }
95
96 AMDIL770Device::~AMDIL770Device()
97 {
98 }
99
100 void AMDIL770Device::setCaps()
101 {
102   if (mSTM->isOverride(AMDILDeviceInfo::DoubleOps)) {
103     mSWBits.set(AMDILDeviceInfo::FMA);
104     mHWBits.set(AMDILDeviceInfo::DoubleOps);
105   }
106   mSWBits.set(AMDILDeviceInfo::BarrierDetect);
107   mHWBits.reset(AMDILDeviceInfo::LongOps);
108   mSWBits.set(AMDILDeviceInfo::LongOps);
109   mSWBits.set(AMDILDeviceInfo::LocalMem);
110 }
111
112 size_t AMDIL770Device::getWavefrontSize() const
113 {
114   return AMDILDevice::WavefrontSize;
115 }
116
117 AMDIL710Device::AMDIL710Device(AMDILSubtarget *ST) : AMDIL7XXDevice(ST)
118 {
119 }
120
121 AMDIL710Device::~AMDIL710Device()
122 {
123 }
124
125 size_t AMDIL710Device::getWavefrontSize() const
126 {
127   return AMDILDevice::QuarterWavefrontSize;
128 }