nv50/ir/tgsi: Infer function inputs/outputs.
[mesa.git] / src / gallium / drivers / radeon / AMDIL7XXDevice.cpp
1 //===-- AMDIL7XXDevice.cpp - TODO: Add brief description -------===//
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 #ifdef UPSTREAM_LLVM
11 #include "AMDIL7XXAsmPrinter.h"
12 #endif
13 #include "AMDILDevice.h"
14 #include "AMDILIOExpansion.h"
15 #include "AMDILPointerManager.h"
16
17 using namespace llvm;
18
19 AMDIL7XXDevice::AMDIL7XXDevice(AMDILSubtarget *ST) : AMDILDevice(ST)
20 {
21 setCaps();
22 std::string name = mSTM->getDeviceName();
23 if (name == "rv710") {
24 mDeviceFlag = OCL_DEVICE_RV710;
25 } else if (name == "rv730") {
26 mDeviceFlag = OCL_DEVICE_RV730;
27 } else {
28 mDeviceFlag = OCL_DEVICE_RV770;
29 }
30 }
31
32 AMDIL7XXDevice::~AMDIL7XXDevice()
33 {
34 }
35
36 void AMDIL7XXDevice::setCaps()
37 {
38 mSWBits.set(AMDILDeviceInfo::LocalMem);
39 }
40
41 size_t AMDIL7XXDevice::getMaxLDSSize() const
42 {
43 if (usesHardware(AMDILDeviceInfo::LocalMem)) {
44 return MAX_LDS_SIZE_700;
45 }
46 return 0;
47 }
48
49 size_t AMDIL7XXDevice::getWavefrontSize() const
50 {
51 return AMDILDevice::HalfWavefrontSize;
52 }
53
54 uint32_t AMDIL7XXDevice::getGeneration() const
55 {
56 return AMDILDeviceInfo::HD4XXX;
57 }
58
59 uint32_t AMDIL7XXDevice::getResourceID(uint32_t DeviceID) const
60 {
61 switch (DeviceID) {
62 default:
63 assert(0 && "ID type passed in is unknown!");
64 break;
65 case GLOBAL_ID:
66 case CONSTANT_ID:
67 case RAW_UAV_ID:
68 case ARENA_UAV_ID:
69 break;
70 case LDS_ID:
71 if (usesHardware(AMDILDeviceInfo::LocalMem)) {
72 return DEFAULT_LDS_ID;
73 }
74 break;
75 case SCRATCH_ID:
76 if (usesHardware(AMDILDeviceInfo::PrivateMem)) {
77 return DEFAULT_SCRATCH_ID;
78 }
79 break;
80 case GDS_ID:
81 assert(0 && "GDS UAV ID is not supported on this chip");
82 if (usesHardware(AMDILDeviceInfo::RegionMem)) {
83 return DEFAULT_GDS_ID;
84 }
85 break;
86 };
87
88 return 0;
89 }
90
91 uint32_t AMDIL7XXDevice::getMaxNumUAVs() const
92 {
93 return 1;
94 }
95
96 FunctionPass*
97 AMDIL7XXDevice::getIOExpansion(
98 TargetMachine& TM AMDIL_OPT_LEVEL_DECL) const
99 {
100 return new AMDIL7XXIOExpansion(TM AMDIL_OPT_LEVEL_VAR);
101 }
102
103 AsmPrinter*
104 AMDIL7XXDevice::getAsmPrinter(TargetMachine& TM, MCStreamer &Streamer) const
105 {
106 #ifdef UPSTREAM_LLVM
107 return new AMDIL7XXAsmPrinter(TM, Streamer);
108 #else
109 return NULL;
110 #endif
111 }
112
113 FunctionPass*
114 AMDIL7XXDevice::getPointerManager(
115 TargetMachine& TM AMDIL_OPT_LEVEL_DECL) const
116 {
117 return new AMDILPointerManager(TM AMDIL_OPT_LEVEL_VAR);
118 }
119
120 AMDIL770Device::AMDIL770Device(AMDILSubtarget *ST): AMDIL7XXDevice(ST)
121 {
122 setCaps();
123 }
124
125 AMDIL770Device::~AMDIL770Device()
126 {
127 }
128
129 void AMDIL770Device::setCaps()
130 {
131 if (mSTM->isOverride(AMDILDeviceInfo::DoubleOps)) {
132 mSWBits.set(AMDILDeviceInfo::FMA);
133 mHWBits.set(AMDILDeviceInfo::DoubleOps);
134 }
135 mSWBits.set(AMDILDeviceInfo::BarrierDetect);
136 mHWBits.reset(AMDILDeviceInfo::LongOps);
137 mSWBits.set(AMDILDeviceInfo::LongOps);
138 mSWBits.set(AMDILDeviceInfo::LocalMem);
139 }
140
141 size_t AMDIL770Device::getWavefrontSize() const
142 {
143 return AMDILDevice::WavefrontSize;
144 }
145
146 AMDIL710Device::AMDIL710Device(AMDILSubtarget *ST) : AMDIL7XXDevice(ST)
147 {
148 }
149
150 AMDIL710Device::~AMDIL710Device()
151 {
152 }
153
154 size_t AMDIL710Device::getWavefrontSize() const
155 {
156 return AMDILDevice::QuarterWavefrontSize;
157 }