]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/lib/Target/R600/AMDIL7XXDevice.cpp
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / lib / Target / R600 / 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 // \file
9 //==-----------------------------------------------------------------------===//
10 #include "AMDIL7XXDevice.h"
11 #include "AMDGPUSubtarget.h"
12 #include "AMDILDevice.h"
13
14 using namespace llvm;
15
16 AMDGPU7XXDevice::AMDGPU7XXDevice(AMDGPUSubtarget *ST) : AMDGPUDevice(ST) {
17   setCaps();
18   std::string name = mSTM->getDeviceName();
19   if (name == "rv710") {
20     DeviceFlag = OCL_DEVICE_RV710;
21   } else if (name == "rv730") {
22     DeviceFlag = OCL_DEVICE_RV730;
23   } else {
24     DeviceFlag = OCL_DEVICE_RV770;
25   }
26 }
27
28 AMDGPU7XXDevice::~AMDGPU7XXDevice() {
29 }
30
31 void AMDGPU7XXDevice::setCaps() {
32   mSWBits.set(AMDGPUDeviceInfo::LocalMem);
33 }
34
35 size_t AMDGPU7XXDevice::getMaxLDSSize() const {
36   if (usesHardware(AMDGPUDeviceInfo::LocalMem)) {
37     return MAX_LDS_SIZE_700;
38   }
39   return 0;
40 }
41
42 size_t AMDGPU7XXDevice::getWavefrontSize() const {
43   return AMDGPUDevice::HalfWavefrontSize;
44 }
45
46 uint32_t AMDGPU7XXDevice::getGeneration() const {
47   return AMDGPUDeviceInfo::HD4XXX;
48 }
49
50 uint32_t AMDGPU7XXDevice::getResourceID(uint32_t DeviceID) const {
51   switch (DeviceID) {
52   default:
53     assert(0 && "ID type passed in is unknown!");
54     break;
55   case GLOBAL_ID:
56   case CONSTANT_ID:
57   case RAW_UAV_ID:
58   case ARENA_UAV_ID:
59     break;
60   case LDS_ID:
61     if (usesHardware(AMDGPUDeviceInfo::LocalMem)) {
62       return DEFAULT_LDS_ID;
63     }
64     break;
65   case SCRATCH_ID:
66     if (usesHardware(AMDGPUDeviceInfo::PrivateMem)) {
67       return DEFAULT_SCRATCH_ID;
68     }
69     break;
70   case GDS_ID:
71     assert(0 && "GDS UAV ID is not supported on this chip");
72     if (usesHardware(AMDGPUDeviceInfo::RegionMem)) {
73       return DEFAULT_GDS_ID;
74     }
75     break;
76   };
77
78   return 0;
79 }
80
81 uint32_t AMDGPU7XXDevice::getMaxNumUAVs() const {
82   return 1;
83 }
84
85 AMDGPU770Device::AMDGPU770Device(AMDGPUSubtarget *ST): AMDGPU7XXDevice(ST) {
86   setCaps();
87 }
88
89 AMDGPU770Device::~AMDGPU770Device() {
90 }
91
92 void AMDGPU770Device::setCaps() {
93   if (mSTM->isOverride(AMDGPUDeviceInfo::DoubleOps)) {
94     mSWBits.set(AMDGPUDeviceInfo::FMA);
95     mHWBits.set(AMDGPUDeviceInfo::DoubleOps);
96   }
97   mSWBits.set(AMDGPUDeviceInfo::BarrierDetect);
98   mHWBits.reset(AMDGPUDeviceInfo::LongOps);
99   mSWBits.set(AMDGPUDeviceInfo::LongOps);
100   mSWBits.set(AMDGPUDeviceInfo::LocalMem);
101 }
102
103 size_t AMDGPU770Device::getWavefrontSize() const {
104   return AMDGPUDevice::WavefrontSize;
105 }
106
107 AMDGPU710Device::AMDGPU710Device(AMDGPUSubtarget *ST) : AMDGPU7XXDevice(ST) {
108 }
109
110 AMDGPU710Device::~AMDGPU710Device() {
111 }
112
113 size_t AMDGPU710Device::getWavefrontSize() const {
114   return AMDGPUDevice::QuarterWavefrontSize;
115 }