1fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard//===-- AMDIL7XXDevice.cpp - Device Info for 7XX GPUs ---------------------===//
2a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
3a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//                     The LLVM Compiler Infrastructure
4a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
5a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// This file is distributed under the University of Illinois Open Source
6a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// License. See LICENSE.TXT for details.
7a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
8a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//==-----------------------------------------------------------------------===//
9a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "AMDIL7XXDevice.h"
10b72ab79d73b29ec087d90cf2c698adbab4db5defTom Stellard#include "AMDGPUSubtarget.h"
11a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "AMDILDevice.h"
12a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
13a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardusing namespace llvm;
14a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
152f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPU7XXDevice::AMDGPU7XXDevice(AMDGPUSubtarget *ST) : AMDGPUDevice(ST)
16a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
17a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  setCaps();
18a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  std::string name = mSTM->getDeviceName();
19a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  if (name == "rv710") {
20a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    mDeviceFlag = OCL_DEVICE_RV710;
21a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  } else if (name == "rv730") {
22a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    mDeviceFlag = OCL_DEVICE_RV730;
23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  } else {
24a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    mDeviceFlag = OCL_DEVICE_RV770;
25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  }
26a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
27a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
282f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPU7XXDevice::~AMDGPU7XXDevice()
29a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
30a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
31a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
322f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardvoid AMDGPU7XXDevice::setCaps()
33a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
342f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  mSWBits.set(AMDGPUDeviceInfo::LocalMem);
35a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
36a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
372f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPU7XXDevice::getMaxLDSSize() const
38a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
392f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  if (usesHardware(AMDGPUDeviceInfo::LocalMem)) {
40a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    return MAX_LDS_SIZE_700;
41a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  }
42a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  return 0;
43a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
44a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
452f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPU7XXDevice::getWavefrontSize() const
46a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
472f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  return AMDGPUDevice::HalfWavefrontSize;
48a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
49a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
502f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellarduint32_t AMDGPU7XXDevice::getGeneration() const
51a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
522f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  return AMDGPUDeviceInfo::HD4XXX;
53a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
54a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
552f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellarduint32_t AMDGPU7XXDevice::getResourceID(uint32_t DeviceID) const
56a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
57a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  switch (DeviceID) {
58a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  default:
59a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    assert(0 && "ID type passed in is unknown!");
60a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    break;
61a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  case GLOBAL_ID:
62a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  case CONSTANT_ID:
63a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  case RAW_UAV_ID:
64a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  case ARENA_UAV_ID:
65a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    break;
66a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  case LDS_ID:
672f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard    if (usesHardware(AMDGPUDeviceInfo::LocalMem)) {
68a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      return DEFAULT_LDS_ID;
69a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    }
70a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    break;
71a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  case SCRATCH_ID:
722f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard    if (usesHardware(AMDGPUDeviceInfo::PrivateMem)) {
73a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      return DEFAULT_SCRATCH_ID;
74a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    }
75a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    break;
76a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  case GDS_ID:
77a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    assert(0 && "GDS UAV ID is not supported on this chip");
782f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard    if (usesHardware(AMDGPUDeviceInfo::RegionMem)) {
79a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      return DEFAULT_GDS_ID;
80a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    }
81a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    break;
82a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  };
83a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
84a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  return 0;
85a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
86a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
872f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellarduint32_t AMDGPU7XXDevice::getMaxNumUAVs() const
88a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
89a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  return 1;
90a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
91a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
922f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPU770Device::AMDGPU770Device(AMDGPUSubtarget *ST): AMDGPU7XXDevice(ST)
93a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
94a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  setCaps();
95a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
96a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
972f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPU770Device::~AMDGPU770Device()
98a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
99a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
100a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
1012f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardvoid AMDGPU770Device::setCaps()
102a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
1032f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  if (mSTM->isOverride(AMDGPUDeviceInfo::DoubleOps)) {
1042f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard    mSWBits.set(AMDGPUDeviceInfo::FMA);
1052f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard    mHWBits.set(AMDGPUDeviceInfo::DoubleOps);
106a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  }
1072f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  mSWBits.set(AMDGPUDeviceInfo::BarrierDetect);
1082f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  mHWBits.reset(AMDGPUDeviceInfo::LongOps);
1092f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  mSWBits.set(AMDGPUDeviceInfo::LongOps);
1102f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  mSWBits.set(AMDGPUDeviceInfo::LocalMem);
111a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
112a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
1132f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPU770Device::getWavefrontSize() const
114a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
1152f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  return AMDGPUDevice::WavefrontSize;
116a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
117a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
1182f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPU710Device::AMDGPU710Device(AMDGPUSubtarget *ST) : AMDGPU7XXDevice(ST)
119a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
120a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
121a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
1222f921101c0826dc52a2c69f85c3da0f7f6e8212aTom StellardAMDGPU710Device::~AMDGPU710Device()
123a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
124a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
125a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
1262f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellardsize_t AMDGPU710Device::getWavefrontSize() const
127a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
1282f921101c0826dc52a2c69f85c3da0f7f6e8212aTom Stellard  return AMDGPUDevice::QuarterWavefrontSize;
129a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
130